深入理解bootloader_3----- ARM体系结构
  HvTJUzsxOBtS 2023年11月25日 17 0


深入理解bootloader_3—– ARM体系结构

1、ARM 简介

ARM 是一款RISC 处理器,因此他集成了一下典型的RISC架构的特性。
1)、数量很多的通用寄存器。
2)、使用load/store的体系结构操作寄存器的数据,而不是直接操作内存中的数据。
3)、简单的寻址模式,所有的load/store地址都由寄存器内容和指令格式决定。
4)、采用统一的固定的指令格式来简化指令的代码。
5)、在绝大多数数据处理指令中包含算数逻辑和移位逻辑,最大化的有效利用ALU和移位寄存器。
6)、使用自增或自减的地址模式来优化程序循环处理。
7)、load/store 指令都可以条件执行,从而提高指令的执行效率。
8)、几乎所有的指令都可以条件执行,从而提高执行效率。

2、处理器的模式

ARM处理器支持表1中的7种处理器模式:

深入理解bootloader_3----- ARM体系结构_通用寄存器

通过软件操作及外部的中断或一场处理可以切换模式。
大多数应用程序在用户模式下执行。当处理器处于用户模式时,正在执行的程序不能访问保护的系统资源和切换模式,除非有异常产生。操作系统正式利用这个特性来控制系统资源使用的。
除用户模式其他的模式都是特权模式。他们可以完全访问资源和自由切换模式,其中的5种又称为异常模式:
1)FIQ
2)IRQ
3)Supervisor
4)Abort
5)Underfined
当发生特定的异常时,机器就会进入相应的模式中。每一个模式都有额外的寄存器使其不影响原先的用户模式状态。
最后一种模式是系统模式,他不是由异常进入的,而是与用户模式有完全的一样的寄存器。但他还是一种特权模式,并没有用户模式的限制。这种模式在操作系统任务需要访问系统资源,但是不希望使用其他一场模式的而外寄存器时使用。

3、异常

ARM 定义了7种异常类型,每种类型都有齐特权处理模式,这7种异常类型是:

1)重启异常

2)未定义指令异常

3)软中断异常

4)预取中止异常

5)数据中止异常

6)中断异常

7)快速中断异常

由内部源或外部源产生的异常引起的处理器处理一个事件,比如外部产生的中断或者试图执行一个未定义的指令。处理异常之前的处理器模式通常会保存,这样当异常处理完成后就会恢复原先的程序。同一时间可以出现多个异常。

ARM 体系结构支持7种异常,表2列出了异常类型和对应的处理器的模式,当异常发生时,程序强制跳转到异常对应的地址。这些固定的地址称为异常向量。

深入理解bootloader_3----- ARM体系结构_arm_02

当异常发生时,一些寄存器就由一场模式下的相应寄存器取代。所有异常模式都有替代的寄存器R13和R14。快速中断模式还有用于快速中断处理的额外的寄存器。
当进入异常处理的程序时,R14保存异常处理的返回值。
R13为每种异常处理保存私有的栈指针,快速中断模式还有自己的R8~R12可用,所以中断处理程序无须备份这些寄存器。
第六种特权处理模式—–系统模式也是使用用户模式的寄存器。它用于运行需要访问存储系统和协助处理器权限的任务。

4、ARM 寄存器

ARM 处理器共有37 个寄存器:
1)31个通用寄存器:包括一个程序计数器在内。这些寄存器是32位大小的。
2)6个状态寄存器:这些寄存器同样是32位大小的,但是只有32位中的部分会分配或者需要执行。
所有的寄存器编排为有部分重叠的分组,由当前的处理器模式决定使用那个分组。在任何时候,15个通用寄存器(R0~R14),一个或两个状态寄存器和程序计数器是可见的。图3
所示的 是每一列显示指定处理器模式下的那些通用寄存器和状态寄存器是可见的。

深入理解bootloader_3----- ARM体系结构_arm_03

5、通用寄存器

通用寄存器R0~R15可以分为如下三组:
1)为分组的寄存器:R0~R7
2)分组的寄存器:R8~R14
3)R15:PC

6、为分组的寄存器:R0~R7

寄存器R0~R7是未分组寄存器。它们中的每个在所有的处理模式下都是相同的32 位物理寄存器。他们是完全的通用寄存器,没有被处理器架构定义的特殊用途。

7、分组的寄存器:R8~R14

