LOADING

加载过慢请开启缓存 浏览器默认开启

ARM学习笔记

2024/4/15 MCU

前因后果

上学期教授我微机原理一课的老师,这学期在其他专业讲嵌入式课程,舍友非常喜欢那位老师,可能是害羞也可能是为壮士气于是拉我入伙去旁听 .

ARM的基础知识

ARM的处理器模式

ARM Cortex-A/ARMv7-A系列中有9种Mode,其中实现了安全扩展的处理器才有MON模式.

模式 编码 功能
USR(User) 10000 大多数程序运行时的非特权模式
FIQ 10001 进入FIQ中断异常
IRQ 10010 进入IRQ中断异常
SVC/SWI(Supervisor) 10011 管理调用指令被执行或者reset,软中断
MON(Monitor) 10110 安全扩展模式
ABT(Abort) 10111 存储访问异常
HYP 11010 虚拟化扩展
UND(Undef) 11011 未定义的指令执行
SYS(System) 11111 特权模式,与用户模式共享寄存器

ARM寄存器组

  • R1-R1232bit通用寄存器,并被FIQ以外的模式共享 .
  • R13(SP)栈指针、R14(LR)链接寄存器、R15(PC)程序计数器 .
  • APSR/CPSR应用/当前程序状态寄存器 .
  • SPSR已存储..,相当于CPSR切换模式时的备份 .
  • Thumb指令只能访问R0-R7 .

CPSR的格式

31 : 27 26 : 25 24 23 : 20 19 : 16 15 : 10 9 8 7 6 5 4 : 0
N Z C V Q IT[1:0] J Reserved GE[3:0] IT[7:2] E A I F T M[4:0]
  • N - ALU负数
  • Z - ..零位
  • C - ..进位
  • V - ..溢出
  • Q - DSP运算指令溢出
  • J - 使用Jazelle指令集,用于Java加速
  • GE[3:0] - SIMD指令
  • IT[7:2] - Thumb指令集中if-then条件执行
  • E - 1大端模式0小端..
  • A - 禁用ABT
  • I - 禁用IRQ
  • F - 禁用FIQ
  • T - 使用Thumb指令集
  • M[4:0] - 模式编码,指示当前运行模式
  • 当前指令集受J:T的影响:00-ARM 01-Thumb 10-Jazelle 11-ThumbEE

流水线

https://zhuanlan.zhihu.com/p/425235910

ARM Cortex-A中使用的是5级流水线 .

  1. Inst Fetch

    PC中指向的地址取指令并放入指令寄存器IR,接着PC+4指向顺序的下一条指令 .

  2. .. Decode

    对指令进行译码,并用IR中的寄存器地址去访问通用寄存器组,读出所需的操作数 .

  3. Excute

    对不同类型指令进行的响应的执行操作 .

  4. Memory

    该周期处理的指令只有Load、Store分支指令 .

    • Load、Store 用于访存读写 .
    • 分支指令将转移目标地址送入PC,在编写跳转程序时,应合理优化 采用延迟转移 避免分支预测失败带来的流水线停顿,提高CPU效率 .
  5. Write

    ALU运算指令后的结果写入寄存器组 .

  • 仔细

    需要指出的是:在此流水线中Excute期间执行的指令的地址与PC所指向的地址间隔8 Byte .