杨付华3章基本编程技术 4.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
杨付华3章基本编程技术 4

3.3 顺序程序设计 3.4 分支程序设计 3.5 循环程序设计 3.6 子程序设计;教学提示;把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就形成子程序。 子程序可以实现源程序的模块化,可以简化源程序结构,可以提高编程效率。;3.6.1 子程序概念;子程序调用:进入子程序的操作; 子程序返回:子程序返回到主程序的操作; 主程序与子程序相互传递的信息称为参数 ;;3.6.2 子程序指令;一般格式:CALL sub ;sub为子程序的入口 根据子程序入口的寻址方式,子程序调用有四类。 ①段内直接调用 子程序的偏移地址直接由CALL指令给出。 格式:CALL near_proc CALL执行时,它首先将IP内容压栈, 1. SP←SP-2, 2. SS:[SP]←IP 然后把指令中给出的位移量加到IP上。 (3.IP ← near_proc) 注:汇编以后的调用地址是相对于CALL的下一条指令的位移量。 例:CALL 0120H ;子程序偏移地址由指令给出;位移量由汇编程序在汇编时进行计算,如下例: CS:0102 CALL 0120H ;3字节 CS:0105 …… 则位移量为: 0120-0105H=001BH 于是CALL 0120H的机器码为E8 1B 00 CS:0102 E8 CS:0103 1B CALL 0120H CS:0104 00 CS:0105 …… ;子程序的偏移地址在寄存器或存储器中。 格式:CALL mem16/reg16 CALL执行时,它首先将IP内容压栈, 1. SP←SP-2, 2. SS:[SP]←IP 然后把指定的寄存器/存储器的内容送入IP。 3. IP ← mem16/reg16 例: CALL AX ;调用地址由AX给出 CALL WORD PTR[SI] ;调用地址由存储器给出;CALL;子程序的段地址和偏移地址直接由CALL指令给出。 格式:CALL far_proc ;far_proc为远过程的地址 指令的操作为: SP←(SP)-2 SS:(SP)←(CS) ;CS压栈 CS←段地址 SP←(SP)-2 SS:(SP)←(IP) ;IP压栈 IP←偏移地址 例:CALL 2000H:1000H;子程序的段和偏移地址为存储器的连续4个单元中的内容。 格式:CALL mem32 指令的操作为: SP←(SP)-2 ((SP)+1,(SP))←(CS) ;CS压栈 CS←(mem32+2) SP←(SP)-2 ((SP)+1,(SP))←(IP) ;IP压栈 IP←(mem32) 例:CALL DWORD PTR[DI] 调用地址在[DI],[DI]+1,[DI]+2,[DI]+3四个存储单元中。低字内容为偏移地址,高字内容为段地址。;子程序返回指??;subname proc ;具有缺省属性的subname过程 push ax ;保护寄存器:顺序压入堆栈 push bx ;ax/bx/cx仅是示例 push cx ... ;过程体 pop cx ;恢复寄存器:逆序弹出堆栈 pop bx pop ax ret ;过程返回 subname endp ;过程结束;ALDISP PROC ;实现al内容的显示 PUSH AX ;过程中使用了AX、CX和DX PUSH CX PUSH DX PUSH AX ;暂存ax MOV DL,AL ;转换al的高4位 MOV CL,4 SHR DL,CL OR DL,30h ;al高4位变成3 CMP DL,39h JBE ALDISP1 ADD DL,7 ;是0Ah~0Fh,其ASCII码还要加上7 ALDISP1 :MOV AH,2 ;显示 INT 21H; POP DX ;恢复原AX值到DX AND DL,0FH ;转换AL的低4位 OR DL,30H CMP DL,39H JBE ALDISP2 ADD DL,7 ALDISP2: MOV AH,2 ;显示 INT 21H POP DX POP CX POP AX RET ;过程返回 ALDISP ENDP; ... ;主程序, loop outlp ;外循环尾 mov bx,offset array ;调用程序段开始 mov cx,count displp: mov al,[bx] call ALDISP ;调用显示过程 mov

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档