我不太了解堆栈命令或堆栈在一般情况下的工作方式。

说我有没有

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}。寄存器集在机器码的位掩码中指定,因此您不能影响寄存器的存储/加载顺序。

10-08 19:52