当前位置:   article > 正文

关于arm汇编入栈和出栈的总结_stmfd寄存器号出入栈顺序

stmfd寄存器号出入栈顺序

用汇编进行函数内压栈和出栈往往使用如下的语句:

 stmfd sp!, {r0-r9, lr} ; (1)给寄存器r0-r9, lr压栈

 ldmfd sp!, {r0-r9, pc}; (2)给寄存器r0-r9出栈, 并使程序跳转回函数的调用点

 

stmfd  代表满递减入栈,即sp指向栈顶元素,每入栈一个元素,sp的值减4;

ldmfd  代表的是满递减出栈,正确的含义是sp指向栈顶元素,每出栈一个元素,sp值加4。

 

用TRACE32做实验可得下面的结果。

执行(1)之前的寄存器情况如下图:

 

                                     图1

 

R13的值为0x5801FFE8, 保存11个寄存器,则入栈后地址应该是0x5801FFE8-11*4=0x

5801FFBC

单步执行过(1)指令后,寄存器的情况如下图:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/531581
推荐阅读
相关标签
  

闽ICP备14008679号