我不太了解堆栈命令或堆栈在一般情况下的工作方式。
说我有没有
PUSH R3
POP R3
第1行:这是否意味着R3的内容将放在堆栈的顶部?如果R3更改,堆栈中的内容会更改吗?
第2行:在第二行,是将堆栈顶部的内容从堆栈移到R3中,还是将插入堆栈的R3的内容从堆栈中弹出?
同样当寄存器被括在方括号中时,pop/push会做什么?
POP {LR}
最佳答案
提到的堆栈操作只是在地址部分使用sp
进行内存操作的快捷方式。例如。
PUSH {r3}
POP {r3}
是的别名
str r3, [sp, #-4]!
ldr r3, [sp], #4
第一个操作说“将
r3
的内容存储为[sp - #4]
并将sp
减4”。最后一个“从r3
加载[sp]
并将sp
递增4”。除了
{r3}
之外,您还可以使用任何其他寄存器或寄存器集(例如{r1,r2,r3,lr}
。寄存器集在机器码的位掩码中指定,因此您不能影响寄存器的存储/加载顺序。