寄存器内存读写指令(二) —— 多寄存器读写 LDM / STM

本文介绍了ARM处理器中用于提升效率的STM和LDM指令,用于一次性读写多个寄存器的数据。STM指令将多个寄存器数据保存到内存,LDM指令则从内存读取数据到多个寄存器。这两个指令有多种内存操作方式,如IA(IncreaseAfter)、IB(IncreaseBefore)、DA(DecreaseAfter)和DB(DecreaseBefore),分别对应不同的地址更新策略。通过这些指令,开发者可以更高效地处理批量数据操作。

有的时候,CPU可能会遇到 a++; b++; c++,这个时候为了提升效率,CPU可能会一次将多个寄存器里的变量保存到内存中。这个时候之前介绍的 LDR / STR 指令虽然也能实现,但只能操作一个寄存器的读写。

因此,考虑到这点,下面介绍多个寄存器的读写指令

  • 多个寄存器的数据写入到内存              —— STM指令
  • 从内存中读取数据保存到多个寄存器       —— LDM指令 

          目录

1、基本读写指令

(1) STM 指令

(2) LDM 指令

2、多寄存器的内存读写方式

(1) 后缀 IA(默认)

(2) 后缀 IB

(3) 后缀 DA

(4) 后缀 DB


1、基本读写指令

(1) STM 指令

STM指令的作用是将多个寄存器的数据依次保存到内存中的某一个位置。

指令格式:

  • STM 第一操作寄存器,  {起始寄存器 - 末尾寄存器}
  • STM 第一操作寄存器,  {寄存器1,  寄存器2, ...} 
MOV R1, #0x1
MOV R2, #0x2
MOV R3, #0x3
MOV R4, #0x4
MOV R11, #0x40000000

STM R11, {R1-R4}      @ 将R1-R4寄存器中的数据保存到以R11为起始位置的内存中(R11地址不随内存自增)

STM R11, {R1, R2, R3, R4} @ 与上面等价(R11地址不随内存自增,即R11就是起始地址)

STM R11!, {R1, R2, R3, R4}  @ 在R11的后面加上“ ! ”可以让R11中的地址随内存的存储位置自增变化

注意:花括号{ }中的寄存器编号顺序建议是升序,即便是乱序或者是降序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值