汇编语言程序设计中,子程序设计时的现场保护和恢复是如何实现的举例说明。

 我来答
普_化
推荐于2018-04-09 · 超过24用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:63.2万
展开全部
从别人回答中摘的:

常见的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数值没变!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式