“汇编call”的命令解析是什么?

使用汇编语言中的call命令,伴随着一些内容的入栈,那么,入栈的都是一些什么内容呢?它们入栈的顺序是什么样的?... 使用汇编语言中的call命令 ,伴随着一些内容的入栈,那么,入栈的都是一些什么内容呢?它们入栈的顺序是什么样的? 展开
 我来答
教育小百科达人
推荐于2019-09-24 · TA获得超过156万个赞
知道大有可为答主
回答量:8828
采纳率:99%
帮助的人:479万
展开全部

不同的CPU可能有不同的规定。下面只说常见的简单CPU的指令。

常见的CPU的CALL指令(“调用”指令)的功能,就是以下两点:

(1)将下一条指令的所在地址(即当时程序计数器PC的内容)入栈,

(2)并将子程序的起始地址送入PC(于是CPU的下一条指令就会转去执行子程序)。

而子程序结尾处通常都要编写一条RET指令(“返回”指令),RET指令的功能就是一条:

从栈中取出一条数据送入PC。

从上面叙述可以看出,正常情况下,RET指令从栈中取出的一条数据,也就是当初被CALL指令所入栈的下一条指令的所在地址。

因此,RET指令后,CPU的下一条指令就回去执行当初的CALL指令的下一条了。

至于其他操作,如sweetsugar123兄所说的“保护寄存器现场”等等,一般并非CALL指令的功能,而是需要程序员自行在子程序内编写程序实现的。这些操作通常也需要用到堆栈。基于堆栈的“后进先出”性质,这些操作可以不干扰CALL和RET指令的“保存返回地址”的功能。

haolizhong4924
2017-12-27 · TA获得超过5219个赞
知道小有建树答主
回答量:600
采纳率:50%
帮助的人:268万
展开全部
不同的CPU可能有不同的规定。下面只说常见的简单CPU的指令。

常见的CPU的CALL指令(“调用”指令)的功能,就是以下两点:
(1)将下一条指令的所在地址(即当时程序计数器PC的内容)入栈,
(2)并将子程序的起始地址送入PC(于是CPU的下一条指令就会转去执行子程序)。

而子程序结尾处通常都要编写一条RET指令(“返回”指令),RET指令的功能就是一条:
从栈中取出一条数据送入PC。

从上面叙述可以看出,正常情况下,RET指令从栈中取出的一条数据,也就是当初被CALL指令所入栈的下一条指令的所在地址。
因此,RET指令后,CPU的下一条指令就回去执行当初的CALL指令的下一条了。

至于其他操作,如sweetsugar123兄所说的“保护寄存器现场”等等,一般并非CALL指令的功能,而是需要程序员自行在子程序内编写程序实现的。这些操作通常也需要用到堆栈。基于堆栈的“后进先出”性质,这些操作可以不干扰CALL和RET指令的“保存返回地址”的功能。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式