assembly - A64指令末尾的感叹号是什么意思?

标签 assembly arm stack arm64 addressing-mode

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

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

还有 documentation about porting A32 PUSH/POP A64 中的说明给出了以下示例:
PUSH {r0-r1} ---> STP X0, X1, [SP, #-16]!
POP {r0-r1}  ---> LDP X0, X1, [SP], #16

这两页都没有解释说明末尾的感叹号是什么意思。它有什么作用?

最佳答案

!意思是“Register write-back”:基址寄存器用来计算传输的地址,已更新 .

在你的例子中:

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+16SP .

关于assembly - A64指令末尾的感叹号是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39780289/

相关文章:

android - GCC/ARM 中带有 long long 的子结果错误

java - 我的代码遇到了运行时错误,有人可以帮我找出我哪里错了

c++ - 在 C++ 中以编程方式查找浮点寄存器的数量

c++ - 编写一个简单的 Bootloader HelloWorld - 错误函数打印字符串

在没有原型(prototype)的情况下将 C 地址作为函数调用

c - 通过中断保护读取值

assembly - 汇编程序 xbegin 引发非法指令

assembly - ARM 汇编,操作变量

c++ - C++ 中的堆栈对象创建 - 替代语法

json - 亚马逊上嵌套堆栈中的参数