ARM指令寻址方式之: 内存访问指令寻址
表4.8显示了堆栈的寻址方式和批量Load/Store指令寻址方式的对应关系。
表4.8 堆栈寻址方式和批量Load/Store指令寻址方式对应关系
批量数据寻址方式 |
堆栈寻址方式 |
L位 |
P位 |
U位 |
LDMDA |
LDMFA |
1 |
0 |
0 |
LDMIA |
LDMFD |
1 |
0 |
1 |
LDMDB |
LDMEA |
1 |
1 |
0 |
LDMIB |
LDMED |
1 |
1 |
1 |
STMDA |
STMED |
0 |
0 |
0 |
STMIA |
STMEA |
0 |
0 |
1 |
STMDB |
STMFD |
0 |
1 |
0 |
STMIB |
STMFA |
0 |
1 |
1 |
4.2.5 协处理器Load/Store寻址方式
协处理器Load/Store指令的语法格式如下。
opcode>{cond>}{L} coproc>,CRd>,addressing_mode>
表4.9显示了该类指令的寻址方式。
表4.9 协处理器Load/Store指令寻址方式
格 式 |
说 明 |
|
1 |
[Rn>,#±offset_8>*4] |
立即数偏移寻址 |
2 |
[Rn>,#±offset_8>*4]! |
前索引立即数偏移寻址 |
3 |
[Rn>],#±offset_8>*4 |
后索引立即数偏移寻址 |
4 |
[Rn>], option> |
直接寻址 |
协处理器Load/Store指令的编码方式如图4.35所示。
编码格式中各标志位的含义如表4.10所示。
图4.35 协处理器Load/Store指令编码格式
表4.10 协处理器Load/Store指令编码格式各标志位含义
位 标 识 |
取 值 |
含 义 |
P |
P=0 |
标识使用偏移寻址还是前索引寻址(由W位决定) |
P=1 |
标识使用后索引寻址还是直接寻址(由W位决定) |
|
U |
U=0 |
从基地址中减去偏移量offset |
U=1 |
从基地址中加上偏移量offset |
|
N |
N=0 |
和具体使用的协处理器相关 |
N=1 |
||
W |
W=0 |
指令执行结束,不改变基址寄存器的值 |
W=1 |
访问的内存地址回写到基址寄存器 |
|
L |
L=0 |
Store指令 |
L=1 |
Load指令 |
1.[Rn>,#±offset_8>*4]
(1)编码格式
指令的编码格式如图4.36所示。
图4.36 协处理器Load/Store指令——立即数寻址
该寻址方式指定一片连续的内存地址空间。访问内存单元的第一个地址first_addressing>等于基址寄存器Rn>的值加上/减去指令中寄存器值的4倍。接下来的内存访问地址是前一个访问地址加4。当协处理器发出传输中止信号时,数据传送结束。
这种寻址方式的数据传输数目由协处理器决定。
注意 |
这种寻址方式最多允许传输16的字。 |
评论