1、 ARM 状态:32 位,字对齐ARM 指令 THUMB 状态:16 位,半字对齐的THUMB 指令 Jazelle 状态:可变长度,字节对齐的Jazelle 指令在Jazelle 状态,按字(words)取所有的指令。11.3.2 状态切换ARM9EJ-S 核的操作状态在以下状态间切换: 用BX 和BLX 指令切换ARM 状态和THUMB 状态,并加载到PC 用BXJ 指令切换ARM 状态和Jazelle 状态所有的异常都在ARM 状态下进入,处理和退出。如果一个异常发生在Thumb状态或Jazelle 状态,处理器还原到ARM 状态。从异常模式处理程序退出时自动切换回Thumb 或Jaze
2、lle 状态。11.3.3 指令流水线ARM9EJ-S核有两种流水线用来提高处理器指令节的速度。一个五级(五个时钟周期)流水线被用于ARM 和Thumb 状态。由取指,译码,执行,存储和回写阶段组成。一个六级(六个时钟周期)流水线被用于Jazelle 状态。由取指,Jazelle/译码(两时钟周期),执行,存储和回写阶段。11.3.4 存储器访问ARM9EJ-S 核支持字节(8 位),半字(16 位)和字(32 位)访问。字必须对齐到四字节边界,半字必须对齐到两字节边界而字节可以被放置在任何字节边界。因为流水线的性质,一个当前操作需要的值在被放置到寄存器前可能被一个先前的指令操作(使得当前流水
3、线预取的值失效,译者注)。ARM9EJ-S 的控制逻辑自动检测这些情况并停止内核或先前传输的数据。11.3.5 Jazelle 技术在ARM 处理器上,Jazelle 技术直接且有效的执行Java 字节代码,为下一代Java 无线应用和嵌入式设备提供高性能。ARM9EJ-S 新的Java 特性可以被描述为JVM(Java 虚拟机)的一个硬件模拟。Java 模式将表现为另外一种状态:取代执行ARM 或Thumb 指令,而执行Java字节代码。实现于ARM9EJ-S 上Java 字节代码解码器逻辑实现了95%可执行字节代码的解码,并且在无任何额外开销的情况下把它们转换为ARM 指令,同时,较小频率
4、使用的字节解码被分解成顺序优化的ARM 指令。硬件/软件拆分对编程者,应用程序,以及操作系统都是不可见的。所有现存的ARM 寄存器在Jazelle 状态被重复使用,并且在此模式下所有的寄存器都有特殊的功能。最小的中断延迟被维护于ARM 状态和Java 状态切换。所以字节代码执行可以被重新开启,以方便中断处理程序执行,一个中断自动触发其内核从Java状态到ARM 状态改变。这意味着当执行字节代码时没有特殊的为控制中断而准备的规定,无论是硬件还是软件。11.3.6 AEM9EJ-S 操作模式 在所有的状态下,有七种操作模式: 用户模式是一般的ARM 程序执行状态。被用于执行大多数应用程序 快速中断
5、(FIQ)模式被用于控制快速中断。适用于高速数据传输或通道进程 中断(IRQ)模式被用于一般目的中断的处理 管理模式是一种操作系统的保护模式 中止(abort)模式在一个数据或指令预取中止后进入 系统模式是一个操作系统的特权用户模式 未定义模式当一个未定义指令异常发生后进入模式转换可在软件控制下发生,或可能被外部中断或异常处理所引发。大多数的应用程序执行是在用户模式下进行的。非用户模式,又称特权模式,用于处理中断或异常,以及访问被保护的资源。11.3.7 AEM9EJ-S 寄存器AEM9EJ-S 内核共有37 个寄存器 31 个通用的32 位寄存器 6 个32 位的状态寄存器表11-1 显示了
6、所有模式下所有寄存器表 11-1. ARM9TDMI 模式和寄存器配置用户模式和系统模式管理模式中止模式未定义模式中断模式快速中断模式R0R1R2R3R4R5R6R7R8R8_FIQR9R9_FIQR10R10_FIQR11R11_FIQR12R12_FIQ表 11-1. ARM9TDMI 模式和寄存器配置(续)R13R13_SVCR13_ABORTR13_UNDEFR13_IRQR13_FIQR14R14_SVCR14_ABORTR14_UNDEFR14_IRQR14_FIQPCCPSRSPSR_SVCSPSR_ABORTSPSR_UNDEFSPSR_IRQSPSR_FIQ表中阴影部分为:特
7、定模式下的备份寄存器ARM状态寄存器集包括16 个直接存取寄存器,r0 到r15,和一个附加寄存器:当前程序状态寄存器(CPSR)。寄存器r0 到r13 是用于保存数据或地址值的通用寄存器。寄存器r14被用作一个连接寄存器(Link Register),当BL 或BLX 被执行的时候,用来保存r15 的值(返回地址)。寄存器r15 被用作程序计数器(PC),当前程序状态寄存器(CPSR)包含条件代码标志位和当前模式位。在特权模式(FIQ,管理模式,中止模式,IRQ,未定义模式),特定模式备份寄存器(FIQ模式的r8 到r14 或其他模式的r13 到r14)可用。当中断或异常发生,或当BL 或B
8、LX 指令在中断或异常例程的情况被执行,对应的备份寄存器r14_FIQ,r14_SVC,r14_ABT,r14_IRQ,r14_UND 相似的被用于保存r15(PC)的值(为每个模式的返回地址)。还有另外的一个叫保存程序状态寄存器(SPSR)的寄存器,在特权模式下代替CPSR 变成可用。此寄存器保存进入到当前模式(特权模式)之前模式的代码标志位及当前模式位。出于软件一致性,在所有的模式下,r13 被用作堆栈指针。所有的上面描述的寄存器的功能和用途都应该服从ARM Procedure Call Standard(APCS),包括: 寄存器用途的约束 堆栈约定 参数传递并返回结果的约定Thumb
9、状态寄存器集是一个ARM 状态集的一个子集。编程者可直接访问: 八个通用寄存器R0-R7 堆栈指针,SP 连接寄存器,LR(ARM R14) PC CPSR 每个特权模式都有备份寄存器SPs,LRs 和SPSRs(更多的细节见ARM9EJ-S 技术参考手册,ref.DDI0222B,revision r1p2)。11.3.7.1 状态寄存器ARM9EJ-S 内核包括一个CPSR,和五个异常模式处理程序使用的SPSRs。程序状态寄存器包括: 保存最近ALU 操作运行的信息 使能和禁用中断 设置处理器操作模式图11-2 状态寄存器格式图11-2 展示了状态寄存器格式: 四个ALU 标志位,N:Ne
10、gative(负),Z:Zero(零),C:Carry(进位),V:Overflow(溢出) 黏着(sticky)溢出标志位(Q)可以被特定的乘法和小数运算指令像QADD,QDADD,QSUB,QDSUB,SMLAxy,以及AMLAWy 置位,完成需要的DSP 操作。Q 标志位是黏着的,意味着当其被一指令置位后,此标志位将一直保持置位,除非通过一个MSR 指令写CPSR 明确地清零。指令并不能依Q 标志位的状态按条件执行。 CPSR 中的J 位表示ARM9EJ-S 内核在Jazelle 状态:- J=0:处理器在ARM 或Thumb 状态,取决于T 位- J=1:处理器在Jazelle 状态
11、模式:五位编码用于确定当前处理器模式11.3.7.2 异常异常类型和优先级ARM9EJ-S支持五种异常。每种类型在一个特权模式下驱动ARM9EJ-S。异常的类型有: 快速中断(FIQ) 一般中断(IRQ) 数据和预取指中止(Abort) 未定义指令(未定义) 软件中断和复位(管理模式)当一个异常发生,R14 的备份寄存器软中断和管理模式与异常模式下的SPSR 用来保存状态。在同一时间可以发生多于一个的异常。因此ARM9EJ-S 根据以下的优先级运行引发的异常: 复位(最高优先级) 数据中止 FIQ IRQ 预取指中止 BKPT,未定义的指令,和软件中断(SWI)(最低优先级)BKPT,或未定义
12、指令,和SWI 异常是互斥的。在优先级序列中有一个例外,当FIQ 使能,并且发生数据中止异常时一个FIQ 也同时发生,ARM9EJ-S 内核进入数据中止(Data Aborts)处理程序,然后立即进入FIQ 向量。一个FIQ 的一般中断返回导致(先前的)数据中断(Data Aborts)处理继续执行。数据中断(Data Aborts)必须是比FIQ 有较高优先级以确保传输错误不会漏过检测。异常模式和控制无论何时,当异常发生,一个程序的正常流程必须暂时停止,例如,处理一个外设中断。当处理一个ARM 的异常时,ARM9EJ-S 内核执行以下操作:1. 保存下一条指令的地址到进入的新模式所对应的Link 寄存器当异常从以下状态进入:- ARM 和Jazelle 状态,ARM9EJ-S 把下一个指令的地址复制到LR(根据异常,当前PC(r15)+4 或PC+8) - THUMB 状态,ARM9EJ-S 写PC 的值到LR,偏移一个值(根据异常,当前PC+2,PC+4 或PC+8),使得程序能从正确地址返回重开
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1