在 ARMv8 架构中,STP指令用于将两个通用寄存器的值存储到内存中。STP指令的语法如下:
STP <Wt1>, <Wt2>, [<Xn|SP>{, #<imm>}]
或
STP <Xt1>, <Xt2>, [<Xn|SP>{, #<imm>}]
其中:
和
表示两个要存储的32位通用寄存器,
和
表示两个要存储的64位通用寄存器。[]
表示存储的目标内存地址,是一个可选的偏移量。STP指令将
和
或
和
的值存储到目标内存地址中,并且递增目标内存地址以便下一次存储。存储的数据可以是32位或64位,具体取决于使用的寄存器。
例如,下面的示例演示了如何使用STP指令将两个通用寄存器的值存储到内存中:
STP X0, X1, [X2] ; 将X0和X1的值存储到[X2]地址中
STP W3, W4, [SP, #16] ; 将W3和W4的值存储到[SP+16]地址中
请注意,STP指令在ARMv8架构中引入了64位寄存器,因此可以存储更大的数据量。
LDP指令用于从内存中加载两个通用寄存器的值。LDP指令的语法如下:
LDP <Wt1>, <Wt2>, [<Xn|SP>{, #<imm>}]
或
LDP <Xt1>, <Xt2>, [<Xn|SP>{, #<imm>}]
其中:
和
表示要加载的两个32位通用寄存器,
和
表示要加载的两个64位通用寄存器。[]
表示要加载的内存地址,是一个可选的偏移量。LDP指令从目标内存地址中加载数据,并将其存储到和或和寄存器中。加载的数据可以是32位或64位,具体取决于使用的寄存器。
以下示例演示了如何使用LDP指令从内存中加载两个通用寄存器的值:
LDP X0, X1, [X2] ; 从[X2]地址中加载值到X0和X1寄存器
LDP W3, W4, [SP, #16] ; 从[SP+16]地址中加载值到W3和W4寄存器
请注意,LDP指令在ARMv8架构中引入了64位寄存器,因此可以加载更大的数据量。
上篇文章:ARM 常见汇编指令学习 1 – 跳转指令 BL 与 BLR 区别
下篇文章:ARM 常见汇编指令学习 3 – ARM64 无符号位域提取指令 UBFX