- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.2.5 调用/转移/循环控制/中断指令 CALL 1000H 段内直接 CALL EAX 段内间接 CALL 2500H:3600H 段间直接 CALL DWORD PTR [DI] 段间间接 RET指令可以带有一个立即数i16,则堆栈指针SP将增加,即SP←SP+i16,这个特点使得程序可以方便地废除若干执行CALL指令以前入栈的参数 JMP 1000H ;段内直接 JMP CX ;段内间接 JMP 1000H:2000H ;段间直接 JMP DWORD PTR [SI] ;段间间接 JE/JZ JNE/JNZ JG/JNLE JNG/JLE JL/JNGE JNL/JGE JNA/JBE JB/JNAE JNB/JAE JA/JNBE 博学 审问 慎思 明辨 笃行 * 转移可分成两类:段内或段间转移。 段内转移:只要改变IP寄存器的内容 指在同一段的范围之内进行转移 即用新的转移目标地址代替原有的IP值。 段间转移:要修改IP、 CS寄存器的内容 转到另一段去执行程序。 即转移目标地址= 新的段地址和偏移地址组成。 目标地址可以是:直接方式/间接方式给出。 代码段 代码段 代码段 代码段 第3章 Pentium的指令系统 1. 子程序调用和返回指令 CALL label 主程序 RET 子程序 回到CALL指令后的指令处——返回地址 第3章 Pentium的指令系统 放在子程序的末尾 使子程序在功能完成后返回调用程序继续执行。 *为能准确返回 ,返回指令类型与调用指令类型相对应。 在子程序调用时,需要保存返回地址,返回地址入栈 在子程序返回时:将返回地址出栈 段内返回——出栈偏移地址IP IP←SS:[SP], SP←SP+2 段间返回——出栈偏移地址IP和段地址CS IP←SS:[SP],SP←SP+2 CS←SS:[SP],SP←SP+2 返回指令 RET 第3章 Pentium的指令系统 RET n 带参数的返回指令: RET返回指令有4种: 段内返回 段间返回 段内带立即数返回 段间带立即数返回 n只能为偶数 第3章 Pentium的指令系统 (AX) (BX) (CX) (SP)? code segment main proc far …… push ax push bx push cx call sub …… ret main endp sub proc near …… ret 6 sub endp code ends (SP)? 堆栈段 (SP)? (IP) 第3章 Pentium的指令系统 JMP dest ; 必须指定转移目标地址(或转向地址)。 2. 无条件转移指令和条件转移指令JMP/J* (其中,* 代表各种条件) 1) 无条件转移指令JMP 例:已知(BX)=1000H,(SI)=2000H , (DS)=2000H (23000H)=0250H, (23002H)=2000H JMP DWORD PTR [BX][SI] 则: (BX)+(SI)=3000H (IP)=(PA)=(16d?(DS)+(BX)+(SI))=(23000H)=0250H (CS)=(PA+2)=2000H 第3章 Pentium的指令系统 JS JNS JO JNO JP NP JCXZ JECXZ 2) 条件转移指令J* 根据单个条件标志的设置情况转移 根据两个
文档评论(0)