Download presentation
Presentation is loading. Please wait.
1
第3章 ARM7体系结构
2
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态 6.处理器模式 7.内部寄存器 8. 程序状态寄存器 9.异常 10.中断延迟 11.复位 12.存储器及存储器映射I/O 13.寻址方式简介 14.ARM7指令简介 15.协处理器接口 16.调试接口简介 17.ETM接口简介
3
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态 6.处理器模式 7.内部寄存器 8. 程序状态寄存器 9.异常 10.中断延迟 11.复位 12.存储器及存储器映射I/O 13.寻址方式简介 14.ARM7指令简介 15.协处理器接口 16.调试接口简介 17.ETM接口简介
4
3.1 ARM简介 ARM公司简介 ARM是Advanced RISC Machines的缩写,它是一家微处理器行业的知名企业,该企业设计了大量高性能、廉价、耗能低的RISC (精简指令集)处理器。 公司的特点是只设计芯片,而不生产。它将技术授权给世界上许多著名的半导体、软件和OEM厂商,并提供服务。
5
3.1 ARM简介 ARM公司简介 将技术授权给其它芯片厂商 . . . 形成各具特色的ARM芯片
6
3.1 ARM简介 ARM体系结构 ARM处理器为RISC芯片,其简单的结构使ARM内核非常小,这使得器件的功耗也非常低。它具有经典RISC的特点: 大的、统一的寄存器文件; 装载/保存结构,数据处理 操作只针对寄存器的内容,而不直接对存储器进行操作; 简单的寻址模式; 统一和固定长度的指令域,简化了指令的译码。
7
3.1 ARM简介 ARM体系结构 ARM体系结构的特点: 每条数据处理指令都对算术逻辑单元和移位器控制,以实现ALU和移位器的最大利用;
地址自动增加和减少寻址模式,优化程序循环; 多寄存器装载和存储指令实现最大数据吞吐量; 所有指令的条件执行实现最快速的代码执行。
8
3.1 ARM简介 各ARM体系结构版本 ARM体系结构从最初开发到现在有了巨大的改进,并仍在完善和发展。为了清楚的表达每个ARM应用实例所使用的指令集,ARM公司定义了5种主要的ARM指令集体系结构版本,以版本号V1~V5表示。
9
3.1 ARM简介 各ARM体系结构版本——V1 该版本的ARM体系结构,只有26位的寻址空间,没有商业化,其特点为:
基本的数据处理指令(不包括乘法); 字节、字和半字加载/存储指令; 具有分支指令,包括在子程序调用中使用的分支和链接指令; 在操作系统调用中使用的软件中断指令。
10
3.1 ARM简介 各ARM体系结构版本——V2 同样为26位寻址空间,现在已经废弃不再使用,它相对V1版本有以下改进:
具有乘法和乘加指令; 支持协处理器; 快速中断模式中的两个以上的分组寄存器; 具有原子性加载/存储指令SWP和SWPB。
11
3.1 ARM简介 各ARM体系结构版本——V3 寻址范围扩展到32位(事实上也基本废弃),具有独立的程序: 具有乘法和乘加指令;
支持协处理器; 快速中断模式中具有的两个以上的分组寄存器; 具有原子性加载/存储指令SWP和SWPB。
12
3.1 ARM简介 各ARM体系结构版本——V4 不在为了与以前的版本兼容而支持26位体系结构,并明确了哪些指令会引起未定义指令异常发生,它相对V3版本作了以下的改进: 半字加载/存储指令; 字节和半字的加载和符号扩展指令; 具有可以转换到Thumb状态的指令; 用户模式寄存器的新的特权处理器模式。
13
3.1 ARM简介 各ARM体系结构版本——V5 在V4版本的基础上,对现在指令的定义进行了必要的修正,对V4版本的体系结构进行了扩展并增加了指令,具体如下: 改进了ARM/Thumb状态之间的切换效率; 允许非T变量和T变量一样,使用相同的代码生成技术; 增加计数前导零指令和软件断点指令; 对乘法指令如何设置标志作了严格的定义。
14
3.1 ARM简介 ARM处理器核简介 ARM公司开发了很多系列的ARM处理器核,目前最新的系列已经是ARM11了,而ARM6核以及更早的系列已经很罕见了。目前应用比较广泛的系列是: ARM7 ARM9 ARM9E ARM10 SecurCore Xscale
15
3.1 ARM简介 ARM处理器核简介——ARM7 该系列包括ARM7TDMI、ARM7TDMI-S、带有高速缓存处理器宏单元的ARM720T和扩充了Jazelle的ARM7EJ-S。该系列处理器提供Thumb 16位压缩指令集和EmbededICE软件调试方式,适用于更大规模的SoC设计中。 ARM7系列广泛应用于多媒体和嵌入式设备,包括Internet设备、网络和调制解调器设备,以及移动电话、PDA等无线设备。
16
3.1 ARM简介 ARM处理器核简介——ARM9 该系列包括ARM9TDMI、ARM920T和带有告诉缓存处理器宏单元的ARM940T。除了兼容ARM7系列,而且能够更加灵活的设计。 ARM9系列主要应用于引擎管理、仪器仪表、安全系统和机顶盒等领域。
17
3.1 ARM简介 ARM处理器核简介——ARM10 该系列包括ARM1020E和ARM1020E处理器?核,其核心在于使用向量浮点(VFP)单元VFP10提供高性能的浮点解决方案,从而极大提高了处理器的整型和浮点运算性能。 可以用于视频游戏机和高性能打印机等场合。
18
3.1 ARM简介 ARM处理器核简介——SecurCore
该系列涵盖了SC100、SC110、SC200和SC210处理核。该系列处理器主要针对新兴的安全市场,以一种全新的安全处理器设计为智能卡和其它安全IC开发提供独特的32位系统设计,并具有特定反伪造方法,从而有助于防止对硬件和软件的盗版。
19
3.1 ARM简介 ARM处理器核简介——Xscale
Intel Xscale微控制器则提供全性能、高性价比、低功耗的解决方案,支持16位Thumb指令并集成数字信号处理(DSP)指令。
20
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态 6.处理器模式 7.内部寄存器 8. 程序状态寄存器 9.异常 10.中断延迟 11.复位 12.存储器及存储器映射I/O 13.寻址方式简介 14.ARM7指令简介 15.协处理器接口 16.调试接口简介 17.ETM接口简介
21
3.2 ARM7TDMI 简介 ARM7TDMI基于ARM体系结构V4版本,是目前低端的ARM核。具有广泛的应用,其最显著的应用为数字移动电话。 注意:“ARM核”并不是芯片,ARM核与其它部件如RAM、ROM、片内外设组合在一起才能构成现实的芯片。
22
3.2 ARM7TDMI 简介 ARM7TDMI支持32位寻址范围,并弥补了ARM6不能在低于5V电源电压下工作的不足。ARM7TDMI的后缀意义为: ARM7 T D M I - S ARM7TDMI 的可综合(synthesizable)版本(软核),对应用工程师来说其编程模型与ARM7TDMI 一致; 片上调试与EMBEDDEDICE的区别 支持EmbededICE观察硬件; 支持64位乘法; 支持片上调试; 支持高密度16位的Thumb指令集;
23
3.2 ARM7TDMI 简介 ARM7TDMI处理器是ARM通用32位微处理器家族的成员之一。它具有优异的性能,但功耗却很低,使用门的数量也很少。它属于精简指令集计算机(RISC),比复杂指令集计算机(CISC)要简单得多。这样的简化实现了: 高的指令吞吐量; 出色的实时中断响应; 小的、高性价比的处理器宏单元。
24
3.2 ARM7TDMI 三级流水线 ARM7TDMI处理器使用流水线来增加处理器指令流的速度。这样可使几个操作同时进行,并使处理和存储器系统连续操作,能提供0.9MIPS/MHz的指令执行速度。 ARM7TDMI的流水线分3级,分别为: 取指译码执行
25
3.2 ARM7TDMI 三级流水线 正常操作过程中,在执行一条指令的同时对下一条指令进行译码,并将第三条指令从存储器中取出。这三条指令之间的位置关系如下表所示: 流水线上各指令的地址 流水线工位 描述 ARM指令集 Thumb指令集 PC 取指 指令从存储器中取出 PC-4 PC-2 译码 对指令使用的寄存器进行译码 PC-8 执行 从寄存器组中读出寄存器,执行移位和ALU操作,寄存器被写回到寄存器组中
26
3.2 ARM7TDMI 存储器访问 ARM7TDMI处理器使用了冯·诺依曼(Von Neumann)结构,指令和数据共用一条32位总线。只有装载、存储和交换指令可以对存储器中的数据进行访问。 数据可以是字节( 8位)、半字( 16位)或者字(32位)。
27
3.2 ARM7TDMI 存储器访问 计算机结构说明:
“冯·诺依曼” 结构:把代码作为一种特殊的数据来操作,指令总线和数据总线及其存储区域是统一的; “哈佛”结构:指令总线和数据总线及其存储区是分开、独立的。
28
3.2 ARM7TDMI 存储器访问 ARM7TDMI处理器的存储器接口可以使潜在的性能得以实现,这样减少了存储器的使用。对速度有严格要求的控制信号使用流水线,这样使系统控制功能以标准的低功耗逻辑实现。ARM7TDMI处理器的存储器周期有4个基本类型: 内部周期; 非连续的周期; 连续 的周期; 协处理器寄存器的传输周期。
29
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态 6.处理器模式 7.内部寄存器 8. 程序状态寄存器 9.异常 10.中断延迟 11.复位 12.存储器及存储器映射I/O 13.寻址方式简介 14.ARM7指令简介 15.协处理器接口 16.调试接口简介 17.ETM接口简介
30
3.3 ARM7TDMI的模块和内核框图 ARM7TDMI模块
31
3.3 ARM7TDMI的模块和内核框图 ARM7TDMI模块 指令译码 和 控制逻辑 CLK CLEN ADDR[31:0]
CFGBIGEND nIRQ 扫描调试 控制 地址寄存器 nFIQ nRESET ABORT 地址增加器 LOCK WRITE SIZE[1:0] 寄存器组 31*32位寄存器 (6个状态寄存器) PROT[1:0] TRANS[1:0] DBG输出 DBG输入 乘法器 CP控制 CP握手 桶形移位器 写数据寄存器 指令管线读数据寄存器 Thumb指令译码器 32位ALU WDATA[31:0] RDATA[31:0] ARM7TDMI模块
32
3.3 ARM7TDMI的模块和内核框图 ARM7TDMI模块
33
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态 6.处理器模式 7.内部寄存器 8. 程序状态寄存器 9.异常 10.中断延迟 11.复位 12.存储器及存储器映射I/O 13.寻址方式简介 14.ARM7指令简介 15.协处理器接口 16.调试接口简介 17.ETM接口简介
34
3.4 体系结构直接支持的数据类型 体系结构直接支持的数据类型 ARM处理器支持下列数据类型: 字节 8位
3.4 体系结构直接支持的数据类型 体系结构直接支持的数据类型 ARM处理器支持下列数据类型: 字节 8位 半字 16位(必须分配为占用两个字节) 字 为(必须分配为占用4各字节) 1 2 3 4
35
3.4 体系结构直接支持的数据类型 体系结构直接支持的数据类型 注意:
3.4 体系结构直接支持的数据类型 体系结构直接支持的数据类型 注意: V4版本之后的ARM结构都支持这3种结构(包括V4版本),而以前的版本只支持字节和字; 当数据类型定义为无符号型时,N位数据值使用正常的二进制格式表示范围为0~2N-1的非负整数; 当数据类型定义为有符号型时,N位数据值使用2的补码格式表示范围为-2N-1~+2N-1-1的整数;
36
3.4 体系结构直接支持的数据类型 体系结构直接支持的数据类型 注意: 所有数据操作,例如ADD,都以字为单位;
3.4 体系结构直接支持的数据类型 体系结构直接支持的数据类型 注意: 所有数据操作,例如ADD,都以字为单位; 装载和保存指令可以对字节、半字和字进行操作,当装载字节或半字时自动实现零扩展或符号扩展; ARM指令的长度刚好是1个字(分配为占用4个字节),Thumb指令的长度刚好是半字(占用2个字节)。
37
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态 6.处理器模式 7.内部寄存器 8. 程序状态寄存器 9.异常 10.中断延迟 11.复位 12.存储器及存储器映射I/O 13.寻址方式简介 14.ARM7指令简介 15.协处理器接口 16.调试接口简介 17.ETM接口简介
38
3.5 处理器状态 处理器状态 ARM7TDMI处理器内核使用V4T版本的ARM结构,该结构包含32位ARM指令集和16位Thumb指令集。因此ARM7TDMI处理器有两种操作状态: ARM状态:32位,这种状态下执行的是字方式的ARM指令; Thumb状态:16位,这种状态下执行半字方式的Thumb指令。 注意:两个状态之间的切换并不影响处理器模式或寄存器内容。
39
3.5 处理器状态 处理器状态 使用BX指令将ARM7TDMI内核的操作状态在ARM状态和Thumb状态之间进行切换(详见第4章) ,程序如下所示。 跳转地址标号 ;从Arm状态切换到Thumb状态 LDR R0,=Lable+1 BX R0 ;从Thumb状态切换到ARM状态 LDR R0,=Lable 地址最低位为1,表示切换到Thumb状态 地址最低位为0,表示切换到ARM状态
40
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态 6.处理器模式 7.内部寄存器 8. 程序状态寄存器 9.异常 10.中断延迟 11.复位 12.存储器及存储器映射I/O 13.寻址方式简介 14.ARM7指令简介 15.协处理器接口 16.调试接口简介 17.ETM接口简介
41
3.6 处理器模式 简介 ARM体系结构支持7种处理器模式,分别为:用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式,如下表所示。这样的好处是可以更好的支持操作系统并提高工作效率。ARM7TDMI完全支持这七种模式。
42
3.6 处理器模式 处理器模式 处理器模式 说明 备注 用户 (usr) 正常程序工作模式 不能直接切换到其它模式 系统 (sys)
3.6 处理器模式 处理器模式 处理器模式 说明 备注 用户 (usr) 正常程序工作模式 不能直接切换到其它模式 系统 (sys) 用于支持操作系统的特权任务等 与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq) 支持高速数据传输及通道处理 FIQ异常响应时进入此模式 中断 (irq) 用于通用中断处理 IRQ异常响应时进入此模式 管理 (svc) 操作系统保护代码 系统复位和软件中断响应时进入此模式 中止 (abt) 用于支持虚拟内存和/或存储器保护 在ARM7TDMI没有大用处 未定义 (und) 支持硬件协处理器的软件仿真 未定义指令异常响应时进入此模式
43
3.6 处理器模式 特权模式 处理器模式 说明 备注 用户 (usr) 正常程序工作模式 不能直接切换到其它模式 系统 (sys) 用于支持操作系统的特权任务等 与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq) 支持高速数据传输及通道处理 FIQ异常响应时进入此模式 中断 (irq) 用于通用中断处理 IRQ异常响应时进入此模式 管理 (svc) 操作系统保护代码 系统复位和软件中断响应时进入此模式 中止 (abt) 用于支持虚拟内存和/或存储器保护 在ARM7TDMI没有大用处 未定义 (und) 支持硬件协处理器的软件仿真 未定义指令异常响应时进入此模式 未定义 (und) 中止 (abt) 管理 (svc) 中断 (irq) 快中断 (fiq) 系统 (sys) 除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。
44
3.6 处理器模式 异常模式 处理器模式 说明 备注 用户 (usr) 正常程序工作模式 不能直接切换到其它模式 系统 (sys) 用于支持操作系统的特权任务等 与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq) 支持高速数据传输及通道处理 FIQ异常响应时进入此模式 中断 (irq) 用于通用中断处理 IRQ异常响应时进入此模式 管理 (svc) 操作系统保护代码 系统复位和软件中断响应时进入此模式 中止 (abt) 用于支持虚拟内存和/或存储器保护 在ARM7TDMI没有大用处 未定义 (und) 支持硬件协处理器的软件仿真 未定义指令异常响应时进入此模式 这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。 未定义 (und) 中止 (abt) 管理 (svc) 中断 (irq) 快中断 (fiq)
45
3.6 处理器模式 用户和系统模式 这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。
3.6 处理器模式 用户和系统模式 处理器模式 说明 备注 用户 (usr) 正常程序工作模式 不能直接切换到其它模式 系统 (sys) 用于支持操作系统的特权任务等 与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq) 支持高速数据传输及通道处理 FIQ异常响应时进入此模式 中断 (irq) 用于通用中断处理 IRQ异常响应时进入此模式 管理 (svc) 操作系统保护代码 系统复位和软件中断响应时进入此模式 中止 (abt) 用于支持虚拟内存和/或存储器保护 在ARM7TDMI没有大用处 未定义 (und) 支持硬件协处理器的软件仿真 未定义指令异常响应时进入此模式 系统 (sys) 用户 (usr) 这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。 系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。
46
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态 6.处理器模式 7.内部寄存器 8. 程序状态寄存器 9.异常 10.中断延迟 11.复位 12.存储器及存储器映射I/O 13.寻址方式简介 14.ARM7指令简介 15.协处理器接口 16.调试接口简介 17.ETM接口简介
47
3.7 内部寄存器 简介 在ARM7TDMI处理器内部有37个用户可见的寄存器。
3.7 内部寄存器 简介 在ARM7TDMI处理器内部有37个用户可见的寄存器。 在不同的工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同。
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_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 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_abt 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_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_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_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_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_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_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_abt SPSR_und SPSR_irq SPSR_fiq R14为链接寄存器(LR),在结构上有两个特殊功能: 在每种模式下,模式自身的R14版本用于保存子程序返回地址; 当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。
58
3.7 内部寄存器 R14寄存器与子程序调用 操作流程 1.程序A执行过程中调用程序B;
3.7 内部寄存器 R14寄存器与子程序调用 操作流程 Lable 程序A 程序B R14 1.程序A执行过程中调用程序B; Lable ??? 2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14; BL Lable 地址A ??? Mov pc,LR? MOV PC,LR R14(地址A) 3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;
59
3.7 内部寄存器 R14寄存器与异常发生 异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。
60
3.7 内部寄存器 R14寄存器注意要点 当发生异常嵌套时,这些异常之间可能会发生冲突。
3.7 内部寄存器 R14寄存器注意要点 当发生异常嵌套时,这些异常之间可能会发生冲突。 例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。
61
3.7 内部寄存器 R14寄存器注意要点 R14 R14_irq 用户模式下的程序 IRQ模式下的程序A 2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏; 3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序; 1.执行用户模式下的程序; a B ... X A 地址A 为什么要减去,是不是由于中断时,流水到哪一步不知道? return 地址A 未被破坏
62
3.7 内部寄存器 R14寄存器注意要点 R14 R14_irq 用户模式下的程序 IRQ模式下的程序A IRQ模式下的程序B 3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序; 2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏; 5. 硬件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误; 6. 在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回; 解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。 4. 如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断,或者调用子程序; 1.执行用户模式下的程序; a a B ... X A 地址A B ... X A 地址B 中断嵌套时的,多个地址点入栈工作,在51单片机中,是自动实现的。但是在ARM中的手动来做 return return return 地址B 地址A 未被破坏 被破坏
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
3.7 内部寄存器 读R15的限制 正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。 LDR R0,PC ??? PC PC-4 PC-8 正在执行 正在译码 正在取指 流水线状态 地址 程序代码
65
3.7 内部寄存器 读R15的限制 当使用STR或STM指令保存R15时,会有一个例外。这些指令可能将当前指令地址加8字节或加12字节保存(将来可能还有其它数字)。偏移量是8还是12取决于具体的ARM芯片,但是对于一个确定的芯片,这个值是一个常量。 所以最好避免使用STR和STM指令来保存R15,如果很难做到,那么应当在程序中计算出该芯片的偏移量。
66
3.7 内部寄存器 读R15的限制 计算偏移量程序代码: SUB R1,PC,#4 ;R1=下面STR指令的地址
3.7 内部寄存器 读R15的限制 计算偏移量程序代码: SUB R1,PC,#4 ;R1=下面STR指令的地址 STR PC,[R0] ;保存STR指令地址+偏移量 LDR R0,[R0] ;然后重装 SUB R0,R0,R1 ;计算偏移量
67
3.7 内部寄存器 写R15的限制 正常操作时,写入R15 的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。
68
3.7 内部寄存器 写R15的限制 由于ARM指令以字节为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:
3.7 内部寄存器 写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。详细描述参看3.8小节。
70
3.7 内部寄存器 Thumb状态寄存器 Thumb状态寄存器集是ARM状态集的子集,程序员可以直接访问的寄存器为:
3.7 内部寄存器 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) 通用寄存器和程序计数器 快中断 中断 未定义 中止 管理 系统 用户 各模式下实际访问的寄存器 寄存器在汇编中的名称 寄存器类别 堆栈指针SP对应ARM状态的寄存器R13。每个异常模式都有其自身的SP分组版本,SP通常指向各异常模式所专用的堆栈。 注意:在发生异常时,处理器自动进入ARM状态。 R13_fiq R13_irq R13_und R13_abt R13_svc R13
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
3.7 内部寄存器 ARM状态和Thumb状态之间寄存器的关系 Thumb状态寄存器与ARM状态寄存器有如下的关系:
3.7 内部寄存器 ARM状态和Thumb状态之间寄存器的关系 Thumb状态寄存器与ARM状态寄存器有如下的关系: 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
3.7 内部寄存器 在Thumb状态中访问高寄存器
3.7 内部寄存器 在Thumb状态中访问高寄存器 在Thumb状态中,高寄存器(R8~R15)不是标准寄存器集的一部分。汇编语言程序员对它们的访问受到限制,但可以将它们用于快速暂存。 可以使用MOV、CMP和ADD指令对高寄存器操作,详见第4章。
78
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态 6.处理器模式 7.内部寄存器 8. 程序状态寄存器 9.异常 10.中断延迟 11.复位 12.存储器及存储器映射I/O 13.寻址方式简介 14.ARM7指令简介 15.协处理器接口 16.调试接口简介 17.ETM接口简介
79
3.8 程序状态寄存器 简介 ARM7TDMI内核包含1个CPSR和5个供异常处理程序使用的SPSR。CPSR反映了当前处理器的状态,其包含: 4个条件代码标志(负(N)、零(Z)、进位(C)和溢出(V) ); 2个中断禁止位,分别控制一种类型的中断; 5个对当前处理器模式进行编码的位; 1个用于指示当前执行指令(ARM还是Thumb)的位。
80
3.8 程序状态寄存器 简介 CPSR寄存器的格式 条件代码标志 保留 控制位 N Z C V — I M0 M1 M2 M3 M4 T F
3.8 程序状态寄存器 简介 CPSR寄存器的格式 条件代码标志 保留 控制位 N Z C V — I M0 M1 M2 M3 M4 T F . . . N Z C V I F T M0 M1 M2 M3 M4 溢出标志 进位或借位扩展 模式位 状态位 零 FIQ禁止 负或小于 IRQ禁止
81
3.8 程序状态寄存器 简介 每个异常模式还带有一个程序状态保存寄存器 (SPSR),它用于保存在异常事件发生之前的CPSR。CPSR和SPSR通过特殊指令进行访问。详细信息请参阅第4章 。 注意:如果通过程序修改CPSR寄存器中的模式位进入异常模式,那么硬件将不会把CPSR保存至SPSR中。
82
3.8 程序状态寄存器 条件代码标志 大多数“数值处理指令”可以选择是否影响条件代码标志位。通常如果指令带S后缀,则该指令的执行会影响条件代码标志;但有一些指令的执行总是会影响条件代码标志。 N、 Z、 C和V位都是条件代码标志。通过算术操作、逻辑操作、MSR或者LDM指令可以对这些位进行设置。所有ARM指令都可按条件来执行,而Thumb指令中只有分支指令可按条件执行。
83
3.8 程序状态寄存器 条件代码标志 各标志位的含义如下:
3.8 程序状态寄存器 条件代码标志 各标志位的含义如下: N 运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0; Z 指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0;
84
3.8 程序状态寄存器 条件代码标志 各标志位的含义如下:
3.8 程序状态寄存器 条件代码标志 各标志位的含义如下: C 当进行加法运算(包括CMN指令),并且最高位产生进位时C=1,否则C=0。当进行减法运算(包括CMP 指令),并且最高位产生借位时C=0,否则C=1。对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值,其它指令C通常不变; V当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。
85
3.8 程序状态寄存器 控制位 CPSR的最低8位为控制位,当发生异常时,这些位被硬件改变。当处理器处于一个特权模式时,可用软件操作这些位。
3.8 程序状态寄存器 控制位 CPSR的最低8位为控制位,当发生异常时,这些位被硬件改变。当处理器处于一个特权模式时,可用软件操作这些位。 它们分别是: 中断禁止位; T位; 模式位。
86
3.8 程序状态寄存器 控制位 中断禁止位包括I和F位: 当I位置位时,IRQ中断被禁止; 当F位置位时,FIQ中断被禁止。
3.8 程序状态寄存器 控制位 中断禁止位包括I和F位: 当I位置位时,IRQ中断被禁止; 当F位置位时,FIQ中断被禁止。 T位反映了正在操作的状态: 当T位置位时,处理器正在Thumb状态下运行; 当T位清零时,处理器正在ARM状态下运行。
87
3.8 程序状态寄存器 控制位 模式位包括M4、M3、M2、M1和M0,这些位决定处理器的操作模式。
3.8 程序状态寄存器 控制位 模式位包括M4、M3、M2、M1和M0,这些位决定处理器的操作模式。 注意:不是所有模式位的组合都定义了有效的处理器模式,如果使用了错误的设置,将引起一个无法恢复的错误。
88
CPSR模式位设置表 M[4:0] 模式 可见的Thumb状态寄存器 可见的ARM状态寄存器 10000 用户
R0~R7,SP,LR,PC,CPSR R0~R14,PC, CPSR 10001 快中断 R0~R7,SP_fiq,LR_fiq,PC,CPSR, SPSR_fiq R0~R7,R8_fiq~R14_fiq,PC, CPSR, SPSR_fiq 10010 中断 R0~R7,SP_irq,LR_irq,PC,CPSR, SPSR_fiq R0~R12,R13_irq,R14_irq,PC, CPSR, SPSR_irq 10011 管理 R0~R7,SP_svc,LR_svc,PC,CPSR, SPSR_svc R0~R12,R13_svc,R14_svc, PC,CPSR, SPSR_svc 10111 中止 R0~R7,SP_abt,LR_abt,PC,CPSR, SPSR_abt R0~R12,R13_abt,R14_abt,PC, CPSR, SPSR_abt 11011 未定义 R0~R7,SP_und,LR_und,PC,CPSR, SPSR_und R0~R12,R13_und,R14_und, PC,CPSR,SPSR_und 11111 系统
89
3.8 程序状态寄存器 保留位 CPSR中的保留位被保留将来使用。为了提高程序的可移植性,当改变CPSR标志和控制位时,请不要改变这些保留位。另外,请确保您程序的运行不受保留位的值影响,因为将来的处理器可能会将这些位设置为1或者0。
Similar presentations