sun博客

记录点滴!

STMFD主要用于保存现场,将寄存器中的值push到堆栈中!

LDMFD从堆栈中取中值恢复到寄存器中!

STMFD sp!, {R0-R7,LR}

arm规定,sp始终指向栈顶,且 STM指令把寄存器列表中索引最小的放在最低位置, 所以R0在最低地址,向上依次是R1,R2,…R7,LR。加上是fd(满递减),完成后SP指向保存R0的地址 。所以写在后面的寄存器先入栈。LDMFD写在前面的寄存器先出栈 。arm堆栈中以4个字节为一个单位。

@压栈 STMFD  
memory[sp] = lr
for i = 7 to 0
    sp = sp - 4
    memory[sp] = ri
@出栈 LDMFD
for i = 0 to 7
    ri = memory[sp]
    sp = sp + 4
lr = memory[sp]

参考文档:

http://t.zoukankan.com/locean-p-4718622.html

http://www.doc88.com/p-7864598785587.html

发表评论

邮箱地址不会被公开。 必填项已用*标注