Cortex-A架构基础

Cortex-A架构基础

一、处理器运行模型

模式描述
User(USR)用模式,非特权模式,大部分程序运行的时候就处于此模式。
FIQ快速中断模式,进入FIQ中断异常。
IRQ一般中断模式。
Supervisor(SVC)超级管理员模式,特权模式,供操作系统使用。
Monitor(MON)用于安全扩展模式。
Abort(ABT)数据访问终止模式,用于虚拟存储以及存储保护。
Hyp(HYP)用于虚拟化扩展。
Undef(UND)未定义指令终止模式。
System(SYS)系统模式,用于运行特权级的操作系统任务
  • 除了 User(USR)用户模式以外,其它 8种运行模式都是特权模式。这几个运行模式可以通过软件进行任意切换,也可以通过中断或者异常来进行切换。
  • 用户模式通过异常来完成模式切换。
  • 没种模式都有一组寄存器,为了保证用户模式下的寄存器不会被破坏。

二、寄存器组

Cortex-A寄存器:
在这里插入图片描述

  • 每种模式可见的寄存器包括15个通用寄存器(R0~R14)、一两个程序状态寄存器和一个程序计数器PC。
    九种模式对应的寄存器:
    在这里插入图片描述
  • 淡蓝色背景的为模式独有的寄存器,其余与User模式共有。
  • Cortex-A内核寄存器的组成:
    ① 34个通用寄存器,包括R15程序计数器(PC),这些寄存器都是32位的。
    ② 8个状态寄存器,包括程序状态寄存器(CPSR)和程序状态保存寄存器(SPSR)。
    ③ Hyp模式下独有一个ELR_Hyp寄存器。

2.1 通用寄存器

2.1.1 未备份寄存器(R0~R7)
  • 在不同的处理器模式下这8个寄存器是共用的,不同模式下数据会被破坏。
2.1.2 备份寄存器(R8~R14)
  • 在FIQ模式下对应Rx_irq(x=8-12)物理寄存器,其他模式对应Rx(8-12)物理寄存器。
  • R13 User和Sys共用,其余7个模式独有。R13为SP,作为栈指针,应用程序会初始化R13,使其指向专用的栈地址,即初始化SP指针。
  • 备份寄存器R14,User、Sys和Hyp共用,其他的6种模式独有。R14为连接寄存器(LR):
    a. LR存放当前子程序的返回地址,如果使用BL或者BLX调用子函数,LR被设置成该子函数的返回地址,将R14(LR)中的值赋给R15(PC)即可完成子函数返回。如:
    MOV PC, LR @寄存器 LR中的值赋值给 PC,实现跳转
    或者可以在子函数的入口出将 LR入栈:
    PUSH {LR} @将 LR寄存器压栈
    在子函数的最后面出栈即可:
    POP {PC} @将上面压栈的 LR寄存器数据出栈给 PC寄存器 ,严格意义上来讲应该是将
    @LR-4赋给 PC,因为 3级流水线,这里只是演示代码。
    
    跳转B、带链接跳转BL、跳转并切换指令集BX、带链接跳转并切换指令集BLX 、跳转并转换到 Jazelle 状态 BXJ
    b. 当异常模式发生以后,该异常模式对应的R14寄存器被设置成该异常模式将要返回的地址,R14也可以当做普通的寄存器使用。
2.1.3 程序计数器PC(R15)

  程序计数器R15也叫做PC,R15保存着当前指令地址加8个字节,这是因为ARM的流水线机制导致的。ARM处理器3级流水线取指->译码->执行,这三级流水线循环执行,比如当前正在执行第一条指令的同时也会对第二条指令进行译码,第三条指令也同时被取出存档在R15(PC)中。
  32位的ARM处理器,每条指令4字节,因此需要加上2个指令的值:
R15(PC)值 = 当前执行的程序位置 + 8个字节

2.2 程序状态寄存器

  • 所有的模式共用一个CPSR物理寄存器。
  • CPSR是当前程序状态寄存器,该寄存器包含了条件标志位中断禁止位当前处理器模式标志等一些状态位以及一些控制位。
  • 为了防止所有模式共用CPSR冲突,除了User和Sys以外,其余的7个模式都配备了一个专用的备份程序状态寄存器(SPSR),当特定的异常中断发生时,SPSR寄存器用来保存当前程序状态寄存器CPSR的值,当异常退出后用SPSR中的值恢复CPSR。
  • 不在User和Sys访问SPSR,SPSR和CPSR寄存器结构相同:
    在这里插入图片描述
    N(bit31): 当两个补码表示的 有符号整数运算的时候,N=1 表示运算对的结果为负数,N=0
    表示结果为正数。
    Z(bit30): Z=1 表示运算结果为零,Z=0 表示运算结果不为零,对于CMP 指令,Z=1 表示
    进行比较的两个数大小相等。
    C(bit29): 在加法指令中,当结果产生了进位,则C=1,表示无符号数运算发生上溢,其它
    情况下C=0。在减法指令中,当运算中发生借位,则C=0,表示无符号数运算发生下溢,其它
    情况下C=1。对于包含移位操作的非加/减法运算指令,C 中包含最后一次溢出的位的数值,对
    于其它非加/减运算指令,C 位的值通常不受影响。
    V(bit28): 对于加/减法运算指令,当操作数和运算结果表示为二进制的补码表示的带符号
    数时,V=1 表示符号位溢出,通常其他位不影响V 位。
    Q(bit27): 仅ARM v5TE_J 架构支持,表示饱和状态,Q=1 表示累积饱和,Q=0 表示累积
    不饱和。
    IT[1:0](bit26:25): 和IT[7:2](bit15:bit10)一起组成IT[7:0],作为IF-THEN 指令执行状态。
    J(bit24): 仅ARM_v5TE-J 架构支持,J=1 表示处于Jazelle 状态,此位通常和T(bit5)位一起表示当前所使用的指令集。
    JT描述
    00ARM
    01Thumb
    11ThumbEE
    10Jazelle
    GE[3:0](bit19:16): SIMD指令有效,大于或等于。
    IT[7:2](bit15:10): 参考 IT[1:0]。
    E(bit9): 大小端控制位, E=1表示大端模式, E=0表示小端模式。
    A(bit8): 禁止异步中断位, A=1表示禁止异步中断。
    I(bit7): I=1禁止IRQ,I=0使能 IRQ。
    F(bit6): F=1禁止FIQ ,F=0使能FIQ。
    T(bit5): 控制指令执行状态,表明本指令是 ARM指令还是 Thumb指令,通常和 J(bit24)一起表明指令类型,参考 J(bit24)位。
    M[4:0](bit4:0): 处理器模式控制位: 在这里插入图片描述
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值