ARM微处理器的编程模型之:ARM寄存器组织
【例3.2】
使用SUBS指令从寄存器r1中减去常量1,然后把结果写回到r1,其中CPSR的Z位将受到影响。
指令执行前:
CPSR中Z=0
r1=0x00000001
SUBS r1,r1,#1
SUB指令执行结束后:
r1=0x0
CPSR中Z=1
目的寄存器是r15的带“位设置”的算术和逻辑运算指令,也可以将SPSR的值复制到CPSR中,这种操作主要用于从异常中断程序中返回。
用MSR指令向CPSR/SPSR写进新值。
目的寄存器位r15的MRC协处理器指令通过这条指令可以将协处理器产生的条件标志位的值传送到ARM处理器。
在中断返回时,使用LDR指令的变种指令可以将SPSR的值复制到CPSR中。
2.Q标志位
在带DSP指令扩展的ARM v5及更高版本中,bit[27]被指定用于指示增强的DAP指令是否发生了溢出,因此也就被称为Q标志位。同样,在SPSR中bit[27]也被称为Q标志位,用于在异常中断发生时保存和恢复CPSR中的Q标志位。
在ARM v5以前的版本及ARM v5的非E系列处理器中,Q标志位没有被定义。属于待扩展的位。
3.控制位
CPSR的低8位(I、F、T及M[4∶0])统称为控制位。当异常发生时,这些位的值将发生相应的变化。另外,如果在特权模式下,也可以通过软件编程来修改这些位的值。
① 中断禁止位
I=1,IRQ被禁止。
F=1,FIQ被禁止。
② 状态控制位
T位是处理器的状态控制位。
T=0,处理器处于ARM状态(即正在执行32位的ARM指令)。
T=1,处理器处于Thumb状态(即正在执行16位的Thumb指令)。
当然,T位只有在T系列的ARM处理器上才有效,在非T系列的ARM版本中,T位将始终为0。
③ 模式控制位
M[4∶0]作为位模式控制位,这些位的组合确定了处理器处于哪种状态。表3.3列出了其具体含义。
只有表中列出的组合是有效的,其他组合无效。
表3.3 状态控制位M[4∶0]
M[4∶0] | 处理器模式 | 可以访问的寄存器 |
0b10000 | User | PC,r14~r0,CPSR |
0b10001 | FIQ | PC,r14_fiq~r8_fiq,r7~r0,CPSR,SPSR_fiq |
0b10010 | IRQ | PC,r14_irq~r13_irq,r12~r0,CPSR,SPSR_irq |
0b10011 | Supervisor | PC,r14_svc~r13_svc,r12~r0,CPSR,SPSR_svc |
0b10111 | Abort | PC,r14_abt~r13_abt,r12~r0,CPSR,SPSR_abt |
0b11011 | Undefined | PC,r14_und~r13_und,r12~r0,CPSR,SPSR_und |
0b11111 | System | PC,r14~r0,CPSR(ARM v4及更高版本) |
注意 | 由于用户模式(User)和系统模式(System)是非异常模式,所以没有单独的SPSR保存程序状态字。在用户模式或系统模式下,读SPSR将返回一个不可预知的值,而写SPSR将被忽略。 |
评论