前言
本文主要介绍ARM RISC 32位体系结构下的相关知识,主要理解寄存器和相关指令,要读懂汇编。
精简指令集RISC
reduced instruction set computer
- 精简指令集:保留最基本的,去掉复杂、使用频度不高的指令
- 复杂指令可通过对简单基本的指令组合而成
- 每条指令的长度都是相同的,大部分指令可以在一个机器周期里完成
- 采用多级指令流水线结构,处理器在同一时间内可执行多条指令
- 采用加载(Load)、存储(Store)结构,统一存储器访问方式,只允许Load和Store指令执行存储器操作,其余指令均对寄存器操作。
- 大大增加通用寄存器的数量,ALU只与寄存器文件直接连接。
- 采用高速缓存(cache)结构
RISC架构的ARM处理器的特点
低功耗、低成本、高性能
- 固定长度的指令格式,指令归整、简单、基 本寻址方式有2~3种;
- 使用单周期指令,便于流水线操作执行;
- 大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指
令的执行效率。
ARM处理器的工作模式
usr:ARM处理器正常的程序执行状态
sys:运行具有特权的操作系统任务
fiq:用于高速数据传输或通道处理
irq:用于通用的中断处理
svc:操作系统使用的保护模式
abt:用于虚拟存储及存储保护
und:当出现未定义指令终止时进入该模式
除了用户模式之外的其他6种处理器模式称为特权模式;
特权模式中,除系统模式外,其他5种模式又称为异常模式;
ARM处理器的指令长度及数据类型
ARM微处理器中支持字节(8位)、半字(16位)、字(32位)三种数据类型;
字需要4字节对齐(地址的低两位为0);
半字需要2字节对齐(地址的最低位为0);
单字节的没有这个问题;
寄存器
寄存器是CPU中的高速存储单元,CPU可以读写的最快的存储器,用来暂存指令、数据和地址。
-
ARM 处理器共有37个寄存器,被分为若干个组,这些寄存器包括:
- 31个通用寄存器,包括程序计数器(PC 指针),均为32位的寄存器;
- 6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位。
-
这些寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决微处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC、一个或两个状态寄存器都是可访问的。
-
通用寄存器:通用寄存器包括R0~R15,可以分为三类:
- 未分组寄存器R0~R7
在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途,因此,在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。 - 分组寄存器R8~R14
- 程序计数器PC(R15)
- 未分组寄存器R0~R7
-
堆栈指针R13
R13在ARM指令中常用作堆栈指针;
由于处理器的每种运行模式均有自己独立的物理寄存器R13,在初始化部分,都要初始化每种模式下的R13,这样,
当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复。扫描二维码关注公众号,回复: 16506905 查看本文章 -
链接寄存器LR,R14
Link Register,链接寄存器,存储着函数的返回地址
R14也称作子程序连接寄存器或连接寄存器LR。
当执行BL子程序调用指令时,可以从R14中得到R15(程序计数器PC)的备份。即保存调用跳转指令 bl 指令的下一条指令的内存地址.
在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值拷贝给R14,执行完子程序后,又将R14的值拷贝回PC,即可完成子程序的调用返回。 -
程序计数器PC(R15),Program Counter
ARM状态下,位[1:0]为0,位[31:2]用于保存PC;
保存当前执行的指令的地址。(由操作系统决定其值,不能改写)。
程序状态寄存器CPSR/SPSR
- CPSR (Current Program Status Register)和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义;而 CPSR 寄存器是按位起作用的,即,每一位都有专门的含义,记录特定的信息;SPSR (Saved Program Status Register),异常状态下使用;
- 寄存器R16用作CPSR(当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。
- 每一种异常模式下又都有一个专用的物理状态寄存器,称为SPSR(备份的程序状态寄存器),异常发生时,SPSR用于保存CPSR的值,从异常退出时则可由SPSR来恢复CPSR。
- CPSR 的 低8位(包括 I、F、T 和 M[4:0])称为控制位,程序无法修改,除非 CPU 运行于 特权模式 下,程序才能修改控制位。
程序状态寄存器格式如下:
标志位含义:
《ARM体系结构与编程》
ARM体系结构与编程