ARM指令寻址方式之: 内存访问指令寻址
4.2 内存访问指令寻址
根据内存访问指令的分类,内存访问指令的寻址方式可以分为以下几种。
① 字及无符号字节的Load/Store指令的寻址方式。
② 杂类Load/Store指令的寻址方式。
③ 批量Load/Store指令的寻址方式。
④ 协处理器Load/Store指令的寻址方式。
4.2.1 字及无符号字节的Load/Store指令的寻址方式
字及无符号字节的Load/Store指令语法格式如下:
LDR|STR{cond>}{B}{T} Rd>,addressing_mode>
其中addressing_mode>共有9种寻址方式,如表4.2所示。
表4.2 字及无符合字节的Load/Store指令的寻址方式
格 式 |
模 式 |
|
1 |
[Rn,#±offset_12>] |
立即数偏移寻址 (Immediate offset) |
2 |
[Rn,±Rm] |
寄存器偏移寻址 (Register offset) |
3 |
[Rn,Rm,shift># offset_12>] |
带移位的寄存器偏移寻址 (Scaled register offset) |
4 |
[Rn,#± offset_12>]! |
立即数前索引寻址 (Immediate pre-indexed) |
5 |
[Rn,±Rm]! |
寄存器前索引寻址 (Register post-indexed) |
6 |
[Rn,Rm,shift># offset_12>]! |
带移位的寄存器前索引寻址 (Scaled register pre-indexed) |
7 |
[Rn],#± offset_12> |
立即数后索引寻址 (Immediate post-indeded) |
8 |
[Rn],±Rm> |
寄存器后索引寻址 (Register post-indexed) |
9 |
[Rn],±Rm>,shift># offset_12> |
带移位的寄存器后索引寻址 (Scaled register post-indexed) |
字及无符号字节的Load/Store指令的解码格式如图4.13所示。
图4.13 字及无符号字节的Load/Store指令的解码格式
编码格式中各位的含义如表4.3所示。
表4.3 字和无符号半字Load/Store指令编码格式各位含义
位 标 识 |
取 值 |
含 义 |
P |
P=0 |
使用后索引寻址 |
P=1 |
使用偏移地址或前索引寻址(由W位决定) |
|
U |
U=0 |
访问的地址=基址寄存器的值-偏移量(offset) |
U=1 |
访问的地址=基址寄存器的值+偏移量(offset) |
|
B |
B=0 |
字访问Load/Store |
B=1 |
无符号字节访问Load/Store |
|
W |
W=0 |
如果P=0,该指令为LDR、LDRB、STR或STRB指令,且内存访问指令为正常访问指令;如果P=1,指令执行不更新基地址 |
W=1 |
如果P=0,该指令为LDRBT、LDRT、STRBT或STRT,且指令为非特权(用户模式)访问指令;如果P=1,计算内存地址并更新基地址 |
|
L |
L=0 |
Store指令 |
L=1 |
Load指令 |
评论