ARM体系结构之寄存器详解
原标题:ARM体系结构之寄存器详解
ARM寄存器
ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC、一个状态寄存器都是可访问的。
ARM状态下的通用寄存器与程序计数器
ARM状态下的程序寄存器
通用寄存器
R0~R15
R13_svc、R14_svc
R13_abt、R14_abt
R13_und、R14_und
R13_irq、R14_irq
R8_fiq~R14_fiq
复制代码
通用寄存器
1、不分组寄存器(R0-R7)
2、分组寄存器(R8-R14)
程序计数器R15(PC)
不分组通用寄存器
R0-R7是不分组寄存器。这意味着在所有处理器模式下,访问的都是同一个物理寄存器。不分组寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用未分组寄存器。
分组寄存器R8-R12
1、FIQ模式分组寄存器R8-R12
2、FIQ以外的分组寄存器R8-R12
分组寄存器R13、R14
1、寄存器R13通常做堆栈指针SP
2、寄存器R14用作子程序链接寄存器(Link Register-LR),也称为LR,指向函数的返回地址。
程序计数器
寄存器R15被用作程序计数器,也称为PC。其值等于当前正在执行的指令的地址+8(因为在取地址和执行之间多了一个译码的阶段)。
状态寄存器
CPSR
SPSR_svc
SPSR_abt
SPSR_und
SPSR_irq
SPSR_fiq
ARM所有工作模式下都可以访问程序状态寄存器CPSR。CPSR包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。
CPSR在每个异常模式下都有一个对应的物理寄存器——程序状态保存寄存器SPSR。当异常出现时,SPSR用于保存CPSR的值,以便异常返回后恢复异常发生时的工作状态。
寻址方式:所谓寻址方式就是处理器根据指令中给出的信息来找到指令所需操作数的方式。
1、立即数寻址
立即数寻址,是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即数寻址。例如以下指令:
ADD R0,R0,#0x3f;
复制代码
在以上两条指令中,第二个源操作数即为立即数,要求以“#”为前缀。
寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是一种执行效率较高的寻址方式。
ADD R0,R1,R2;
复制代码
该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。
寄存器间接寻址
寄存器间接寻址就是寄存器中的存放的是操作数在内存中的地址。例如以下指令:
LDR R0,[R2];
复制代码
在第一条指令中,以寄存器R2的值作为操作数的地址,在存储器中取得一个操作数后与R1相加,结果存入寄存器R0中。第二条指令将以R1的值为地址的存储器中的数据传送到R0中。
基址变址寻址
基址变址寻址就是将寄存器里的内容(基地址)与指令中给出的地址偏移量相加,从而得到操作数在内存中的地址:
LDR R0,[R1,#4];
复制代码
5、相对寻址
与基址变址寻址方式相类似,相对寻址Pc指针的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式:
BL NEXT ;跳转到子程序NEXT处执行
………
NEXT
……….
MOV PC ,LR ; 从子程序返回
责任编辑:David
【免责声明】
1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。
2、本文的引用仅供读者交流学习使用,不涉及商业目的。
3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。
4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。
拍明芯城拥有对此声明的最终解释权。