ARM寄存器详解

  • 格式:docx
  • 大小:203.04 KB
  • 文档页数:4

下载文档原格式

  / 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ARM 处理器有二十七个寄存器,其中一些是在一定条件下使用的,所以一次只能使用十六个。

R0~R7:是通用寄存器并可以用做任何目的。

R8~R12:是通用寄存器,但是在切换到FIQ模式的时候,使用它们的影子(shadow)寄存器。R13:被称为栈指针寄存器,常用来保存栈指针。

R14:链接寄存器,常用来保存函数返回地址

R15:是程序指针PC

CPSR:(Current Program Status Register)当前程序状态寄存器,CPSR寄存期保存当前程序运行的状态。

0 0 0 0 0 User26 模式

0 0 0 0 1 FIQ26 模式

0 0 0 1 0 IRQ26 模式

0 0 0 1 1 SVC26 模式

1 0 0 0 0 User 模式

1 0 0 0 1 FIQ 模式

1 0 0 1 0 IRQ 模式

1 0 0 1 1 SVC 模式

1 0 1 1 1 ABT 模式

1 1 0 1 1 UND 模式

ARM寻址方式

1.立即数寻址

ARM 指令的立即数寻址是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指

在以上2 条指令中,第2个源操作数即为立即数,实际使用时以“#”符号为前缀。

2.寄存器寻址

寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采

用的一种方式,也是一种执行效率较高的寻址方式。如以下的指令。

3.寄存器间接寻址

寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器

中。例如以下指令。

在第 1 条指令中,以寄存器R2 的内容作为操作数的地址,然后与R1 相加,其结果存入

寄存器R0中。

第2条指令将以R1 的值为地址的存储器中的内容送到寄存器R0中。

4.基址变址寻址

基址变址的寻址方式就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给

出的地址偏移量相加,从而得到一个操作数的有效地址。如下面的几条指令所示。

在第1条指令中,将寄存器R1 的内容加上0x3A 形成操作数的有效地址,将该地址处的

操作数送到寄存器R0中。

在第2条指令中,将寄存器R1的内容加上0x0A形成操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增0x0A个字节。

5.多寄存器寻址

采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用

一条指令完成传送最多16 个通用寄存器的值。比如下面的指令。

该指令的后缀IA表示在每次执行完加载/存储操作后,R0 按字长度增加,因此,指令可

将连续存储单元的值传送到R1~R4。

6.相对寻址

与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的

地址标号作为偏移量,将两者相加之后得到操作数的有效地址。比如下面的程序段完成子程

序的调用和返回,跳转指令BL采用了相对寻址方式。

7.堆栈寻址

堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称

作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。

根据堆栈的生成方式,堆栈又可以分为递增堆栈(Ascending Stack)和递减堆栈

(Decending Stack),当堆栈由低地址向高地址生成时,称为递增堆栈;当堆栈由高地址向低

地址生成时,称为递减堆栈。这样就有4种类型的堆栈工作方式,ARM 微处理器支持以下4 种类型的堆栈工作方式。

(1)满递增堆栈:堆栈指针指向最后压入的数据,并且堆栈以递增方式向上生成。

(2)满递减堆栈:堆栈指针指向最后压入的数据,并且堆栈以递减方式向下生成。

(3)空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址

生成。

(4)空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址

生成。

分支跳转指令

B{条件} <地址>

B、BL是一个分支跳转指令,它是在R15寄存器的基础上跳转一个偏移地址,跳转范围是由汇编器计算得到,计算方法:它的值由汇编器来计算,它是24位有符号数,左移两位后有符号扩展为32位,表示的有效偏移为26位(+/-32M)。