有的时候,CPU可能会遇到 a++; b++; c++,这个时候为了提升效率,CPU可能会一次将多个寄存器里的变量保存到内存中。这个时候之前介绍的 LDR / STR 指令虽然也能实现,但只能操作一个寄存器的读写。
因此,考虑到这点,下面介绍多个寄存器的读写指令
- 将多个寄存器的数据写入到内存 —— STM指令
- 从内存中读取数据保存到多个寄存器 —— LDM指令
目录
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中的地址随内存的存储位置自增变化

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

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

被折叠的 条评论
为什么被折叠?



