• ARM学习记录1


    1. RISC和CISC

    CISC是复杂指令集,X86和X64使用的就是复杂指令集
    复杂指令集注重指令的功能性,指令的周期和指令的宽度不固定

    RISC是精简指令集,RISC是CISC中选取了一些比较常用的简单的指令作为精简指令集,ARM使用的就是精简指令集,但是随着架构的升级,指令也在扩充,现在的精简指令集也很大
    RISC的时钟周期和指令宽度是固定的

    2. Cortex-A核处理器工作模式

    cortex-a核的工作模式.png
    总结:不同的工作模式下执行的不同的代码,完成特定的功能。

    3. 寄存器

    寄存器.png

    注意

    在c语言中,我们不能一直使用register声明变量,因为寄存器的数量有限。

    寄存器是没有地址的,在ARM的汇编指令当中,每条指令的长度是固定的,以ARM-V7架构举例,它的汇编指令是32位的,地址的位数为32位,有的时候在一条指令当中使用到多个寄存器,若寄存器有地址,加上操作码和状态码等,远远超过了指令的长度。

    4. ARM-V7的寄存器组织

    寄存器分布.png

    寄存器2.png

    1. 每种工作模式下只能访问自己模式下对应的寄存器,不可以访问其他模式的寄存器。

      user和system模式最多可以访问17个寄存器;
      FIQ,IRQ,ABT,SVC,UND,MON模式最多可以访问18个寄存器;
      HYP模式最多可以访问19个寄存器

    2. 每个寄存器都是一个32位的寄存器,寄存器没有地址,访问寄存器通过编号进行访问,

      R0-R15,CPSR,SPSR。
      编译最终将这些编号编译生成4位的机器码。

      寄存器为什么不能使用地址进行访问:
      add r0, r0, r1===> 编译生成32位机器码,需要包含add,r0,r1的信息,因此寄存器是不能有地址的。(V7是32位架构)

    3. banked类型的寄存器属于私有的寄存器,
      非banked类型的寄存器属于公有的寄存器。

    4. 系统模式和用户模式共用一套寄存器组织

      如果此工作模式下没有对应的私有的寄存器则访问公有的寄存器。
      如果此工作模式下有对应的私有的寄存器,则访问私有的寄存器,不可以访问公有的寄存器。

    5. 特殊功能寄存器

    5.1 R13—>栈指针寄存器

    R13 ----> 别名:SP(the Stacked Pointer : 栈指针寄存器)
    作用:用于保存栈顶的地址。

    ARM-V7是满减栈:

    减栈:入栈的时候地址是减少的,出栈的时候地址是增加的
    满栈:栈指针指向栈顶元素

    5.2 R14—>链接寄存器

    R14---->别名:LR(the Linking Register:链接寄存器)
    作用:保存返回地址,主要用于程序返回。
    LR.png

    5.3 R15 —> 程序计数寄存器

    R15—>别名:PC (the Program counter:程序计数寄存器)
    作用:PC寄存器中保存的是取指指令的地址。
    PC.png

    5.4 CPSR—> 当前程序状态寄存器

    CPSR : Currented Program Statued Register:当前程序状态寄存器
    作用:存储的是当前的程序的运行的状态,条件标志{C}就是根据CPSR判断,汇编代码状态位{S}位加不加表示程序的执行结果影不影响状态标志位。
    cpsr.png

    N[31]位
    指令的执行结果为负数,N位被自动置1,否则清0.
    Z[30]位
    指令的执行结果为零,Z位被自动置1,否则清0
    C[29]位
    加法:产生进位(上溢),C位被自动置1,否则清0.
    减法:产生借位(下溢),C位被自动清0,否则置1.

    32位的处理器,进位:低32位向高32位进位;
    			借位:低32位向高32位借位。
    
    • 1
    • 2

    V[28]位
    符号位发生变化,V位被自动置1,否则清0.

    I[7]位:IRQ屏蔽位
    I = 0 : 不屏蔽IRQ
    I = 1 : 屏蔽IRQ
    F[6]位 : FIQ屏蔽位
    F = 0 : 不屏蔽FIQ
    F = 1 : 屏蔽FIQ
    T[5]位 : 状态位
    T = 0 : ARM状态,执行ARM指令集
    T = 1 : Thumb状态,执行Thumb指令集
    M[4:0]位:模式位
    10000 User mode;
    10001 FIQ mode;
    10011 SVC mode;
    10111 Abort mode;
    11011 Undfined mode;
    11111 System mode;
    10110 Monitor mode;
    10010 IRQ mode;
    11010 HYP mode;

    6. 指令流水线

    ARM7 ---> 3级流水线
    ARM9 ---> 5级流水线
    ARM11 ---> 7级流水线
    Cortex-A9 ---> 13级流水线
    Cortex-A53 ---> 8级流水线
    ARM处理器 引入流水线的目录就是为了提高指令的执行效率
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    取指器:根据PC寄存器中的值,完成取指令的操作
    译码器:翻译指令的功能,给大对应的执行器。
    执行器:执行指令并将执行的结果写回到寄存器。
    以上三个器件都是相互独立的器件,工作互补干扰,都属于单周期的器件。
    流水线.png
    8个时钟周期,执行完成了6条指令 :
    指令的周期 = 8 / 6 ≈ 1T
    以上指令的流水线是一个理想的指令流水线,异常或者跳转都会打断指令的流水线。

  • 相关阅读:
    Linux应急响应学习
    【AI视野·今日CV 计算机视觉论文速览 第265期】Wed, 11 Oct 2023
    【Python】数据类型 + 运算符 + 输入输出
    基于R语言piecewiseSEM结构方程模型在生态环境领域技术教程
    麦克风阵列入门
    融云超级群的「新能力」
    Visual Studio 2017工程在Visual Studio 2019打开碰到的问题
    《深入理解Spark RDD缓存机制》(第4天)
    (十五)Alian 的 Spring Cloud 自动生成项目
    浅尝Spring注解开发_Servlet3.0与SpringMVC
  • 原文地址:https://blog.csdn.net/qq_41555003/article/details/127561028