【嵌入式系统】第二章 ARM体系结构

ARM体系结构

  • 1 ARM微处理器概述
    • 1.1 ARM(Advanced RISC Machines)
      • 特点:
      • 处理器系列
    • 1.2 ARM的流水线模式
        • ARM7采用三级流水线的冯诺依曼结构
        • ARM9采用五级流水线的哈佛结构
    • 1.3 RISC体系结构
      • CISC对比RISC
    • 1.4 寄存器
    • 1.5 ARM指令集概述
    • 1.6 Thumb指令集概述
  • 2 ARM微处理器体系结构
    • 2.1 数据类型
    • 2.2 ARM微处理器工作状态
    • 2.3 ARM体系结构的存储器格式
    • 2.4 处理器模式
      • 启动时模式转换
    • 2.5 寄存器组织
      • R13堆栈指针
      • R14寄存器与子程序调用
      • R15寄存器
      • Thumb状态下寄存器
      • 程序状态寄存器CPSR
        • SPSR:备份程序状态字,保存异常事件发生之前的CPSR
        • CPSR/SPSR的读写指令
    • 2.6 异常
      • 异常优先级
  • 未完待续

1 ARM微处理器概述

1.1 ARM(Advanced RISC Machines)

特点:

  • 体积小,功耗低,成本低,高性能
  • 支持Thumb(16 bit)和ARM(32 bit)双指令集
  • 使用寄存器,大多数数据操作都在寄存器中完成,指令执行速度快
  • 寻址方式灵活简单,执行效率高
  • 指令长度固定

处理器系列

  • 基于指令集体系结构版本分类:v1,v2,v5,v6,v7,v8等
  • 基于处理器系列分类:ARM7,ARM9,ARM10,ARM11,StrongARM,XScale

PPT有个指令集版本对应处理器系列的图,以及各指令集版本特点。我估计不考(考了也太丧心病狂了)
但有几点:

  • v4引入Thumb指令集

PPT上有对于处理器核的介绍,我觉得更多的像是产品介绍,有需要再去看吧

1.2 ARM的流水线模式

PC指向正被取指的指令,而非正在执行的指令

ARM7采用三级流水线的冯诺依曼结构

取指令(Fetch) -----> 译码(Decode) -----> 执行(Execute)


ARM9采用五级流水线的哈佛结构

取指令(Fetch) -----> 译码(Decode) -----> 执行(Execute) -----> 访存(Memory) -----> 写入(Write)

ARM9的五级流水线将存储器的访问寄存器的写操作分别单独处理,
【嵌入式系统】第二章 ARM体系结构_第1张图片
解决了三级流水线的LDR/STR指令执行的延迟,提升效率
【嵌入式系统】第二章 ARM体系结构_第2张图片【嵌入式系统】第二章 ARM体系结构_第3张图片
如果ARM9指令不是对存储器的访问,本级流水线为空时钟周期

1.3 RISC体系结构

CISC缺点:随着指令集不断引入新的指令,计算机体系结构会越来越复杂。在各种指令中使用频率差距比较大 。
特点

  • 指令小于100条
  • 指令长度一致,单拍完成便于流水操作
  • 寄存器数量多,不少于32个。数据处理的指令只对寄存器的内容操作,只有LDM/STM访问存储器

CISC对比RISC

类别 CISC RISC
指令系统 数量多 数量少,通常少于100
执行时间 有些指令执行时间长,如整块存储器内容拷贝 没有较长执行时间的指令
编码长度 编码长度不定,1-15 Byte 编码长度固定,通常为4 Byte
寻址方式 寻址方式多样 简单寻址
操作 可对寄存器,存储器进行算数逻辑操作 只能对寄存器进行算术操作和逻辑操作,只有Load/Store操作存储器
编译 难以用优化编译器生成高效目标代码程序 采用优化编译技术,生成高效的目标代码程序

1.4 寄存器

ARM处理器有37个物理寄存器:31个通用寄存器和6个状态寄存器。寄存器被安排成部分重叠的组,每种处理器模式有不同的寄存器组,以便得到快速的上下文切换

1.5 ARM指令集概述

ARM指令集可分为5大类:

  1. 数据处理指令:MOV,AND,SUB,ADD
  2. 加载和存储指令:LDR,STR,LDM,STM
  3. 分支指令:B,BX
  4. 协处理器指令:LDC,STC
  5. 杂项指令:SWI,MRS,MSR
    • MRS:读状态寄存器指令,将状态寄存器值保存在通用寄存器上
    • MSR:写状态寄存器指令,将通用寄存器值写回状态寄存器

1.6 Thumb指令集概述

16 bit Thumb指令集,是ARM指令集的子集

可分为四大类指令

  1. 分支指令
  2. 数据处理指令
  3. 寄存器加载和存储指令
  4. 异常产生指令

2 ARM微处理器体系结构

2.1 数据类型

  • 字节Byte:长度均为8 bit
  • 字Word:在ARM体系结构中为32 bit,在8 bit /16 bit 处理器体系结构中,字的长度为16 bit
  • 半字Half-Word:在ARM体系结构中为16 bit,在8 bit /16 bit 处理器体系结构中,字的长度也为16 bit

