EDA365电子工程师网

标题: Load/Store指令 [打印本页]

作者: ygcgsa    时间: 2016-10-19 15:04
标题: Load/Store指令
ARM处理器是Load/Store型的,即它对数据的操作是通过将数据从寄存器加载到片内寄存器中进行处理,处理完成后的结果是经过寄存器存回到存储器中,以加快对片外存储器进行数据处理的执行速度。ARM的数据存取指令Load/Store是惟一用于寄存器和存储器之间进行数据传送的指令。
在ARM系统中,输入/输出功能是通过存储器映射的可寻址外围寄存器和中断输入的组合来实现的。外围设备中有一些寄存器,在存储器映射系统中,这些寄存器映射为存储器的地址,对这些寄存器的操作可以对存储器的操作一样。处理器对于外设的操作,也是使用Load/Store指令通过类似存储器操作一样进行。
ARM指令集中有3种基本的数据存取指令:
单寄存器存取指令。单寄存器的存取指令提供ARM寄存器和存储器间最灵活的但数据项传送方式,传送的数据可以是8位字节、16位的半字或32位字。
多寄存器存取指令。虽然与单寄存器的存取指令相比,这些指令的灵活性要差一些,但它们可更有效地用于大批数据的传送。一般这些指令用于进程的进入和退出、保存和恢复工作寄存器以及拷贝寄存器中一块数据。
单寄存器交换指令。信号量是最早出现的用来解决进程同步与互斥问题的机制,包括一个称为信号量的变量及对它进行的两个原语操作。通过PV原语对信号量的操作可完成进程间的同步和互斥,对信号量的操作要求在一条指令中完成读取和修改。ARM提供了此指令完成信号量的操作。该指令用于寄存器和存储器中数据交换,在一个指令中有效地完成存取操作。
单寄存器存取指令
单寄存器存取指令时ARM在寄存器和存储器间传送单个字节和字的最灵活方式。只要寄存器已被初始化并指向接近所需的存储器地址的某处,这些指令就可提供有效的存储器存取机制。它支持几种寻址模式,包括立即数和寄存器偏移、自动变址和相对PC的寻址。
根据传送数据的类型不同,单寄存器存取指令可又分为单字和无符号字节的数据传送指令、半字和有符号字节的数据传送指令2种形式,这2种形式的数据传送指令构成完整的各种数据(字、有符号和无符号的半字、有符号和无符号的字节)传送。
(1)
单字和无符号字节的数据传送指令
LDR从内存中取32位字或8位无符号字节数据放入寄存器,STR将寄存器中的32位字或8位无符号字节数据保存到内存中。字节转送时用0将8位的操作数扩展到32位。
二进制编码
单字和无符号字节数据传送指令的二进制编码
说明
图中Rn是基址寄存器,Rd是源/目的寄存器,offset是无符号立即数或寄存器偏移量。P=1,表示使用前变址的寻址模式进行存取操作;P=0,表示使用后变址的寻址模式进行存取操作。U=1,表示基址寄存器加上偏移量;U=0,表示基址寄存器减去偏移量。B=1,表示传送的是无符号字节;B=0,表示从存储器中读取数据;L=0,表示要求重写,即自动变址;W=0,表示不要求回写。L=1,表示从存储器中读取数据;L=0,表示向寄存器中写入数据。
指令构造的地址是基址寄存器加上或减去一个无符号立即数或寄存器偏移量。基址或计算出的地址用于从存储器读取一个无符号字节或字,或者向存储器写入一个无符号字节或字。当一个字节读取到寄存器,需要用0将它扩展到32位。当一个字节存入到存储器,寄存器的低8位写到地址指向的位置。
前变址的寻址模式使用计算出的地址作为存储器的地址进行数据存取操作,然后当要求你回写时,将基址寄存器更新到计算出的地址值。
后变址的寻址模式时用未修改的基址寄存器来传送数据,然后将基址寄存器更新为计算出的地址,而不管W位如何(因为偏移除了作为基址寄存器的修改量之外已没有其他意义,但是如果希望基址寄存器的值不变化,可将偏移量设置为立即数0)。由于在这种情况下W位时不使用的,所以它有一个不运行在用户模式的仅在代码上相关的替换功能:设置W=1,使处理器以用户模式访问寄存器,这样使操作系统采用用户角度来看待存储器变换和保护方案。
作者: xuzwg    时间: 2016-10-20 14:14
感谢楼主分享!

作者: fish1352    时间: 2016-10-20 14:59
Get it for refer,THX!





欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2