Download presentation
Presentation is loading. Please wait.
1
第2章ARM/THUMB微处理器结构及指令系统
2
本章主要内容: (1) ARM/Thumb及相关技术简介 (2) ARM/Thumb微处理器的应用领域及特点 (3) ARM/Thumb微处理器系列 (4) ARM/Thumb微处理器的结构 (5) ARM/Thumb指令系统
3
目的要求、难点、重点: 目的要求: ◆ ARM/THUMB及相关技术简介 ◆ ARM/THUMB微处理器的应用领域及特点
课程难点:RISC体系结构概述。
4
第二章 目录 1 ARM微处理器概述 1.1 ARM处理器系列 2 ARM微处理器体系结构 3 ARM/Thumb指令系统
第二章 目录 1 ARM微处理器概述 1.1 ARM处理器系列 1.2 RISC体系结构 1.3 ARM和Thumb状态 1.4 寄存器 1.5 ARM指令集概述 1.6 Thumb指令集概述 2 ARM微处理器体系结构 2.1数据类型 2.2ARM微处理器的工作状态 2.3 ARM体系结构的存储器格式 2.4处理器模式 2.5寄存器组织 2.6异常 3 ARM/Thumb指令系统 3.1处理器寻址方式 3.2指令集介绍 3.3指令集介绍
5
第二章 目录 ※2 ARM微处理器体系结构 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态
第二章 目录 ※2 ARM微处理器体系结构 ●数据类型 ● ARM微处理器的工作状态 ● ARM体系结构的存储器格式 ●处理器模式 ●寄存器组织 ●异常 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态 ●寄存器 ● ARM指令集概述 ● Thumb指令集概述 ※3 ARM/Thumb指令系统 ●处理器寻址方式 ●指令集介绍
6
1 ARM微处理器概述 ARM简介: ARM(Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。 1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用ARM 技术知识产权(IP)核的微处理器已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场, ARM
7
ARM公司简介 将技术授权给其它芯片厂商 . . . 形成各具特色的ARM芯片
8
第二章 目录 ※2 ARM微处理器体系结构 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态
第二章 目录 ※2 ARM微处理器体系结构 ●数据类型 ● ARM微处理器的工作状态 ● ARM体系结构的存储器格式 ●处理器模式 ●寄存器组织 ●异常 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态 ●寄存器 ● ARM指令集概述 ● Thumb指令集概述 ※3 ARM/Thumb指令系统 ●处理器寻址方式 ●指令集介绍
9
1.1ARM处理器系列 ARM处理器核简介 ARM公司开发了很多系列的ARM处理器核,目前最新的系列已经是ARM11了,而ARM6核以及更早的系列已经很罕见了。目前应用比较广泛的系列是: ARM7 ARM9 ARM9E ARM10 SecurCore Xscale
10
1.1ARM处理器系列 ARM处理器核简介——ARM7
该系列包括ARM7TDMI、ARM7TDMI-S、带有高速缓存处理器宏单元的ARM720T和扩充了Jazelle的ARM7EJ-S。该系列处理器提供Thumb 16位压缩指令集和EmbededICE软件调试方式,适用于更大规模的SoC设计中。 ARM7系列广泛应用于多媒体和嵌入式设备,包括Internet设备、网络和调制解调器设备,以及移动电话、PDA等无线设备。
11
1.1ARM处理器系列 ARM处理器核简介——ARM9
该系列包括ARM9TDMI、ARM920T和带有告诉缓存处理器宏单元的ARM940T。除了兼容ARM7系列,而且能够更加灵活的设计。 ARM9系列主要应用于引擎管理、仪器仪表、安全系统和机顶盒等领域。
12
1.1ARM处理器系列 ARM处理器核简介——ARM10
该系列包括ARM1020E和ARM1020E处理器核,其核心在于使用向量浮点(VFP)单元VFP10提供高性能的浮点解决方案,从而极大提高了处理器的整型和浮点运算性能。 可以用于视频游戏机和高性能打印机等场合。
13
1.1ARM处理器系列 ARM处理器核简介——SecurCore
该系列涵盖了SC100、SC110、SC200和SC210处理核。该系列处理器主要针对新兴的安全市场,以一种全新的安全处理器设计为智能卡和其它安全IC开发提供独特的32位系统设计,并具有特定反伪造方法,从而有助于防止对硬件和软件的盗版。
14
1.1ARM处理器系列 ARM处理器核简介——Xscale
Intel Xscale微控制器则提供全性能、高性价比、低功耗的解决方案,支持16位Thumb指令并集成数字信号处理(DSP)指令。
15
第二章 目录 ※2 ARM微处理器体系结构 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态
第二章 目录 ※2 ARM微处理器体系结构 ●数据类型 ● ARM微处理器的工作状态 ● ARM体系结构的存储器格式 ●处理器模式 ●寄存器组织 ●异常 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态 ●寄存器 ● ARM指令集概述 ● Thumb指令集概述 ※3 ARM/Thumb指令系统 ●处理器寻址方式 ●指令集介绍
16
1.2 RISC体系结构 ●RISC特点如下: 精简指令集计算机RISC结构的产生是相对于传统的复杂指令集计算机CISC 结构而言的。
17
1.2 RISC体系结构 ●RISC特点如下: ■ 指令规整、对称、简单。指令小于100条,基本寻址方 式有2~3种。 ■ 单周期指令。
■ 指令规整、对称、简单。指令小于100条,基本寻址方 式有2~3种。 ■ 单周期指令。 ■ 指令字长度一致,单拍完成,便于流水操作; ■ ARM7 三级流水线:取指、译码、执行; ■ ARM9 五级流水线; ■ ARMl0 六级流水线。 ■ 大量的寄存器。寄存器不少于32个。数据处理器的指令只对寄存器的内容操作。只有加载/存储指令可以访问存储器。
18
第二章 目录 ※2 ARM微处理器体系结构 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态
第二章 目录 ※2 ARM微处理器体系结构 ●数据类型 ● ARM微处理器的工作状态 ● ARM体系结构的存储器格式 ●处理器模式 ●寄存器组织 ●异常 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态 ●寄存器 ● ARM指令集概述 ● Thumb指令集概述 ※3 ARM/Thumb指令系统 ●处理器寻址方式 ●指令集介绍
19
1.3 ARM和Thumb状态 Thumb指令集的功能是32位ARM指令集的功能子集。Thumb在性能和代码大小之间提供了出色的折中。
正在执行ARM指令集的处理器是工作在ARM状态下。
20
第二章 目录 ※2 ARM微处理器体系结构 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态
第二章 目录 ※2 ARM微处理器体系结构 ●数据类型 ● ARM微处理器的工作状态 ● ARM体系结构的存储器格式 ●处理器模式 ●寄存器组织 ●异常 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态 ●寄存器 ● ARM指令集概述 ● Thumb指令集概述 ※3 ARM/Thumb指令系统 ●处理器寻址方式 ●指令集介绍
21
1.4. 寄存器 ARM处理器有37(31+6)个物理寄存器,有18个可编程访问的寄存器。
寄存器被安排成部分重叠的组。每种处理器模式都有不同的寄存器组。 分组的寄存器在异常处理和特权操作时,可得到快速的上下文切换。
22
第二章 目录 ※2 ARM微处理器体系结构 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态
第二章 目录 ※2 ARM微处理器体系结构 ●数据类型 ● ARM微处理器的工作状态 ● ARM体系结构的存储器格式 ●处理器模式 ●寄存器组织 ●异常 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态 ●寄存器 ● ARM指令集概述 ● Thumb指令集概述 ※3 ARM/Thumb指令系统 ●处理器寻址方式 ●指令集介绍
23
1.5 ARM指令集概述 数据处理指令 加载和存储指令 分支指令 协处理器指令 杂项指令 ARM指令集
ARM指令集可分为5大类指令,所有指令都可以条件执行,其中一些指令还可以根据执行结果更新CPSR寄存器的相关标志位: 数据处理指令 加载和存储指令 分支指令 协处理器指令 杂项指令
24
第二章 目录 ※2 ARM微处理器体系结构 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态
第二章 目录 ※2 ARM微处理器体系结构 ●数据类型 ●ARM微处理器的工作状态 ●ARM体系结构的存储器格式 ●处理器模式 ●寄存器组织 ●异常 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态 ●寄存器 ● ARM指令集概述 ● Thumb指令集概述 ※3 ARM/Thumb指令系统 ●处理器寻址方式 ●指令集介绍
25
1.6 Thumb指令集概述 Thumb指令集 Thumb指令集可分为4大类指令: 分支指令; 数据处理指令; 寄存器加载和存储指令;
异常产生指令。
26
第二章 目录 ※2 ARM微处理器体系结构 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态
第二章 目录 ※2 ARM微处理器体系结构 ●数据类型 ● ARM微处理器的工作状态 ● ARM体系结构的存储器格式 ●处理器模式 ●寄存器组织 ●异常 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态 ●寄存器 ● ARM指令集概述 ● Thumb指令集概述 ※3 ARM/Thumb指令系统 ●处理器寻址方式 ●指令集介绍
27
上节内容回顾: ARM—公司名称、微处理器名称和嵌入式技术名称; 特点—高性能、小体积、低功耗、紧代码密度、多供应商、高占有率;
系列—ARM7、ARM9(E)、ARM10、Xscale、StrongARM和SecurCore等; 结构—两种CPU工作状态、32位RISC结构、多寄存器、多处理器模式 、两种指令集;
28
教学内容: ARM处理器体系结构 ●数据类型 ● ARM微处理器的工作状态 ● ARM体系结构的存储器格式 ●处理器模式 ●寄存器组织
●异常
29
2.1 数据类型 体系结构直接支持的数据类型 ARM处理器支持下列数据类型: 字节 8位 半字 16位(必须分配为占用两个字节)
字节 8位 半字 16位(必须分配为占用两个字节) 字 为(必须分配为占用4各字节) 1 2 3 4
30
2.1 数据类型 体系结构直接支持的数据类型 ARM处理器支持下列数据类型: 字节 8位 半字 16位(必须分配为占用两个字节)
字节 8位 半字 16位(必须分配为占用两个字节) 字 为(必须分配为占用4各字节) 1 2 3 4
31
2.1 数据类型 体系结构直接支持的数据类型 ARM处理器支持下列数据类型: 字节 8位 半字 16位(必须分配为占用两个字节)
字节 8位 半字 16位(必须分配为占用两个字节) 字 位(必须分配为占用4各字节) 1 2 3 4
32
第二章 目录 ※1 ARM微处理器概述 ※2 ARM微处理器体系结构 ●ARM处理器系列 ●数据类型 ● RISC体系结构
第二章 目录 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态 ●寄存器 ● ARM指令集概述 ● Thumb指令集概述 ※2 ARM微处理器体系结构 ●数据类型 ● ARM微处理器的工作状态 ● ARM体系结构的存储器格式 ●处理器模式 ●寄存器组织 ●异常 ※3 ARM/Thumb指令系统 ●处理器寻址方式 ●指令集介绍
33
2.2 ARM微处理器的工作状态 ARM微处理器的工作状态一般有两种: ARM状态—处理器执行32位的字对齐的 ARM指令;
Thumb状态—处理器执行16位的、半字对齐的 Thumb指令。
34
当操作数寄存器的状态位(位[0])为0时执行BX指令进入ARM状态。 当处理器进行异常处理是时,进入ARM状态从异常向量地址处开始执行。
处理器状态切换 进入Thumb状态: 当操作数寄存器的状态位(位[0])为1时,执行 BX指令进入Thumb状态。 如果处理器在Thumb状态进入异常,则当异常 处理返回时,自动转换到Thumb状态。 进入ARM状态。 当操作数寄存器的状态位(位[0])为0时执行BX指令进入ARM状态。 当处理器进行异常处理是时,进入ARM状态从异常向量地址处开始执行。
35
2.2 ARM微处理器的工作状态 处理器状态切换 使用BX指令将ARM7TDMI内核的操作状态在ARM状态和Thumb状态之间进行切换,程序如下所示。 ;从Arm状态切换到Thumb状态 LDR R0,=Lable+1 BX R0 ;从Thumb状态切换到ARM状态 LDR R0,=Lable 跳转地址标号 地址最低位为1,表示切换到Thumb状态 地址最低位为0,表示切换到ARM状态
36
第二章 目录 ※1 ARM微处理器概述 ※2 ARM微处理器体系结构 ●ARM处理器系列 ●数据类型 ● RISC体系结构
第二章 目录 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态 ●寄存器 ● ARM指令集概述 ● Thumb指令集概述 ※2 ARM微处理器体系结构 ●数据类型 ● ARM微处理器的工作状态 ● ARM体系结构的存储器格式 ●处理器模式 ●寄存器组织 ●异常 ※3 ARM/Thumb指令系统 ●处理器寻址方式 ●指令集介绍
37
4 byte3 byte2 byte1 byte0 2.3 ARM体系结构的存储器格式 8 ARM体系结构可以用两种方法存储字数据,
称为大端格式和小端格式。 小端模式 31 2423 1615 8 7 0位 字地址 8 4 byte3 byte2 byte1 byte0
38
4 byte0 byte1 byte2 byte3 2.3 ARM体系结构的存储器格式 8 ARM体系结构可以用两种方法存储字数据,
称为大端格式和小端格式。 大端模式 字地址 8 4 31 2423 1615 8 7 0位 byte0 byte1 byte2 byte3
39
第二章 目录 ※1 ARM微处理器概述 ※2 ARM微处理器体系结构 ●ARM处理器系列 ●数据类型 ● RISC体系结构
第二章 目录 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态 ●寄存器 ● ARM指令集概述 ● Thumb指令集概述 ※2 ARM微处理器体系结构 ●数据类型 ● ARM微处理器的工作状态 ● ARM体系结构的存储器格式 ●处理器模式 ●寄存器组织 ●异常 ※3 ARM/Thumb指令系统 ●处理器寻址方式 ●指令集介绍
40
2.2.4 处理器模式 简介 ARM体系结构支持7种处理器模式,分别为:用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。这样的好处是可以更好的支持操作系统并提高工作效率。
41
2.2.4 处理器模式 处理器模式 处理器模式 说明 备注 用户 (usr) 正常程序工作模式 不能直接切换到其它模式 系统 (sys)
用于支持操作系统的特权任务等 与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq) 支持高速数据传输及通道处理 FIQ异常响应时进入此模式 中断 (irq) 用于通用中断处理 IRQ异常响应时进入此模式 管理 (svc) 操作系统保护代码 系统复位和软件中断响应时进入此模式 中止 (abt) 用于支持虚拟内存和/或存储器保护 在ARM7TDMI没有大用处 未定义 (und) 支持硬件协处理器的软件仿真 未定义指令异常响应时进入此模式
42
2.2.4 处理器模式 特权模式 处理器模式 说明 备注 用户 (usr) 正常程序工作模式 不能直接切换到其它模式 系统 (sys) 用于支持操作系统的特权任务等 与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq) 支持高速数据传输及通道处理 FIQ异常响应时进入此模式 中断 (irq) 用于通用中断处理 IRQ异常响应时进入此模式 管理 (svc) 操作系统保护代码 系统复位和软件中断响应时进入此模式 中止 (abt) 用于支持虚拟内存和/或存储器保护 在ARM7TDMI没有大用处 未定义 (und) 支持硬件协处理器的软件仿真 未定义指令异常响应时进入此模式 未定义 (und) 中止 (abt) 管理 (svc) 中断 (irq) 快中断 (fiq) 系统 (sys) 除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。
43
2.2.4 处理器模式 异常模式 处理器模式 说明 备注 用户 (usr) 正常程序工作模式 不能直接切换到其它模式 系统 (sys) 用于支持操作系统的特权任务等 与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq) 支持高速数据传输及通道处理 FIQ异常响应时进入此模式 中断 (irq) 用于通用中断处理 IRQ异常响应时进入此模式 管理 (svc) 操作系统保护代码 系统复位和软件中断响应时进入此模式 中止 (abt) 用于支持虚拟内存和/或存储器保护 在ARM7TDMI没有大用处 未定义 (und) 支持硬件协处理器的软件仿真 未定义指令异常响应时进入此模式 这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。 未定义 (und) 中止 (abt) 管理 (svc) 中断 (irq) 快中断 (fiq)
44
2.2.4 处理器模式 用户和系统模式 这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。
说明 备注 用户 (usr) 正常程序工作模式 不能直接切换到其它模式 系统 (sys) 用于支持操作系统的特权任务等 与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq) 支持高速数据传输及通道处理 FIQ异常响应时进入此模式 中断 (irq) 用于通用中断处理 IRQ异常响应时进入此模式 管理 (svc) 操作系统保护代码 系统复位和软件中断响应时进入此模式 中止 (abt) 用于支持虚拟内存和/或存储器保护 在ARM7TDMI没有大用处 未定义 (und) 支持硬件协处理器的软件仿真 未定义指令异常响应时进入此模式 系统 (sys) 用户 (usr) 这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。 系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。
45
主要完成各模式的堆栈设置,注意不要进入用户模式 复位后 缺省模式 一般为用户模式User
处理器启动时的模式转换图 多种特权模式变化 用户程序的运行模式 管理模式SVC (Supervisor) 主要完成各模式的堆栈设置,注意不要进入用户模式 复位后 缺省模式 一般为用户模式User
46
第二章 目录 ※1 ARM微处理器概述 ※2 ARM微处理器体系结构 ●ARM处理器系列 ●数据类型 ● RISC体系结构
第二章 目录 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态 ●寄存器 ● ARM指令集概述 ● Thumb指令集概述 ※2 ARM微处理器体系结构 ●数据类型 ● ARM微处理器的工作状态 ● ARM体系结构的存储器格式 ●处理器模式 ●寄存器组织 ●异常 ※3 ARM/Thumb指令系统 ●处理器寻址方式 ●指令集介绍
47
2.5 寄存器组织 简介 ARM处理器有37(31+6)个物理寄存器,有18个可编程访问的寄存器。
寄存器被安排成部分重叠的组。在不同的工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同。 分组的寄存器在处理处理器异常和特权操作时可得到快速的上下文切换。
48
ARM状态各模式下的寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断
通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR 无 SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq
49
ARM状态各模式下的寄存器 所有的37个寄存器,分成两大类: 31个通用32位寄存器; 6个状态寄存器。 寄存器类别 寄存器在汇编中的名称
各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR 无 SPSR_abt SPSR_und SPSR_irq SPSR_fiq R15 R14_fiq R14_irq R14_und R14_abt R14_svc R14 R13_fiq R13_irq R13_und R13_abt R13_svc R13 R12_fiq R12 R11_fiq R11 R10_fiq R10 R9_fiq R9 R8_fiq R8 R7 R6 R5 R4 R3 R2 R1 R0 所有的37个寄存器,分成两大类: 31个通用32位寄存器; 6个状态寄存器。 SPSR_fiq SPSR_irq SPSR_und SPSR_abt SPSR_svc CPSR
50
ARM状态各模式下可以访问的寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断
通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR 无 SPSR_abt SPSR_und SPSR_irq SPSR_fiq SPSR_irq CPSR R15 R14_irq R13_irq R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 中断 SPSR_fiq CPSR R15 R14_fiq R13_fiq R12_fiq R11_fiq R10_fiq R9_fiq R8_fiq R7 R6 R5 R4 R3 R2 R1 R0 快中断 SPSR_und CPSR R15 R14_und R13_und R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 未定义 SPSR_abt CPSR R15 R14_abt R13_abt R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 中止 无 CPSR R15 R14 R13 R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 用户 无 CPSR R15 R14 R13 R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 系统 SPSR_svc CPSR R15 R14_svc R13_svc R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 管理
51
一般的通用寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR 无 SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq R13_fiq R13_irq R13_und R13_abt R13_svc R13 R12_fiq R12 R11_fiq R11 R10_fiq R10 R9_fiq R9 R8_fiq R8 R7 R6 R5 R4 R3 R2 R1 R0 在汇编语言中寄存器R0~R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。
52
其中R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。
一般的通用寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR 无 SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq R7 R6 R5 R4 R3 R2 R1 R0 R13_fiq R13_irq R13_und R13_abt R13_svc R13 R12_fiq R12 R11_fiq R11 R10_fiq R10 R9_fiq R9 R8_fiq R8 R7 R6 R5 R4 R3 R2 R1 R0 其中R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。
53
寄存器R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器
一般的通用寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR 无 SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq 寄存器R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器 R14_fiq R14_irq R14_und R14_abt R14_svc R14 R13_fiq R13_irq R13_und R13_abt R13_svc R13 R12_fiq R12 R11_fiq R11 R10_fiq R10 R9_fiq R9 R8_fiq R8
54
一般的通用寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR 无 SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq 寄存器R8~R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。 R12_fiq R12 R11_fiq R11 R10_fiq R10 R9_fiq R9 R8_fiq R8
55
寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。
一般的通用寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR 无 SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq 寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。 R14_fiq R14_irq R14_und R14_abt R14_svc R14 R13_fiq R13_irq R13_und R13_abt R13_svc R13
56
堆栈指针寄存器R13(SP) 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR 无 SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq 寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。但是在Thumb指令集中存在使用R13的指令。
57
R14为链接寄存器(LR),在结构上有两个特殊功能: 在每种模式下,模式自身的R14版本用于保存子程序返回地址;
寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR 无 SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq R14为链接寄存器(LR),在结构上有两个特殊功能: 在每种模式下,模式自身的R14版本用于保存子程序返回地址; 当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。
58
2.5 寄存器组织 R14寄存器与子程序调用 操作流程 1.程序A执行过程中调用程序B;
Lable 程序A 程序B R14 1.程序A执行过程中调用程序B; Lable ??? 2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14; BL Lable 地址A ??? MOV PC,LR R14(地址A) 3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;
59
2.5 寄存器组织 R14寄存器与异常发生 异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。
60
2.5 寄存器组织 R14寄存器注意要点 当发生异常嵌套时,这些异常之间可能会发生冲突。
例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。
61
R14寄存器注意要点 3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;
用户模式下的程序 IRQ模式下的程序A 3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序; 1.执行用户模式下的程序; 2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏; a B ... X A 地址A return 地址A 未被破坏
62
2.5 寄存器组织 R14寄存器注意要点 6. 在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回;
R14_irq 用户模式下的程序 IRQ模式下的程序A IRQ模式下的程序B 6. 在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回; 3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序; 5. 硬件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误; 1.执行用户模式下的程序; 解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。 4. 如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断,或者调用子程序; 2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏; a a B ... X A 地址A B ... X A 地址B return return return 地址A 地址B 未被破坏 被破坏
63
程序计数器R15(PC) 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR 无 SPSR_abt SPSR_und SPSR_irq SPSR_fiq 寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。
64
2.5 寄存器组织 读R15的限制 正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。 LDR R0,PC ??? PC PC-4 PC-8 正在执行 正在译码 正在取指 流水线状态 地址 程序代码
65
2.5 寄存器组织 读R15的限制 当使用STR或STM指令保存R15时,会有一个例外。这些指令可能将当前指令地址加8字节或加12字节保存(将来可能还有其它数字)。偏移量是8还是12取决于具体的ARM芯片,但是对于一个确定的芯片,这个值是一个常量。 所以最好避免使用STR和STM指令来保存R15,如果很难做到,那么应当在程序中计算出该芯片的偏移量。
66
2.5 寄存器组织 读R15的限制 计算偏移量程序代码: SUB R1,PC,#4 ;R1=下面STR指令的地址
STR PC,[R0] ;保存STR指令地址+偏移量 LDR R0,[R0] ;然后重装 SUB R0,R0,R1 ;计算偏移量
67
2.5 寄存器组织 写R15的限制 正常操作时,写入R15 的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。
68
2.5 寄存器组织 写R15的限制 由于ARM指令以字节为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:
在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,因此跳转地址由指令的实际目标地址(写入R15的值)和0xFFFFFFFC相与得到; 在ARM结构V4版及以上版本中,写入R15的值的最低两位为0,如果不是,结果将不可预测。
69
程序状态寄存器CPSR 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR 无 SPSR_abt SPSR_und SPSR_irq SPSR_fiq 寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在因为异常事件而进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。
70
2.5 寄存器组织 Thumb状态寄存器 Thumb状态寄存器集是ARM状态集的子集,程序员可以直接访问的寄存器为:
8个通用寄存器R0~R7; 程序计数器(PC); 堆栈指针(SP); 链接寄存器(LR); 有条件访问程序状态寄存器( CPSR)。
71
Thumb状态各模式下的寄存器 CPSR 状态寄存器 R15 PC R14_fiq R14_irq R14_und R14_abt R14_svc R14 LR R13_fiq R13_irq R13_und R13_abt R13_svc R13 SP R7 R7(v4,wr) R6 R6(v3) R5 R5(v2) R4 R4(v1) R3 R3(a4) R2 R2(a3) R1 R1(a2) R0 R0(a1) 通用寄存器和程序计数器 快中断 中断 未定义 中止 管理 系统 用户 各模式下实际访问的寄存器 寄存器在汇编中的名称 寄存器类别 注意:括号内为ATPCS中寄存器的命名,可以使用RN汇编伪指令将寄存器定义多个名字。其中ADS1.2的汇编程序直接支持这些名称,但注意a1~a4,v1~v4必须用小写。
72
Thumb状态下的通用寄存器 CPSR 状态寄存器 R15 PC R14_fiq R14_irq R14_und R14_abt R14_svc R14 LR R13_fiq R13_irq R13_und R13_abt R13_svc R13 SP R7 R7(v4,wr) R6 R6(v3) R5 R5(v2) R4 R4(v1) R3 R3(a4) R2 R2(a3) R1 R1(a2) R0 R0(a1) 通用寄存器和程序计数器 快中断 中断 未定义 中止 管理 系统 用户 各模式下实际访问的寄存器 寄存器在汇编中的名称 寄存器类别 R7 R6 R5 R4 R3 R2 R1 R0 在汇编语言中寄存器R0~R7为保存数据或地址值的通用寄存器。对于任何处理器模式,它们中的每一个都对应于相同的32为物理寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊的用途,并且可用于任何使用通用寄存器的指令。
73
Thumb状态下的堆栈指针寄存器(SP)
CPSR 状态寄存器 R15 PC R14_fiq R14_irq R14_und R14_abt R14_svc R14 LR R13_fiq R13_irq R13_und R13_abt R13_svc R13 SP R7 R7(v4,wr) R6 R6(v3) R5 R5(v2) R4 R4(v1) R3 R3(a4) R2 R2(a3) R1 R1(a2) R0 R0(a1) 通用寄存器和程序计数器 快中断 中断 未定义 中止 管理 系统 用户 各模式下实际访问的寄存器 寄存器在汇编中的名称 寄存器类别 R13_fiq R13_irq R13_und R13_abt R13_svc R13 堆栈指针SP对应ARM状态的寄存器R13。每个异常模式都有其自身的SP分组版本,SP通常指向各异常模式所专用的堆栈。 注意:在发生异常时,处理器自动进入ARM状态。
74
链接寄存器LR对应ARM状态寄存器R14,在结构上有两个特殊功能,详见“ARM状态下的链接寄存器LR”。
Thumb状态下的链接寄存器R14(LR) CPSR 状态寄存器 R15 PC R14_fiq R14_irq R14_und R14_abt R14_svc R14 LR R13_fiq R13_irq R13_und R13_abt R13_svc R13 SP R7 R7(v4,wr) R6 R6(v3) R5 R5(v2) R4 R4(v1) R3 R3(a4) R2 R2(a3) R1 R1(a2) R0 R0(a1) 通用寄存器和程序计数器 快中断 中断 未定义 中止 管理 系统 用户 各模式下实际访问的寄存器 寄存器在汇编中的名称 寄存器类别 链接寄存器LR对应ARM状态寄存器R14,在结构上有两个特殊功能,详见“ARM状态下的链接寄存器LR”。 注意:在发生异常时,处理器自动进入ARM状态。 R14_fiq R14_irq R14_und R14_abt R14_svc R14
75
2.5 寄存器组织 ARM状态和Thumb状态之间寄存器的关系 Thumb状态R0~R7与ARM状态R0~R7相同;
Thumb状态CPSR和SPSR与ARM状态CPSR和SPSR相同; Thumb状态SP映射到ARM状态R13; Thumb状态LR映射到ARM状态R14; Thumb状态PC映射到ARM状态PC(R15)。
76
Thumb状态寄存器在Arm状态寄存器上的映射
堆栈指针 (R13) 连接寄存器 (R14) 程序计数器 (R15) 低寄存器 高寄存器
77
2.5 寄存器组织 在Thumb状态中访问高寄存器 可以使用MOV、CMP和ADD指令对高寄存器操作。
在Thumb状态中,高寄存器(R8~R15)不是标准寄存器集的一部分。汇编语言程序员对它们的访问受到限制,但可以将它们用于快速暂存。 可以使用MOV、CMP和ADD指令对高寄存器操作。
78
2.5 寄存器组织 程序状态寄存器—CPSR(1)+SPSR(5)
4个条件代码标志; 2个中断控制位; 5个对当前处理器模式进行编码的位; 1个指示当前执行指令的工作状态位; 保留位。 每个异常模式带有一个备份程序状态寄存器,用于保存在异常事件发生之前的CPSR;CPSR和SPSR通过特殊指令进行访问。 SPSR:备份程序状态字,保存异常事件发 生之前的CPSR.
79
当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。
最低8位为控制位,当发生异常时,这些位被硬件改变。当处理器处于一个特权模式时,可用软件操作这些位。 程序状态寄存器 当进行加法运算,并且最高位产生进位时C=1,否则C=0。 当进行减法运算,并且最高位产生借位时C=0,否则C=1。 对于移位操作指令,C为从最高位最后移出的值,其它指令C通常不变; 大多数“数值处理指令”可以选择是否影响条件代码标志位(指令带S后缀);但有些指令执行总是影响条件代码标志。 所有ARM指令都可按条件来执行,而Thumb指令中只有分支指令可按条件执行。 运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0; CPSR寄存器的格式 指令结果为0时Z=1(表示比较结果“相等”),否则Z=0; 条件代码标志 保留 控制位 N Z C V — I M0 M1 M2 M3 M4 T F . . . N Z C V I F T 溢出标志 保留位被保留将来使用。为了提高程序的可移植性,当改变CPSR标志和控制位时,请不要改变这些保留位。另外,请确保您程序的运行不受保留位的值影响,因为将来的处理器可能会将这些位设置为1或者0。 进位或借位扩展 模式位 状态位 零 FIQ禁止 负或小于 IRQ禁止
80
CPSR模式位设置表 M[4:0] 模式 10000 用户 10111 中止 10001 快中断 11011 未定义 10010 中断
11111 系统 10011 管理 注意:不是所有模式位的组合都定义了有效的处理器模式,如果使用了错误的设置,将引起一个无法恢复的错误。
81
第二章 目录 ※1 ARM微处理器概述 ※2 ARM微处理器体系结构 ●ARM处理器系列 ●数据类型 ● RISC体系结构
第二章 目录 ※1 ARM微处理器概述 ●ARM处理器系列 ● RISC体系结构 ● ARM和Thumb状态 ●寄存器 ● ARM指令集概述 ● Thumb指令集概述 ※2 ARM微处理器体系结构 ●数据类型 ● ARM微处理器的工作状态 ● ARM体系结构的存储器格式 ●处理器模式 ●寄存器组织 ●异常 ※3 ARM/Thumb指令系统 ●处理器寻址方式 ●指令集介绍
82
2.6 异常 简介 只要正常的程序流被暂时中止,处理器就进入异常模式。例如响应一个来自外设的中断。在处理异常之前,ARM7TDMI内核保存当前的处理器状态,这样当处理程序结束时可以恢复执行原来的程序。 如果同时发生两个或更多异常,那么将按照固定的顺序来处理异常,详见“异常优先级”部分。
83
异常处理器模式 异常类型 模式 正常地址 复位 管理 0x00000000 未定义指令 未定义 0x00000004 软件中断(SWI)
预取中止(取指令存储器中止) 中止 0x C 数据中止(数据访问存储器中止) 0x IRQ(中断) IRQ 0x FIQ(快速中断) FIQ 0x C
84
2.6 异常 异常的入口和出口处理 中断处理代码的开始部分和退出部分 SUB LR,LR,#4 ;计算返回地址
如果异常处理程序已经把返回地址拷贝到堆栈,那么可以使用一条多寄存器传送指令来恢复用户寄存器并实现返回。 中断处理代码的开始部分和退出部分 SUB LR,LR,#4 ;计算返回地址 STMFD SP!,{R0-R3,LR} ;保存使用到的寄存器 . . . LDMFD SP!,{R0-R3,PC}^ ;中断返回
85
2.6 异常 异常的入口和出口处理 如果异常处理程序已经把返回地址拷贝到堆栈,那么可以使用一条多寄存器传送指令来恢复用户寄存器并实现返回。
注意:中断返回指令的寄存器列表(其中必须包括PC)后的“^”符号表示这是一条特殊形式的指令。这条指令在从存储器中装载PC的同时(PC是最后恢复的),CPSR也得到恢复。这里使用的堆栈指针SP(R13)是属于异常模式的寄存器,每个异常模式有自己的堆栈指针。这个堆栈指针应必须在系统启动时初始化。 中断处理代码的开始部分和退出部分 SUB LR,LR,#4 ;计算返回地址 STMFD SP!,{R0-R3,LR} ;保存使用到的寄存器 . . . LDMFD SP!,{R0-R3,PC}^ ;中断返回
86
2.6 异常 进入异常 在异常发生后,ARM7TDMI内核会作以下工作: 1.在适当的LR中保存下一条指令的地址,当异常入口来自:
ARM状态,那么ARM7TDMI将当前指令地址加4或加8复制(取决于异常的类型)到LR中; 为Thumb状态,那么ARM7TDMI将当前指令地址加4或加8 (取决于异常的类型)复制到LR中;异常处理器程序不必确定状态。
87
2.6 异常 进入异常 在异常发生后,ARM7TDMI内核会作以下工作: 2.将CPSR复制到适当的SPSR中;
4.强制PC从相关的异常向量处取指。
88
2.6 异常 进入异常 ARM7TDMI内核在中断异常时置位中断禁止标志,这样可以防止不受控制的异常嵌套。
注:异常总是在ARM状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址装入PC时,会自动切换到ARM状态。
89
2.6 异常 退出异常 当异常结束时,异常处理程序必须: 1.将LR中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同;
2.将SPSR的值复制回CPSR; 3.清零在入口置位的中断禁止标志。 注:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。
90
2. 用户程序运行时发生IRQ中断,硬件完成以下动作:
图示进入异常过程 2. 用户程序运行时发生IRQ中断,硬件完成以下动作: 程序A IRQ服务程序 系统模式 IRQ模式 程序 寄存器组 1. 程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断; Jump 将CPSR寄存器内容存入IRQ模式的SPSR寄存器 置位I位(禁止IRQ中断) 清零T位(进入ARM状态) 设置MOD位,切换处理器模式至IRQ模式 LR_sys SPSR_irq LR_irq LR PC CPSR SPSR SYS 1 ? . . . MOD T F I N Z C V BackAddr JumpAddr 将下一条指令的地址存入IRQ模式的LR寄存器 IRQ ? 1 . . . SYS 1 ? . . . 将跳转地址存入PC,实现跳转 “?”表示对该位不关心
91
在异常处理结束后,异常处理程序完成以下动作:
图示退出异常过程 在异常处理结束后,异常处理程序完成以下动作: 程序A IRQ服务程序 系统模式 IRQ模式 程序 寄存器组 将SPSR寄存器的值复制回CPSR寄存器; Jump 将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断的用户程序。 return LR_sys SPSR_irq LR_irq LR PC CPSR SPSR SYS 1 ? . . . MOD T F I N Z C V BackAddr BackAddr-4 JumpAddr IRQ ? 1 . . . SYS 1 ? . . . SYS 1 ? . . . “?”表示对该位不关心
92
2.6 异常 快速中断请求 快速中断请求(FIQ)适用于对一个突发事件的快速响应,这得益于在ARM状态中,快中断模式有8个专用的寄存器可用来满足寄存器保护的需要(这可以加速上下文切换的速度)。 不管异常入口是来自ARM状态还是Thumb状态,FIQ处理程序都会通过执行下面的指令从中断返回: SUBS PC,R14_fiq,#4 在一个特权模式中,可以通过置位CPSR中的F位来禁止FIQ异常。
93
2.6 异常 中断请求 中断请求(IRQ)异常是一个由nIRQ输入端的低电平所产生的正常中断(在具体的芯片中,nIRQ由片内外设拉低,nIRQ是内核的一个信号,对用户不可见)。IRQ的优先级低于FIQ。对于FIQ序列它是被屏蔽的。任何时候在一个特权模式下,都可通过置位CPSR中的I 位来禁止IRQ。 不管异常入口是来自ARM状态还是Thumb状态,FIQ处理程序都会通过执行下面的指令从中断返回: SUBS PC,R14_fiq,#4
94
2.6 异常 中止 中止发生在对存储器的访问不能完成时,中止包含两种类型: 预取中止 发生在指令预取过程中 数据中止 发生在对数据访问时
95
2.6 异常 中止——预取指中止 当发生预取中止时,ARM7TDMI内核将预取的指令标记为无效,但在指令到达流水线的执行阶段时才进入异常。如果指令在流水线中因为发生分支而没有被执行,中止将不会发生。 在处理中止的原因之后,不管处于哪种处理器操作状态,处理程序都会执行下面的指令恢复PC和CPSR并重试被中止的指令: SUBS PC,R14_abt,#4
96
2.6 异常 中止——数据中止 当发生数据中止后,根据产生数据中止的指令类型作出不同的处理:
数据转移指令(LDR、STR)回写到被修改的基址寄存器。中止处理程序必须注意这一点; 交换指令(SWP)中止好像没有被执行过一样(中止必须发生在SWP指令进行读访问时) ;
97
2.6 异常 中止——数据中止 当发生数据中止后,根据产生数据中止的指令类型作出不同的处理:
块数据转移指令(LDM,STM)完成。 当回写被设置时,基址寄存器被更新。在指示出现中止后,ARM7TDMI内核防止所有寄存器被覆盖。这意味着ARM7TDMI内核总是会保护被中止的LDM指令中的R15(总是最后一个被转移的寄存器)。
98
2.6 异常 中止——数据中止 在修复产生中止的原因后,不管处于哪种处理器操作状态,处理程序都必须执行下面的返回指令 :
SUBS PC,R14_abt,#8
99
2.6 异常 软件中断指令 使用软件中断(SWI)指令可以进入管理模式,通常用于请求一个特定的管理函数。SWI处理程序通过执行下面的指令返回: MOVS PC,R14_svc 这个动作恢复了PC和CPSR并返回到SWI之后的指令。SWI处理程序读取操作码以提取SWI函数编号。
100
2.6 异常 未定义的指令 当ARM7TDMI处理器遇到一条自己和系统内任何协处理器都无法处理的指令时,ARM7TDMI内核执行未定义指令陷阱。软件可使用这一机制通过模拟未定义的协处理器指令来扩展ARM指令集。 注:ARM7TDMI处理器完全遵循ARM结构v4T,可以捕获所有分类未被定义的指令位格式。
101
2.6 异常 未定义的指令 在模拟处理了失败的指令后,陷阱程序执行下面的指令: 这个动作恢复了PC和CPSR并返回到未定义指令之后的指令。
MOVS PC,R14_svc 这个动作恢复了PC和CPSR并返回到未定义指令之后的指令。
102
地址 异常类型 进入时的模式 进入时I的状态 进入时F的状态 0x00 复位 管理 禁止 0x04 未定义指令 未定义 I F 0x08
软件中断 0x0C 中止(预取) 中止 0x10 中止(数据) 0x14 保留 — 0x18 IRQ 中断 0x1C FIQ 快中断 异 常 向 量 注:表中的I和F表示不对该位有影响,保留原来的值。
103
2.6 异常 异常优先级 当多个异常同时发生时,一个固定的优先级系统决定它们被处理的顺序: 异常类型 优先级 复位 1(最高优先级)
数据中止 2 FIQ 3 IRQ 4 预取中止 5 未定义指令 6 SWI 7(最低优先级) 优先级降低
104
2.6 异常 异常优先级 注意: 未定义的指令和SWI异常互斥。因为同一条指令不能既是未定义的,又能产生有效的软件中断;
当FIQ使能,并且FIQ和数据中止异常同时发生时,ARM7TDMI内核首先进入数据中止处理程序,然后立即跳转到FIQ向量。在FIQ处理结束后返回到数据中止处理程序。数据中止的优先级必须高于FIQ以确保数据转移错误不会被漏过。
105
ARM处理器体系结构小结: 1、数据类型:字节 半字 字 2、微处理器的工作状态:ARM THUMB
1、数据类型:字节 半字 字 2、微处理器的工作状态:ARM THUMB 3、体系结构的存储器格式:32GB 大/小端模式 4、处理器模式:USR SVC FIQ IRQ ABT SYS UND 5、寄存器组织:ARM--R0~R15 CPSR SPSR; THUMB—R0~R7,SP,LR,PC,CPSR 6、异常 种类---RESET UND SWI ABT(取指) IRQ FIQ ABT(数据); 向量地址:0X00 0X04 0X08 …0X1C; 向量优先级:RESET ABT(数据) FIQ IRQ ABT(取指) UND SWI
106
小结 对于ARM微处理器的体系结构,寄存器的组织,处理器的工作状态,运行模式以及处理器异常等内容进行介绍;
首先对ARM微处理器,ARM技术的基本概念进行了简介; 对于ARM微处理器的体系结构,寄存器的组织,处理器的工作状态,运行模式以及处理器异常等内容进行介绍; 最后,系统地介绍了ARM指令集中的基本指令,以及各指令的应用场合及方法;
Similar presentations