我真的不明白堆栈命令或堆栈一般如何工作.
如果我有的话
PUSH R3
POP R3
Run Code Online (Sandbox Code Playgroud)
第1行:这是否意味着R3的内容将被置于堆栈的顶部?如果R3改变,堆栈的内容会改变吗?
第2行:在第二行,堆栈顶部的内容是否会从堆栈移动到R3中或者是被推入堆栈的R3内容从堆栈中弹出?
当寄存器被括号括起来时,pop/push也会做什么
POP {LR}
Run Code Online (Sandbox Code Playgroud)
ens*_*nsc 11
上述堆栈操作只是sp地址部分中使用的内存操作的快捷方式.例如
PUSH {r3}
POP {r3}
Run Code Online (Sandbox Code Playgroud)
是别名
str r3, [sp, #-4]!
ldr r3, [sp], #4
Run Code Online (Sandbox Code Playgroud)
第一个操作说"存储r3进入[sp - #4]和减少sp4的内容".最后一个" r3从4 加载[sp]并增加sp4".
代替的{r3}可以使用任何其它寄存器或寄存器组(例如{r1,r2,r3,lr},注册在机器代码的位掩码指定集,所以你不能影响在寄存器中存储/加载的顺序.