赞
踩
用汇编进行函数内压栈和出栈往往使用如下的语句:
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)指令后,寄存器的情况如下图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。