答案:从别人回答中摘的:
常见的CPU的CALL指令(“调用”指令)的功能,就是以下两点:
(1)将下一条指令的所在地址(即当时程序计数器PC的内容)入栈,
(2)并将子程序的起始地址送入PC(于是CPU的下一条指令就会转去执行子程序)。
而子程序结尾处通常都要编写一条RET指令(“返回”指令),RET指令的功能就是一条:
从栈中取出一条数据送入PC。
从上面叙述可以看出,正常情况下,RET指令从栈中取出的一条数据,也就是当初被CALL指令所入栈的下一条指令的所在地址。
因此,RET指令后,CPU的下一条指令就回去执行当初的CALL指令的下一条了。
CALL L1
调用子程序即过程调用,为了保护现场,会压栈保存断点,段内调用,说明L1的属性为NEAR,只需保存IP(pc值),SP=SP-2,但是如果是段间调用则需要保存CS和IP
那么SP=SP-4.不管怎么样,在执行完RET后,要恢复现场,即弹出断点,SP=SP+2
(段间调用SP=SP+4)
也就是说过程调用前后,SP总体看不会变,但是其堆栈发生了一系列变化。
SP数值没变!
上一个:有下面程序框图能帮忙编个程序吗要用汇编语言,谢谢!
下一个:汇编语言中$的意思?