2.2 ARM微处理器工作状态

分为ARM状态和Thumb状态,当操作数寄存器状态位(位[0])为1进去Thumb状态,状态位为0时进入ARM状态。

;从ARM状态切换到Thumb状态
LDR		R0,  =Lable+1
BX		R0
;从Thumb状态切换到ARM状态
LDR		R0,  =Lable
BX		R0

2.3 ARM体系结构的存储器格式

  • 大端存储:高字节存储在低地址,类似字符串读取数字读一个存一个
  • 小端存储:高字节存储在高地址,
    ARM默认采用小端格式

2.4 处理器模式

ARM体系结构支持7种处理器模式:

处理器模式 说明 备注
用户usr 正常程序工作模式 不能直接切换到其他模式
系统sys 用于支持操作系统的特权任务 与用户模式使用完全相同的寄存器组,但可以直接切换到其他模式
快中断fiq 支持高速数据传输及通道处理 FIQ异常响应时进入此模式
中断irq 用于通用中断处理 IRQ异常响应时进入此模式
管理svc 操作系统保护代码 系统复位和软件中断响应时进入此模式
中止abt 用于支持虚拟内存和存储器保护 预取中止和数据中止
未定义und 支持硬件协处理器的软件仿真 未定义指令异常响应时进入此模式

特权模式:除了用户模式其他都属于特权模式,可以自由切换处理器模式,ARM内部寄存器和一些片内外设只允许特权模式访问。
异常模式:特权模式中除了系统模式都是异常模式,通过程序切换或由特定异常进入

启动时模式转换

  1. 管理模式
  2. 多种特权模式变化:完成各模式的堆栈设置,初始化每种模式的R13指向该运行模式的栈空间
  3. 用户模式:用户程序的运行模式

2.5 寄存器组织

【嵌入式系统】第二章 ARM体系结构_第4张图片

R0~R13:通用寄存器,可用于任何使用通用寄存器的指令
R0~R7:未分组寄存器,对于任意处理器模式,对应相同的32位物理寄存器
R8~R14:分组寄存器,对应的物理寄存器取决于当前的处理器模式

R13堆栈指针

SP,指向各状态模式的专用堆栈,ARM中没有特殊方式使用,但Thumb有

R14寄存器与子程序调用

R14是链接寄存器,一个功能是在每种模式下,保存子程序的返回地址,另一个功能是当发生异常的时候,该模式下的R14设置成异常模式将要返回的地址

下面是子程序调用的过程:

  1. 程序A调用程序B
  2. 程序跳转至Lable,执行B,同时硬件将BL Lable指令的下一条指令地址存入R14
  3. 程序B执行完毕,将R14的值存入PC,实现子程序返回【嵌入式系统】第二章 ARM体系结构_第5张图片
    异常发生时,程序跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成,区别在于有些异常由一个小常量的偏移。

R15寄存器

R15寄存器是程序计数器PC,指向正在取指的地址

【嵌入式系统】第二章 ARM体系结构_第6张图片使用STR或STM指令保存R15时,将会在当前指令加上8字节或12字节的偏移,对于不同芯片有不同的偏移量

计算偏移汇编程序:
【嵌入式系统】第二章 ARM体系结构_第7张图片

Thumb状态下寄存器

可以直接访问的寄存器有:

  • R0~R7
  • R13~R15
  • CPSR

发生异常时,处理器自动进入ARM状态

程序状态寄存器CPSR

【嵌入式系统】第二章 ARM体系结构_第8张图片 N、Z、C、V,最高4位称为条件码标志。ARM的大多数指令可以条件执行的,即通过检测这些条件码标志来决定程序指令如何执行。

各个条件码的含义如下:

  • N:在结果是有符号的二进制补码情况下,如果结果为负数,则N=1;如果结果为非负数,则N=0。

  • Z:如果结果为0,则Z=1;如果结果为非零,则Z=0。

  • C:其设置分一下几种情况:

    • 对于加法指令(包含比较指令CMN),如果产生进位,则C=1;否则C=0。
    • 对于减法指令(包括比较指令CMP),如果产生借位,则C=0;否则C=1。
    • 对于有移位操作的非法指令,C为移位操作中最后移出位的值。
    • 对于其他指令,C通常不变。
  • V:对于加减法指令,在操作数和结果是有符号的整数时,如果发生溢出,则V=1;如果无溢出发生,则V=0;对于其他指令,V通常不发生变化。

SPSR:备份程序状态字,保存异常事件发生之前的CPSR
CPSR/SPSR的读写指令

MRS:读状态寄存器到通用寄存器MRS R1, CPSR
MSR:写通用寄存器到状态寄存器MSR CPSR, R1

2.6 异常

正常的程序流被暂时中止,处理器就进入异常模式
【嵌入式系统】第二章 ARM体系结构_第9张图片

异常优先级

【嵌入式系统】第二章 ARM体系结构_第10张图片

未完待续

你可能感兴趣的:(arm开发)