天天看点

ARM 芯片 相关概念 --- 工作模式、寄存器种类、寻址方式

ARM核演变图

ARM 芯片 相关概念 --- 工作模式、寄存器种类、寻址方式

芯片比较

ARM 芯片 相关概念 --- 工作模式、寄存器种类、寻址方式

ARM的工作模式

详见 ARM Architecture Reference Manual 手册,A2.2节。

ARM支持7种工作模式。

ARM 芯片 相关概念 --- 工作模式、寄存器种类、寻址方式

相应的缩写也要记住。

linux内核运行在ARM的svc模式下。

linux应用程序运行在ARM的usr模式下。

ARM的寄存器种类

详见 ARM Architecture Reference Manual 手册,A2.3节。

ARM 芯片 相关概念 --- 工作模式、寄存器种类、寻址方式

ARM微处理器共有37个**32位寄存器,其中**31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC、一个状态寄存器都是可访问的。

ARM 芯片 相关概念 --- 工作模式、寄存器种类、寻址方式
ARM 芯片 相关概念 --- 工作模式、寄存器种类、寻址方式

R0-R7是不分组寄存器。这意味着在所有处理器模式下,访问的都是同一个物理寄存器。不分组寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用未分组寄存器。

分组寄存器R8-R12:

可以分为 FIQ模式分组寄存器R8-R12,和 FIQ以外的分组寄存器R8-R12

分组寄存器R13、R14

1. 寄存器R13通常用做堆栈指针SP。

2. 寄存器R14用作子程序链接寄存器(LinkRegister-LR),也称为LR,指向函数的返回地址。

寄存器R15被用作程序计数器,也称为PC 。其值等于当前正在执行的指令的地址+8。

程序状态寄存器:

程序状态寄存器有两个:CPSR、SPSR。

ARM**所有工作模式**下都可以访问程序状态寄存器CPSR。CPSR包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息。

CPSR在每种异常模式下都有一个对应的物理寄存器——程序状态保存寄存器SPSR。当异常出现时,SPSR用于保存中断之前的CPSR的值,以便异常返回后恢复异常发生时的工作状态。

只有在 Exception 异常中断模式下,两种程序状态寄存器才会同时都用。

ARM 芯片 相关概念 --- 工作模式、寄存器种类、寻址方式
ARM 芯片 相关概念 --- 工作模式、寄存器种类、寻址方式
ARM 芯片 相关概念 --- 工作模式、寄存器种类、寻址方式
ARM 芯片 相关概念 --- 工作模式、寄存器种类、寻址方式

ARM寻址方式

所谓寻址方式就是处理器根据指令中给出的信息来找到指令所需操作数的方式。

1、立即数寻址:

立即数寻址,是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即数寻址。

例如以下指令:

ADD R0,R0,#0x3f ;R0←R0+0x3f

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

2、寄存器寻址

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

ADD R0,R1,R2 ;R0←R1+R2

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

3、寄存器间接寻址

寄存器间接寻址就是寄存器中的存放的是操作数在内存中的地址。

例如以下指令:

LDR R0, [R2] ;R0← [R2]

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

4、基址变址寻址

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

例如以下指令:

LDR R0, [R1, #4] ;R0 ← [R1 + 4]

5、相对寻址

与基址变址寻址方式相类似,相对寻址PC指针的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。

例如,以下程序段完成子程序的调用和返回,采用跳转指令BL采用了相对寻址方式:

ARM 芯片 相关概念 --- 工作模式、寄存器种类、寻址方式