【ARM 常见汇编指令学习 2 -- 存储指令 STP 与 LDP】

avatar
作者
猴君
阅读量:0

文章目录


上篇文章:ARM 常见汇编指令学习 1 – 跳转指令 BL 与 BLR 区别
下篇文章:ARM 常见汇编指令学习 3 – ARM64 无符号位域提取指令 UBFX

STP 存储指令

在 ARMv8 架构中,STP指令用于将两个通用寄存器的值存储到内存中。STP指令的语法如下:

STP <Wt1>, <Wt2>, [<Xn|SP>{, #<imm>}] 

STP <Xt1>, <Xt2>, [<Xn|SP>{, #<imm>}] 

其中:

  • <Wt1><Wt2>表示两个要存储的32位通用寄存器,
  • <Xt1><Xt2>表示两个要存储的64位通用寄存器。
  • [<Xn|SP>]表示存储的目标内存地址,是一个可选的偏移量。

STP指令将 <Wt1><Wt2><Xt1><Xt2> 的值存储到目标内存地址中,并且递增目标内存地址以便下一次存储。存储的数据可以是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指令的语法如下:

LDP <Wt1>, <Wt2>, [<Xn|SP>{, #<imm>}] 

LDP <Xt1>, <Xt2>, [<Xn|SP>{, #<imm>}] 

其中:

  • <Wt1><Wt2>表示要加载的两个32位通用寄存器,
  • <Xt1><Xt2>表示要加载的两个64位通用寄存器。
  • [<Xn|SP>]表示要加载的内存地址,是一个可选的偏移量。

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

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!