数据传送指令之:多寄存器Load/Store内存访问指令
5.4.2 用户模式多寄存器内存字数据传送指令
1.LDM(2)指令
(1)指令编码格式
LDM(2)指令将数据从连续的内存单元中读取到指令中指定的寄存器列表中的各寄存器中。
注意 | 与LDM(1)指令不同,PC不能包含在寄存器列表中。 |
指令的编码格式如图5.17所示。
图5.17 LDM(2)指令编码格式
(2)指令的语法格式
LDM{cond>}addressing_mode> Rn>, registers_without_pc>ˆˆ
① cond>
为指令编码中的条件域。它指示LDM(2)指令在什么条件下执行。当cond>忽略时,指令为无条件执行(cond=AL(Alway))。
② address_mode>
指令的寻址方式。确定编码格式中的P位和U位。此指令中W位指定为0。
③ Rn>
确定寻址模式所使用的基址寄存器。
如果r15作为指令的基址寄存器,指令的执行结果不可预知。
④ registers_without_pc>ˆ
被加载的寄存器列表。不同的寄存器之间用“,”隔开。完整的寄存器列表包含在“{}”中。此寄存器列表中不能包含PC寄存器。
如果PC包含在寄存器列表中,指令的执行结果不可预知。
其他细节可参考LDM(1)指令。
(3)指令操作的伪代码
指令操作伪代码如下面程序段所示。
If ConditionPassed{cond} then
Address=start_address
For i=0 to 14
If register_list[i]==1
Ri_usr=Memory[address,4]
Address=address+4
Assert end_address == address-4
2.STM(2)指令
(1)指令编码格式
STM(2)指令将指令中寄存器列表中的各寄存器数值写入到连续的内存单元中。主要用于块数据的写入、数据栈操作以及进入子程序时保存相关寄存器等操作。
指令编码格式如图5.18所示。
图5.18 STM(2)指令编码格式
(2)指令的语法格式
STM{cond>}addressing_mode> Rn>, registers >ˆ
① cond>
为指令编码中的条件域。它指示LDM(2)指令在什么条件下执行。当cond>忽略时,指令为无条件执行(cond=AL(Alway))。
② address_mode>
指令的寻址方式。确定编码格式中的P位和U位。此指令中W位指定为0。
③ Rn>
确定寻址模式所使用的基址寄存器。
如果r15作为指令的基址寄存器,指令的执行结果不可预知。
④ registers >ˆ
寄存器列表。只能使用用户模式下的寄存器。
(3)指令操作的伪代码
指令操作伪代码如下面程序段所示。
If ConditionPassed{cond} then
Address=start_address
For i=0 to 15
If register_list[i] == 1
Memory[address,4]=Ri_usr
Address = address +4
Assert end_address == address-4
评论