A64指令结束时感叹号的含义是什么?

时间:2016-09-29 21:26:09

标签: assembly stack arm arm64 instructions

documentation for LDP and STP给出了一个带有感叹号的示例指令:

LDP X8, X2, [X0, #0x10]!

A64中的documentation about porting A32 PUSH/POP指令也提供了以下示例:

PUSH {r0-r1} ---> STP X0, X1, [SP, #-16]!
POP {r0-r1}  ---> LDP X0, X1, [SP], #16

这两个页​​面都没有解释说明末尾的感叹号含义。它是什么?

1 个答案:

答案 0 :(得分:9)

!表示“注册回写”:基址寄存器用于计算传输地址,更新

在你的例子中:

LDP X8, X2, [X0, #0x10]!
修改了

X0以便在操作之后:

X0 = X0 + 0x10

如果您未放置!,则操作不会修改X0

关于PUSH / POP的第二个例子,不同之处在于增量完成时:

地址STP X0, X1, [SP, #-16]!

SP-16个商店,SP以同样的方式递减

LDP X0, X1, [SP], #16从地址SP加载,并在执行转移后,将SP+16存储到SP