打印

程序在调用子程序的时候为什么pc指针也要入栈?

[复制链接]
2683|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 想把我唱给你听 于 2014-11-1 20:27 编辑

比如说一个子程序:
void test(int a , int b)
{
    ..........
    ..........
}
反汇编后应该是:
mov     ip, sp                  //IP=SP;保存SP
stmdb   sp!, {fp, ip, lr, pc}   //先对SP减4,再对fp,ip,lr,pc压栈。
(这里的pc指针入栈后面没用到,如果不入栈可以吗?为什么?)
sub     fp, ip, #4      ; 0x4   //fp=ip-4;此时fp指向栈里面的“pc”

..........
..........(参数入栈)
..........(局部变量入栈)
..........
sub     sp, fp, #12     ; 0xc   //sp=fp-12;此时sp指向栈里面的lr
ldmia   sp, {fp, sp, pc}        //弹栈pc=lr,sp=ip,fp=fp。然后地址加4---------1

相关帖子

沙发
zchong| | 2014-11-2 18:48 | 只看该作者
好像没有必要PC入栈啊

使用特权

评论回复
板凳
ayb_ice| | 2014-11-3 14:05 | 只看该作者
中间调用了子程序就要入栈

再说这样入栈,返回时效率高

使用特权

评论回复
地板
alphalovelife| | 2014-11-4 23:37 | 只看该作者
本帖最后由 alphalovelife 于 2014-11-5 00:55 编辑

同求,貌似可以不入pc。
还有第二条sp减了16,倒数第二条sp指向"fp"?

使用特权

评论回复
5
麻烦死了| | 2016-4-17 15:48 | 只看该作者
同问啊,我也觉得奇怪,逻辑上也不对啊,入栈时四个,出栈时只三个。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

2

粉丝