微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM微处理器的编程模型之:ARM寄存器组织

ARM微处理器的编程模型之:ARM寄存器组织

时间:09-13 来源:互联网 点击:

在操作数中包含移位操作的运算指令(非加/减法指令),C被设置成被移位寄存器最后移出去的位。

④ 对于其他非加/减法运算指令,C的值通常不受影响。

· V

下面分两种情况讨论V的设置方法。

① 对于加/减运算指令,当操作数和运算结果都是以二进制的补码表示的带符号的数时,V=1表示符号位溢出。

② 对于非加/减法指令,通常不改变标志位V的值(具体可参照ARM指令手册)。

尽管以上C和V的定义看起来颇为复杂,但使用时在大多数情况下用一个简单的条件测试指令即可,不需要程序员计算出条件码的精确值即可得到需要的结果。

注意

下面两种情况会对CPSR的条件标志位产生影响。

1.比较指令(CMN、CMP、TEQ、TST)。

2.目的寄存器不是r15的算术逻辑运算和数据传输指令。这些指令可以通过在指令末尾加标志“S”来通知处理器指令的执行结果影响标志位。

使用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将被忽略。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top