- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序控制指令
* 主程序调用子程序的执行过程: 将调用指令的下一条指令的地址(断点)压入堆栈(CALL指令); ----相当于乎 PUSH 下一条指令的地址(IP或 CS:IP) 获取子过程的入口地址(子过程第1条指令的偏移地址) (CALL指令) ; ----相当于乎 JMP入口地址(CS:IP’或CS’:IP’) 执行子过程,含相应参数的保存及恢复(其它指令); 将断点偏移地址由堆栈弹出,返回原程序(RET指令)。 ----相当于乎 POP IP或 CS:IP * 一般格式:CALL sub ;sub为子程序的入口 根据子程序入口的寻址方式,子程序调用有4类。 ① 段内直接调用 子程序的偏移地址直接由CALL指令给出。 格式:CALL near_proc ;近调用 CALL执行时,它首先将IP内容压栈,然后把指令中给出的位移量加到IP上得到新IP’跳转到子程序入口地址。 注意:汇编以后的调用地址是相对于CALL的下一条指令的位移量。 例:CALL 0120H ;子程序偏移地址由指令给出 (1)调用指令 CALL * 位移量由汇编程序在汇编时进行计算,如下例: 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内容压栈,然后把指定的寄存器/存储器的内容送入IP得到新IP’跳转。 例: CALL BX ;子程序地址由BX给出 CALL WORD PTR[SI] ;子程序地址在存储器中 ②段内间接调用 * CALL IPH IPL 代码段 数据段 CALL WORD PTR [SI]指令的操作图示: 假定:(DS) = 8000H,(SI) = 1200H 81200H 81201H * 子程序的段地址和偏移地址直接由CALL指令给出。 格式:CALL far_proc ;far_proc为远过程的地址 ;远调用 指令的操作为: ? CS内容压栈 ? IP内容压栈 ? CS’←段地址 ? IP’←偏移地址 例:CALL 2000H:1000H CALL TIMER ;TIMER为远过程 ③段间直接调用 保护断点 跳转 * 子程序的段和偏移地址为存储器的连续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四个存储单元中。低字内容为偏移地址,高字内容为段地址。 ④段间间接调用 * CALL 代码段 数据段 IPH IPL CSH CSL [DI] [DI]+1 [DI]+2 [DI]+3 段间间接调用示意图 CALL DWORD PTR[DI] * 例:下面的程序执行后,(AX)=? (DX)=? CS:2000H MOV AX, 2012H 2003H MOV CX, 200CH(无此指令) 2006H PUSH CX 2007H CALL 4000H 200AH ADD AX, BX 200CH ADD AX, DX 200EH HLT … … … … CS:4000H MOV
文档评论(0)