- 1、本文档共117页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微机原理第三章分析
第3章 80x86/Pentium指令系统 CALL指令有4种形式:段内直接调用 段间直接调用 段内间接调用 段间间接调用 (1) 调用指令 CALL OPRD ① 段内或段间直接调用 CALL proc_name 段内直接的操作:将断点IP进堆栈保护(SP←SP-2,[SP] ←IP); 再修改IP (IP← IP+D16)。 段间直接的操作:将断点CS、IP进堆栈保护(SP←SP-2,[SP]←CS ; SP←SP-2,[SP] ←IP) 再修改CS、IP ( ←子程序的段地址和偏移地址) 与子程序的起始地址相关联 段内:主程序与子程序在同一个代码段内,子程序属性NEAR; 段间:主程序与子程序不在同一个代码段内,子程序属性FAR。 直接:目标地址信息就在CALL指令中; 间接:目标地址在由指令指定的寄存器或内存单元中。 D16为目标地址与断点地址的差,在-32768 ~ +32767 第3章 80x86/Pentium指令系统 (① subp是NEAR过程) CODE SEGMENT ;CODE段 … CALL subp ;yyy入栈 ,D16 = subp-yyy xxx:yyy … … subp PROC NEAR ;过程定义 … RET ;返回 subp ENDP CODE ENDS (② subp是FAR过程) CSEG1 SEGMENT … CALL subp AA: … … CSEG1 ENDS CSEG2 SEGMENT … subp PROC FAR … RET subp ENDP … CSEG2 ENDS AA处的CS:IP入栈后转subp 工作过程如下: 南京航空航天大学 电子信息工程学院 第3章 80x86/Pentium指令系统 DATA SEGMENT X DW 100 Y DW 10 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA MAIN PROC FAR … CALL subp … RET MAIN ENDP subp PROC NEAR MOV AX,X MOV BX,Y MUL BX RET subp ENDP CODE ENDS END MAIN 注:子程序和主程序在同一个程序模块,子程序可以直接访问模块中的变量。 例:两个数据变量X与Y相乘。 第3章 80x86/Pentium指令系统 ② 段内或段间间接调用 CALL reg/men 段内间接的操作:将断点IP进堆栈保护(SP←SP-2,[SP] ←IP); 再修改IP (IP ← reg 或 IP ←[EA])。 段间间接的操作:将断点CS、IP进堆栈保护(SP←SP-2,[SP]←CS ;
文档评论(0)