ARM指令寻址方式之: 内存访问指令寻址
ad/Store指令编码格式
编码格式中各标志位的含义如表4.7所示。
表4.7 批量Load/Store指令编码格式各标志位含义
| 位标识 | 取 值 | 含 义 |
| P | P=0 | Rn包含的地址,是所要访问的内存块的高地址(U=0)还是低地址(U=1) |
| P=1 | 标识Rn所指向的内存单元是否被访问 | |
| U | U=0 | Rn所指内存单元为所要访问的内存单元块的高地址 |
| U=1 | Rn所指内存单元为所要访问的内存单元块的低地址 | |
| S | S=0 | 当程序计数器PC作为要加载的寄存器之一时,S标识是否将spsr内容拷贝到cpsr;对于不加载PC的load指令和所有store指令,S标识特权模式下,使用用户模式寄存器组代替当前模式下寄存器组 |
| S=1 | ||
| W | W=0 | 数据传送完毕,更新地址寄存器内容 |
| W=1 | ||
| L | L=0 | Store指令 |
| L=1 | Load指令 |
1.IA寻址
(1)编码格式
指令的编码格式如图4.31所示。
该寻址方式指定一片连续的内存地址空间,地址空间的大小<address_length>等于寄存器列表中寄存器数目的4倍。内存地址范围起始地址<start_address>等于基址寄存器Rn的值。结束地址<end_address>等于起始地址<start_address>加上地址空间大小<address_length>。

图4.31 批量Load/Store指令--后增加寻址
地址空间中的每个内存单元对应寄存器列表中的一个寄存器。编号低的寄存器对应于内存中低地址单元,编号高的寄存器对应于内存中的高地址单元。
当指令执行条件满足并且指令编码格式中W位置位,基址寄存器Rn的值等于内存地址范围结束地址<end_address>加4。
(2)语法格式
LDM|STM{<cond>}IA <Rn>{!},<registers><^>
其中:
· IA标识指令使用"后增加"寻址方式;
· Rn为基址寄存器,包含内存访问的基地址;
· <registers>为指令操作的寄存器列表;
· <^>表示如果寄存器列表中包含程序计数器PC,是否将spsr拷贝到cpsr。
(3)操作伪代码
Start_address = Rn
End_address = Rn + (Number_of_Set_Bits_In(register_list)*4) – 4
If conditionPassed(cond) and W = = 1 then
Rn = Rn + (Number_of_Set_Bits_In(register_list)*4)
2.DA寻址
(1)编码格式
指令的编码格式如图4.32所示。

图4.32 批量Load/Store指令--后递减寻址
该寻址方式指定一片连续的内存地址空间,地址空间的大小<address_length>等于寄存器列表中寄存器数目的4倍。内存地址范围起始地址<start_address>等于基址寄存器Rn的值减去地址空间大小<address_length>并加4。结束地址<end_address>等于基址寄存器的值。
地址空间中的每个内存单元对应寄存器列表中的一个寄存器。编号低的寄存器对应于内存中低地址单元,编号高的寄存器对应于内存中的高地址单元。
当指令执行条件满足并且指令编码格式中W位置位时,基址寄存器Rn的值等于内存地址范围起始地址<start_address>减4。
(2)语法格式
LDM|STM{<cond>}IA <Rn>{!},<registers><^>
其中:
· DA标识指令使用"后递减"寻址方式;
· Rn为基址寄存器,包含内存访问的基地址;
· <registers>为指令操作的寄存器列表;
· <^>表示如果寄存器列表中包含程序计数器PC,是否将spsr拷贝到cpsr。
(3)操作伪代码
Start_address = Rn – (Number_of_Set_Bits_In(register_list)*4) + 4
End_address = Rn
If conditionPassed(cond) and W = = 1 then
Rn = Rn - (Number_of_Set_Bits_In(register_list)*4)
3.IB寻址
(1)编码格式
指令的编码格式如图4.33所示。

图4.33 批量Load/Store指令--前增加寻址
该寻址方式指定一片连续的内存地址空间,地址空间的大小<address_length>等于寄存器列表中寄存器数目的4倍。内存地址范围起始地址<start_address>等于基址寄存器Rn的值加4。结束地址<end_address>等于起始地址<start_address>加上地址空间大小<address_length>。
地址空间中的每个内存单元对应寄存器列表中的一个寄存器。编号低
- ARM指令寻址方式之: 数据处理指令的寻址方式(08-13)
- ARM汇编指令ARM寻址方式、汇编指令、伪指令(11-20)
- 单片机的指令和寻址方式(11-13)
- ARM 指令的寻址方式(11-11)
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
