数据传送指令之:多寄存器Load/Store内存访问指令
(3)指令操作的伪代码
指令操作伪代码如下面程序段所示。
If ConditionPass{cond} then
Address=start_address
For i=0 to 14
If register_list[i]==1 then
Ri=Memory[address,4]
Address=address+4
If register_list[15]==1 then
Value = Memory[address,4]
If(architecture version 5 or above) then
Pc= value AND 0xfffffffe
T bit=value[0]
Else
Pc= value AND 0xfffffffc
Address=address+4
Assert end_address=address+4
2.STM(1)指令
(1)指令编码格式
STM(1)指令将指令中寄存器列表中的各寄存器数值写入到连续的内存单元中。主要用于块数据的写入、数据栈操作以及进入子程序时保存相关寄存器的操作。
指令编码格式如图5.16所示。
图5.16 STM(1)指令编码格式
(2)指令的语法格式
STM{cond>}addressing_mode> Rn>{!}, registers>
① cond>
为指令编码中的条件域。它指示STM(1)指令在什么条件下执行。当cond>忽略时,指令为无条件执行(cond=AL(Alway))。
② address_mode>
指令的寻址方式。确定编码格式中的P、U和W位。
③ Rn>
确定寻址模式所使用的基址寄存器。
如果r15作为指令的基址寄存器,指令的执行结果不可预知。
④ !
设置指令编码格式中的W位。它使指令执行后将操作数的内存地址写入基址寄存器Rn>中;如果!被忽略,W位为0,指令执行完后,不修改基址寄存器的值。
⑤ registers>
被加载的寄存器列表。不同的寄存器之间用“,”隔开。完整的寄存器列表包含在“{}”中。编号低的寄存器对应于内存中低地址单元,编号高的寄存器对应于内存中高地址单元。
寄存器r0~r15分别对应于指令编码中bit[0]~bit[15]位。如果Ri存在于寄存器列表中,则相应的位等于1,否则为0。
(3)指令操作的伪代码
指令操作伪代码如下面程序段所示。
If ConditionPassed{cond} then
Address=Start_address
For i=0 to 15
If register_list[i]==1
Memory[address,4]=Ri
Address=address+4
Assert end_address==address-4
评论