首页 理论教育 嵌入式系统应用中的块拷贝寻址方法

嵌入式系统应用中的块拷贝寻址方法

时间:2023-11-23 理论教育 版权反馈
【摘要】:块拷贝寻址是多寄存器传送指令LDM/STM 的寻址方式。表3.3LDM/STM 指令的堆栈和块拷贝对照从表中可以看出,指令分为两组:一组用于数据的存储与读取,对应于IA、IB、DA、DB;另一组用于堆栈操作,即进行入栈与出栈操作,对应于FD、ED、FA、EA。例题:已知内存中的数据如图3.1 所示,且堆栈指针最初指在0X12345684 的位置,问:图3.1内存中的数据分别执行完指令LDMIA R13!,{R0 - R1,R3}后,寄存器R0、R1 和R3 中的内容分别为0X26262626、0X59595959 和0X00008888。

嵌入式系统应用中的块拷贝寻址方法

块拷贝寻址是多寄存器传送指令LDM/STM 的寻址方式。 LDM/STM 指令可以将存储器中的一个数据块加载到多个寄存器中,也可以将多个寄存器中的内容保存到存储器中。 寻址操作中的寄存器可以是R0 ~R15 这16 个寄存器的子集或是所有寄存器。

根据基地址的增长方向是向上还是向下,以及地址的增减与指令操作的先后顺序(即操作先进行还是地址的增减先进行)的关系,可以有四种寻址方式。

①IA(Increment After):操作完成后地址递增。

②IB(Increment Before):地址先增而后完成操作。

③DA(Decrement After):操作完成后地址递减。

④DB(Decrement Before):地址先减而后完成操作。

块拷贝寻址举例如下:

块拷贝寻址除了可以完成存储器中的一个数据块和多个寄存器之间数据的传送,还可以完成堆栈操作,LDM/STM 指令的堆栈和块拷贝对照见表3.3。

表3.3 LDM/STM 指令的堆栈和块拷贝对照

(www.xing528.com)

从表中可以看出,指令分为两组:一组用于数据的存储与读取,对应于IA、IB、DA、DB;另一组用于堆栈操作,即进行入栈与出栈操作,对应于FD、ED、FA、EA。 两组中对应的指令的含义是相同的。 例如,指令LDMFA 与指令LDMDA 含义相同,只是LDMFA 针对堆栈进行操作。对堆栈进行操作时,必须先对堆栈进行初始化

例题:已知内存中的数据如图3.1 所示(其中内存中存储的是十六进制数),且堆栈指针最初指在0X12345684 的位置,问:

图3.1 内存中的数据

分别执行完指令LDMIA R13!,{R0 - R1,R3},LDMIB R13!,{R0 - R1,R3},LDMDA R13!,{R0 -R1,R3}和LDMDB R13!,{R0 -R1,R3}后,寄存器R0、R1 和R3 中的内容分别为多少?

答:执行完指令LDMIA R13!,{R0 -R1,R3}后,寄存器R0、R1 和R3 中的内容分别为0X66663333、0X54693645 和0X15548545。

执行完指令LDMIB R13!,{R0 - R1,R3}后,寄存器R0、R1 和R3 中的内容分别为0X54693645、0X15548545 和0X14543862。

执行完指令LDMDA R13!,{R0 - R1,R3}后,寄存器R0、R1 和R3 中的内容分别为0X59595959、0X00008888 和0X66663333。

执行完指令LDMDB R13!,{R0 - R1,R3}后,寄存器R0、R1 和R3 中的内容分别为0X26262626、0X59595959 和0X00008888。

通过上述例题可以看出,每条指令如何将存储器中的连续三个字数据加载到三个寄存器中,以及在使用自动变址的情况下基址寄存器是如何改变的。 需要注意的是,在递增方式下(IA、IB 方式),寄存器存储的顺序是R0、R1、R3;而在递减方式下(DA、DB 方式),寄存器存储的顺序是R3、R1、R0。 在这里有一个约定:编号低的寄存器在存储数据或者是加载数据时对应于存储器的低地址;也就是说,编号最低的寄存器保存到存储器的最低地址或从最低地址取数;其次是其他寄存器按照寄存器编号的次序保存到第一个地址后面的相邻地址或从中取数。

多寄存器的存取指令为保存和恢复处理器状态以及在存储器中移动数据块提供了一种很有效的方式。 它节省代码空间,使操作的速度比顺序执行等效的单寄存器存取指令快达4倍(因改善后续行为而提高两倍,因减少指令数提高将近两倍)。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