第章子程序设计 该指令先把返回地址(即主程序中CALL指令的下一条指令 的地址)保存到堆栈中,以便子程序执行完返回主程序时使用, 然后则转移到子程序的入口地址去执行子程序。指令中的DST 般是过程名(被调用过程),即子程序入口的符号地址,D16是 子程序入口地址和CAL指令之间的偏移量
第6章 子 程 序 设 计 该指令先把返回地址(即主程序中CALL指令的下一条指令 的地址)保存到堆栈中,以便子程序执行完返回主程序时使用, 然后则转移到子程序的入口地址去执行子程序。指令中的DST 一般是过程名(被调用过程),即子程序入口的符号地址,D16是 子程序入口地址和CALL指令之间的偏移量
第章子程序设计 例6-3 CODE SEGMENT MAIN PROC FAR CALL SUBR1 MAIN ENDP SUBR1 PROC NEAR SUBR1 ENDP CODE ENDS
第6章 子 程 序 设 计 例6-3 CODE SEGMENT MAIN PROC FAR CALL SUBR1 MAIN ENDP SUBR1 PROC NEAR SUBR1 ENDP CODE ENDS … … …
第章子程序设计 代码段 堆栈 堆栈 FF 0500H CALL SUBR1 00 0501H (IP)= 03 01 0502H 05 (IP)- 0503H (SP)I SUBRI0603H (a) (b) 图6-3段内直接调用指令CAL执行示意图
第6章 子 程 序 设 计 图6-3 段内直接调用指令CALL执行示意图 F F 00 01 … … … 0603H 0503H 0502H 0501H 0500H 代码段 CALL SUBR1 (IP) SUBR1 03 05 堆 栈 (IP) (b) (c) 堆 栈 (SP) (a)
第章子程序设计 本例中执行 CALL SUBRI时,自动将返回地址(IP)=0503H 入栈保存,然后执行(IP)+D16=0503H+010OH=0603H→IP,转 到子程序SUBR1去执行。 图6-3中:(a)图是 CALL SUBR1执行前堆栈;(b)图是CALL SUBR1执行后堆栈;(c)图是 CALL SUBRI机器指令格式示意图
第6章 子 程 序 设 计 本例中执行CALL SUBR1时,自动将返回地址(IP)=0503H, 入栈保存,然后执行(IP)+D16=0503H+0100H=0603H→IP,转 到子程序SUBR1去执行。 图6-3中:(a)图是CALL SUBR1执行前堆栈;(b)图是CALL SUBR1执行后堆栈;(c)图是CALL SUBR1机器指令格式示意图
第章子程序设计 2.段内间接调用 格式: CALL DSt CALL WORD FAR DST 其中:DST为通用寄存器或字存储器。 功能:将子程序的返回地址(断点地址)存入栈中,并转移 到子程序的入口地址执行子程序。 执行的操作:(SP)-2→SP (IP)→(SP)+1,(SP) (EA)→IP 其中,EA是由DST的寻址方式所确定的有效地址
第6章 子 程 序 设 计 2.段内间接调用 格式:CALL DST CALL WORD FAR DST 其中:DST为通用寄存器或字存储器。 功能:将子程序的返回地址(断点地址)存入栈中,并转移 到子程序的入口地址执行子程序。 执行的操作:(SP)-2→SP (IP) →(SP)+1,(SP) (EA) →IP 其中,EA是由DST的寻址方式所确定的有效地址