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
这两个页面都没有解释说明末尾的感叹号含义。它是什么?
答案 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
。