Ser*_*tch 7 assembly stack arm instructions arm64
LDP X8, X2, [X0, #0x10]!
Run Code Online (Sandbox Code Playgroud)
有关将A32 PUSH/POP指令移植到A64中的文档还提供了以下示例:
PUSH {r0-r1} ---> STP X0, X1, [SP, #-16]!
POP {r0-r1} ---> LDP X0, X1, [SP], #16
Run Code Online (Sandbox Code Playgroud)
这两个页面都没有解释说明书末尾的感叹号是什么意思.它是什么?
!"寄存器回写" 的含义:基址寄存器用于计算传输的地址,并进行更新.
在你的例子中:
LDP X8, X2, [X0, #0x10]!
Run Code Online (Sandbox Code Playgroud)
X0 修改后使操作后:
X0 = X0 + 0x10
Run Code Online (Sandbox Code Playgroud)
如果你没有把!,X0不被操作修改.
在关于PUSH/POP的第二个例子中,不同之处在于增量完成时:
STP X0, X1, [SP, #-16]!存储在地址SP-16,并SP以相同的方式递减
LDP X0, X1, [SP], #16从地址加载SP,并在执行传输后,存储SP+16到SP.