新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 数据传送指令之:多寄存器Load/Store内存访问指令

数据传送指令之:多寄存器Load/Store内存访问指令

作者:时间:2013-09-13来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/257079.htm

(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



评论


相关推荐

技术专区

关闭