ARM汇编语言(1)(基本概念)

时间:2022-04-10 01:13:55

1、***.s文件为汇编语言文件格式;

2、ARM寄存器(以Samsung芯片为例)

2.1、要介绍arm寄存器之前我们要先了解一下arm处理器的工作模式:

Arm处理器有七种工作模式,为的是形成不同的使用级别,以防造成对系统的破坏。

注意:

不同模式可以访问的寄存器不同,可以运行的指令不同。

usr:普通模式,其他六种:特权模式,而除了usr和sys模式以外的五种模式是异常模式。

1)usr10000):普通应用程序运行的模式(应用程序)

2)FIQ(10001):快速中断模式,以处理快速情况,高速数据传输

3)IRQ(10010):外部中断模式,普通中断处理

4)svc(10011):管理模式保护模式),操作系统使用的特权模式(内核)

5)abt(10111):数据访问中止模式,用于虚拟存储和存储保护

6)und(11011):未定义指令终止模式,用于支持通过软件仿真硬件的协处理器

7)sys(11111):系统模式,用于运行特权级的操作系统任务(armv4以上版本才具有)

--------------------------------------------------------------------

2.2、Arm处理器总共有37个寄存器其可以分为以下两类:

1.        通用寄存器(31个)

1.        不分组寄存器(R0—R78

2.        分组寄存器(R8—R1422,这里没有算CotextA9增加的监控模式中的寄存器

3.        PC指针(R151

2.        状态寄存器(6同样没算CotextA9增加的监控模式中的寄存器

1.        CPSR1个)

2.        SPSR5个)

 ARM汇编语言(1)(基本概念)ARM汇编语言(1)(基本概念)ARM汇编语言(1)(基本概念)ARM汇编语言(1)(基本概念)

 

 

                                                            

--------------------------------------------------------------------

2.3、下面结合上图和上面列出的大框架对寄存器进行解析

1.        不分组寄存器(R0—R7

在所有的运行模式下都使用同一个物理寄存器,它们未被系统用作特殊的用途

2.  分组寄存器(R8—R14

a) 对于R8~R12当使用FIQ(快速中断模式)时访问寄存器R8_fiq~R12_fiq,当使用除FIQ模式以外的其他模式时,访问寄存器R8~R12(同一个物理寄存器)

b)  对于R13,R14来说,每个寄存器对应6个不同的物理寄存器,其中一个是用户模式与系统模式共用(图中的R13R14),

另外5个物理寄存器对应其他5种不同的运行模式,并采用以下记号来区分不同的物理寄存器分别为fiq,irq,svc,abt,und.(如上图)

        i.R13ARM指令中常用作堆栈指针--“SPstack pointer”,特别注意:由于每一种模式都有自己的R13,所以我们在自己初始化的时候一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间。

         ii. R14称为子程序链接寄存器--“LR(Link Register)”。有两个特殊功能,一种是每一种模式下都可以用于保存函数的返回地址,另外就是异常处理后的返回地址,如中断。

3. PC指针(R15

R15用作程序计数器--PC对应一个物理寄存器,由于ARM体系结构采用了多级流水线技术

对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,PC的值为当前指令的地址值加8个字节程序状态寄存器

  1. CPSR

    ARM汇编语言(1)(基本概念)

CPSR:当前程序状态寄存器(current program status register),在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。

在官方文档中我们可以找到

 

下面介绍其中几个比较重要的位,其他位,大家可以参考官方手册:

N: 当两个表示的有符号整数运算时,0表示结果为正或零或默认,1表示运算结果为负数

Z一般情况下,0表示运算的结果或默认,1表示运算的结果为零,对于CMP指令,1表示进行比较的两个数大小相等。

C下面分四种情况讨论C的设置方法:

a)        加法运算(包括比较指令CMN):当运算产生了进位时(无符号数溢出),C=1,否则C=0

b)        减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1

c)        对于包含移位操作的非加/减运算指令,C为移出值的最后一位。

d)       对于其他的非加/减运算指令,C的值通常不改变。

V:下面分两种情况讨论V的设置方法

a)        对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出

b)        对于其他的非加/减运算指令,C的值通常不改变。

I表示禁止外部(硬件)中断(IRQ
F表示禁止快速中断(FIQ
T1表示为thumb状态,0arm状态

M[4:0]用来设置处理器的工作模式具体数据见本文开始的介绍。

  1. SPSR

SPSR:程序状态保存寄存器(saved program status register),每一种处理器模式下都有一个状态寄存器SPSR,SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。

当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用SPSR来恢复CPSR。由于用户模式/系统模式不是异常中断模式,所以他没有SPSR。

当用户在用户模式/系统模式访问SPSR,将产生不可预知的后果。每一中异常运行模式(除usrsys)有各自的物理寄存器。