推和弹出手臂

Nic*_*hop 9 assembly arm

我真的不明白堆栈命令或堆栈一般如何工作.

如果我有的话

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},注册在机器代码的位掩码指定集,所以你不能影响在寄存器中存储/加载的顺序.