文档详情

微机原理第三章解读.ppt

发布:2017-01-23约5.57万字共117页下载文档
文本预览下载声明
第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 ;
显示全部
相似文档