1.ARM 2种状态 + 7种模式
2种状态:ARM状态 + Thumb状态
ARM状态:32位字对齐的ARM指令;
Thumb:16位半字对齐的Thumb指令。
CPU一上电就进入ARM状态,可以通过BX指令进行状态切换。进入ARM状态,通过BX指令,并将操作数寄存器(R0)状态位(0位)清零。进入Thumb状态,通过BX指令,将操作数寄存器状态位置一。
BX指令:在程序跳转的同时进行状态切换。
在程序发生跳转时流水线会被清空。使用BX进行状态切换后,流水线中按原来处理器状态进行取值和译码的指令(与当前处理器状态不符的指令)会被清除。
7种模式:用户(usr)、系统(sys)、管理(svc)、中断(irq)、快中断(fiq)、数据访问终止(abort)、未定义(undefine).
可以通过软件在7种模式间切换,或者发生各类中断、异常时进入相应的模式。
7种模式 = 1 用户模式+ 6 特权模式;
2.ARM9的寄存器。
7种模式有各自的寄存器副本。共有37个(31个通用的,6个程序状态寄存器)。
(1)ARM状态:
在ARM状态,每个工作模式下都有16个通用寄存器+1个或2个程序状态寄存器
R0到R15可以直接访问。
R13(Stack Pointer Register,栈指针寄存器) R14(subroutine Link Register,程序链接寄存器) R15(Programming Count Reg,程序计数器)
CPSR(Current Program Status Reg,当前程序状态寄存器)
(1)状态码标记位(又叫条件代码标记)
大多数数值处理指令可以选择是否修改状态码标记位。如果指令带S后缀,则指令会修改该标记位。也有一些指令总是改变标记位。
PS:在ARM状态下,所有指令都可以按条件执行。但在Thumb下,只有分支指令可以按条件执行。
(2)控制位
I:中断禁止标志位
F:快中断禁止标志位(这两位被置位时,IRQ,FIQ分别被禁止)
T:处理器状态位(1,CPU处于Thumb,0,CPU处于ARM)
(3) M0-M4:处理器模式位,表明CPU当前处于什么工作模式。可以设置这些位,使CPU进入指定的工作模式。
10000:用户模式
10001:快中断模式
10010:中断模式
10011:管理模式
10111:数据访问中止
11011:未定义指令中止模式
11111:系统模式
SPSR(Saved Process Status Reg).
当切换进入除系统/用户模式外的其余5种模式时,CPSR的值将被保存到SPSR,这五种模式都有独立的SPSR。返回前一个模式时,CPSR值被恢复。
(2)Thumb状态
(3)ARM状态与Thumb状态之间的关系
Thumb与ARM状态的R0-R7相同。
Thumb CPSR 与ARM CPSR也相同。
由于Thumb指令集不包含MSR和MRS指令,如果用户要修改CPSR的任何标志位,必须回到ARM模式。
通过BX指令和BLX指令来改变指令集模式。
当完成复位(Reset)或进入到异常模式时,将会中切换到ARM模式。
阅读(1134) | 评论(0) | 转发(1) |