寄存器R8 ~R14 是分组寄存器。他们中的每一个代表的物理寄存器依赖于当前的处理器模式。当使用一个通用寄存器时,几乎所有的指令都可以使用这些分组寄存器。
寄存器 R8~R12中的每一个都是两个物理寄存器:一组用于FIQ模式,另一组用于其他处理器模式。第一组可以用R8_fiq-R12_fiq表示。另一组用R8_usr-R12_usr表示。
寄存器R8~R12在体系中没有任何制定的特殊目的。然而,在简单的中断处理中需要使用r8~R14
,FIQ模式下的寄存器允许更快速的中断处理。
寄存器R13和R14都有6个分组物理寄存器,其中一个用于在user和system模式下,允许5个用在5种异常模式下。当需要区分时,也可以使用如下格式命名:
R13_
R14_
其中mode是:usr、svc、abt、und、irq、fiq。
寄存器R13通常用作栈指针。简写为SP。每一种异常模式都有自己的分组寄存器R13。
寄存器R14(链接寄存器或者LR)在体系结构中有两种用途:
1)在各种模式下,R14用来保存子程序返回地址,当一条BL或BLX指令执行子程序调用时,R14设为子程序的返回地址。通过复制R14中的地址值到PC中,来实现子程序的返回。
2)当发生异常时,相关异常模式下的R14就设为异常返回地址。异常的返回和子程序的返回类似,使用指令回复异常发生前的程序状态。
在其他情况下寄存器R14可以当作通用寄存器使用。

8、寄存器R15:程序计数器

R15是程序计数器(PC),其内容是处理器要取的下一条指令的地址。在ARM状态,所有的ARM指令都是4字节长,一直都是字对齐的。这意味着PC的最低两位一直都是0,因此PC只包含30位可变的位。ARM体系中的一些版本支持其它两种处理器状态。T 变种支持Thumb状态,J 变种支持Jazelle状态。这些状态下PC可以是半字节和字节对对齐的。

9、程序状态寄存器

当前程序寄存器(CPSR)在所有处理器模式下都是可以访问的,它包括条件标志位、中断禁止位、当前处理器模式控制以及其他状态和控制位。每种异常模式都有一个程序状态寄存器(SPSR),当异常发生时用于保存CPSR的值。
注意:User模式和System模式都不是一场模式,在User模式和System模式下读写SPSR都会引起不可预料的结果。
CPSR和SPSRs的格式如图4所示:

深入理解bootloader_3----- ARM体系结构_寄存器_04

10、PSR位的类型

按照更新方式PSR位可以分为四类:
预留位: 为将来的扩展预留
用户可写位: 在任意模式下可写。N、Z、C、V、Q、GE[3:0]和E位都是用于可写的。
特权位: 在特权状态下可写。用户模式下写特权没有效果。A、I、F和M[4:0]都是特权位。
执行状态位: 在特权模式下可写。用户模式下写执行状态位没有效果。J和T位都是执行状态位,在ARM状态下一直为0.

11、条件标志位

条件标志位
N、Z、C、V位称为条件标志位。几乎所有的指令都会测试CPSR中的条件标志位来决定是否执行指令。
条件标志位由以下两种方式修改:
1)执行比较指令(CMN、CMP、TEQ、TST)
2)执行一些其他的算数、逻辑或移动指令、并且他们的目的寄存器不是R15。
不管哪种情况,新的标志位含义如下:
N 设为指令结果的第31位,如果结果当做二进制补码表示的有符号整形,N=1 表示结果是负的; N=0 表示结果是非负的。
Z 指令结果是0的情况下设为1,反之设为0.
C 由如下四种方式设置:
1)对于加法,包括比较指令CMN,如果加法运算产生无符号溢出,C设为1,反之设为0.
2)对于减法,包括比较指令CMP,如果减法产生一个错位,C设为0,反之设为1.
3)对于包含移位操作的非加减运算,C设为移位器移出的最后一位。
4)对于其他的非加减运算,C通常保持不变。
V 由如下两种方式设置:
1)在两个二进制补码的有符号的加法和减法指令运算,如果发生符号溢出,V设为1.
2)对于非加法和减法运算,V通常是不变的。

这些标志位还可以通过如下方式修改:
1)执行MSR指令,向CPSR或SOSR中写入新值。
2)执行目的寄存器是R15的MRC指令。该指令的目的是将协处理器产生的条件标志位传到ARM处理器中。
3)执行LDM指令的某些变种指令。这些变种指令会复制SPSR的值到CPSR中。他们主要用于异常返回。
4)在特权模式下执行RFE指令可以从内存中向CPSR中加载新值。
5)执行目的寄存器是R15的算数逻辑指令的设置标志位的 变种指令。他们也可以复制SPSR的值到CPSR中,用于异常返回。

12、中断禁止位

A、I、F都是中断禁止位:
A 位 只在ARM v6以及以上版本使用。
I 位 设置后禁止IRQ中断
F位 设置后禁止FIQ中断

13、模式位

M[4:0]是模式位。他们决定了处理器运行的模式。见表5:

深入理解bootloader_3----- ARM体系结构_子程序_05

不是模式位的所有组合都定义一个有效的处理器模式,只有上面这些组合才可以使用。如果向M[4:0]中写入其他的值,结果是不可预料的。

文献参考:

抄录自 《深入理解BoorLoader》 胡尔佳 编著 (学习笔记仅作学习,交流,详细阅读请购买正版)


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月25日 0

暂无评论

推荐阅读
HvTJUzsxOBtS