[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
  • 2
  • 3
  • 4
  • 5
  • 6

通用寄存器 
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包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。

扫描二维码关注公众号,回复: 5312318 查看本文章

CPSR在每个异常模式下都有一个对应的物理寄存器——程序状态保存寄存器SPSR。当异常出现时,SPSR用于保存CPSR的值,以便异常返回后恢复异常发生时的工作状态。 
这里写图片描述 
这里写图片描述

寻址方式:所谓寻址方式就是处理器根据指令中给出的信息来找到指令所需操作数的方式。 
1、立即数寻址 
立即数寻址,是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即数寻址。例如以下指令:

ADD R0,R0,#0x3f;
  • 1

在以上两条指令中,第二个源操作数即为立即数,要求以“#”为前缀。

寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是一种执行效率较高的寻址方式。

ADD R0R1R2
  • 1

该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。

寄存器间接寻址 
寄存器间接寻址就是寄存器中的存放的是操作数在内存中的地址。例如以下指令:

LDR R0,[R2];
  • 1

在第一条指令中,以寄存器R2的值作为操作数的地址,在存储器中取得一个操作数后与R1相加,结果存入寄存器R0中。第二条指令将以R1的值为地址的存储器中的数据传送到R0中。

基址变址寻址 
基址变址寻址就是将寄存器里的内容(基地址)与指令中给出的地址偏移量相加,从而得到操作数在内存中的地址:

LDR R0,[R1,#4];
  • 1

5、相对寻址 
与基址变址寻址方式相类似,相对寻址PC指针的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式: 
BL NEXT ;跳转到子程序NEXT处执行 
……… 
NEXT 
………. 
MOV PC ,LR ; 从子程序返回

猜你喜欢

转载自blog.csdn.net/ly930156123/article/details/79220346