`
izuoyan
  • 浏览: 9318907 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ARM处理器CPSR标志位和条件符之间的关系

阅读更多

本文目的是要理清ARM处理器的CPSR状态标志和ARM指令的条件符之间的关系。

一、CPSR寄存器

ARM V4的CPSR寄存器(和保存它的SPSR寄存器)中的位分配如下图1所示。

图1 程序状态寄存器格式

状态标志位含义:(其它位的含义和本文主题无关,此处不多介绍)

N
N=1 表示运算的结果为负数;N=0 表示运算的结果为正数或零;
Z
Z=1 表示运算的结果为零;Z=0表示运算的结果为非零;
C
可以有4种方法设置C的值:
─ 加法运算(包括比较指令CMN):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。
─ 减法运算(包括比较指令CMP):当运算时产生了借位,C=0,否则C=1。
─ 对于包含移位操作的非加/减运算指令,C为移出值的最后一位。
─ 对于其他的非加/减运算指令,C的值通常不改变。
V
可以有2种方法设置V的值:
─ 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。
─ 对于其他的非加/减运算指令,V的值通常不改变

二、条件符及对应的标志位

表1 条件符描述表

三、关于C、V值更多的解释

处理器内部以补码表示有符号数,8个二制位能够表达的整数范围是:+127 ~ -128,16位表达的范围是:+32767 ~ -32768。如果运算结果超出了这个范围,就是产生了溢出,有溢出,说明有符号数的运算结果需要考虑溢出情况。

溢出标志V和进位标志C是两个意义不同的标志。进位标志表示无符号数运算结果是否超出范围;溢出标志表示有符号数运算结果是否超出范围。

处理器对两个操作数进行运算时,按照无符号数求得结果,并相应设置进位标志C;同时,根据是否超出有符号数的范围设置溢出标志V。

应该利用哪个标志,则由程序员来决定。也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。

判断运算结果是否溢出有一个简单的规则:只有当两个相同符号数相加,而运算结果的符号与原数据符号相反时,产生溢出;其他情况下,则不会产生溢出。

代码举例1:

LDRr0, =0x7fffffff
LDRr1, =0x70000000;
ADDSr0, r0, r1; //结果=0xefffffff
对于无符号数运算来说,没有进位。
对于有符号数运算来说,溢出。
此时C=0 V=1;

代码举例2:
LDRr0, =0xffffffff
LDRr1, =0x70000000;
ADDSr0, r0, r1; //结果=0x6fffffff
对于无符号数运算来说,有进位。
对于有符号数运算来说,无溢出。
此时C=1 V=0;

代码举例3:
LDRr0, =0x8fffffff
LDRr1, =0xf0000000 ;
ADDSr0, r0, r1; //结果=0x7fffffff
此时C=? V=?;(思考一下,然后在ARM模拟器中验证下)

代码举例4://思考减法时,C值的影响
LDRr0, =0x3
LDRr1, =0x2
SUBSr0, r0, r1
对比:
LDRr0, =0x3
LDRr1, =-2;(-2的补码0xfffffffe会送到r1)
ADDSr0, r0, r1

四、CPSR状态标志和ARM指令的条件符之间的关系

有了上面的背景知识以后,接下来思考表1中CPSR状态标志和ARM指令的条件符之间的关系,下面选取其中的一项来分析。
如:GE:(有符号数大于等于)
N=0 V=0:结果是大于等于0的数,且无符合溢出,所以大于等于关系成立
N=1 V=1:结果小于0,但有符号溢出
考虑以下情况:c=a-b
1.a<0, b<0
减法操作时不可能符号溢出
2.a>0, b<0
可能出现N=V=1?? 如(8位数):100-(-100)=200
显然a>b
3.a<0, b>0
参照上面提到过的判断溢出标志的简单规则,可以得出:在此情况下,
减法操作时如果结果小于0 (N=1),则不会出现符号溢出
所以(在N=1 V=1前提下a<0,b>0)这种情况不可能出现
4.a>0, b>0
减法操作不可能出现符号溢出。

其它项的分析过程类似。

五、总结

尽管以上分析看起来有点复杂,但使用时在大多数情况下用一个简单的条件测试指令即可,不需要程序员计算出条件码的精确值即可得到需要的结果。(作者:刘洪涛,华清远见嵌入式学院讲师。

分享到:
评论

相关推荐

    嵌入式系统/ARM技术中的ARM处理器CPSR标志位和条件符之间的关系

    2. **CPSR标志位与条件符的关系** ARM指令集支持多种条件执行,条件符(如:EQ、NE、LT、GT等)基于CPSR中的标志位来决定指令是否执行。例如: - GE(Greater Than or Equal,大于或等于):当N=0且V=0时,表示...

    ( 关于ARM处理器中“8位位图”的理解分析.pdf )

    ### ARM处理器中“8位位图”的理解和应用 #### 一、引言 在学习ARM处理器的汇编语言时,我们经常会遇到一些特定的规则和约束。这些规则是为了确保指令的有效性和正确性,同时也在一定程度上反映了硬件设计的考虑。...

    arm指令集及CP15协处理器命令

    2. CPSR寄存器:CPSR(Current Program Status Register)是ARM处理器的一个状态寄存器,它存储了当前程序的状态信息,包括标志域、状态域、扩展域和控制域。CPSR寄存器可以通过MSR指令进行读写操作。 3. MSR指令:...

    arm汇编教程(ARM: Assembly language programming)

    - **当前处理器状态寄存器(CPSR)**:包含各种标志位和其他状态信息,用于控制和监控处理器的操作。 **5.3 标志位** ARM体系结构中的标志位(Flag)用于表示处理器的状态信息,例如进位标志(C)、零标志(Z)等。这些...

    ARM指令集和汇编语言程序

    ARM指令的编码格式通常包括指令助记符、条件码、操作是否影响CPSR、目标寄存器、源寄存器和第二个操作数(如果有的话)。第二个操作数可以是立即数或寄存器,并可能涉及移位操作。 在数据处理指令中,第二个操作数...

    (完整版)计算机三级考试嵌入式系统开发技术自己整理.doc

    ARM处理器采用定长指令格式,所有指令为32位,这使得它在性能和效率上具有优势,特别是在32位嵌入式RISC处理器市场中占据了主导地位。ARM处理器的寄存器组织包括31个通用寄存器(包含程序计数器PC)和6个状态寄存器...

    arm汇编(英文版)

    - **条件执行**:允许根据CPSR中的标志位决定是否执行指令。 - **数据处理操作数**:如加法、减法、与、或等操作。 - **内存访问操作数**:用于指定加载或存储数据的位置。 通过上述知识点的介绍,我们了解到ARM...

    arm指令集汇编 ppt 很详细

    - 条件码可以附在指令助记符后面,如EQ(相等)、NE(不相等)等,根据CPSR中的标志位判断条件。 5. **ARM寻址方式** - 立即寻址:操作数直接在指令中给出,如`ADD R0, R0, #1`。 - 寄存器寻址:操作数存储在...

    ARM(2)考试题及答案归纳.pdf

    在ARM处理器中,通过设置CPSR的I位来禁止中断,F位用于禁止快中断。子程序结束时,通常会使用指令如"MOV PC, R14"来恢复程序计数器。在嵌入式系统的存储层次结构中,Cache由于靠近CPU,其存取速度最快。烧录到FLASH...

    汇编指令大全,进行ARM学习必备

    条件执行依赖于程序状态寄存器(CPSR)中的标志位,如N(负数)、Z(零)、C(进位/借位)和V(溢出)。例如,“BEQ”表示“如果Z标志位置位,则跳转”,意味着如果两个数相等,则执行跳转。 #### 条件码 ARM指令...

    ARM指令集--参考文档

    ### ARM指令集详解 #### 一、ARM指令集概述 ARM指令集是为基于ARM架构的微处理器设计的一套指令集合。这套指令集定义了处理器...通过掌握这些指令的使用方法,开发者可以更高效地利用ARM处理器的功能,优化程序性能。

    arm微处理器的指令系统

    ARM微处理器的指令系统是其架构的核心组成部分之一,通过丰富的指令集和灵活的寻址方式,ARM处理器能够在各种应用场景中提供高性能和高效的计算能力。无论是ARM指令集还是Thumb指令集,都能够满足不同层次的需求,从...

    ARM汇编指令ARM汇编指令ARM汇编指令

    ARM汇编指令集是ARM处理器的核心部分,定义了ARM处理器可以执行的所有操作。 一、ARM指令的一般编码格式 ARM指令字长为固定的32位,一条典型的ARM指令编码格式为: opcode:指令操作符代码 cond:指令执行的条件...

    ch3 ARM指令系统-新1

    ARM指令系统是嵌入式系统设计中的核心组成部分,尤其在ARM9处理器中,结合了32位ARM指令和16位Thumb指令,以实现高效、精简的计算操作。本节将详细介绍ARM指令系统的几个关键方面,包括指令分类、格式以及寻址方式。...

    ARM指令大全(汇编语言)日记

    ARM处理器支持两种不同的指令集:ARM指令集和Thumb指令集。ARM指令集是一种32位的精简指令集计算机(RISC),适用于高性能计算环境;而Thumb指令集则是为了适应嵌入式系统的需求而设计的一种更紧凑的16位指令集。 #...

    ARM指令集介绍 经典的总结

    指令助记符是帮助开发者记忆和理解指令用途的符号表示,执行条件则是决定指令在何种状态下执行,CPSR寄存器用于记录处理器状态,包含了程序的执行状态如零标志、负标志、进位标志等。例如,“LDR R0, [R1]”指令用于...

    ARM的指令集.ppt

    2. **程序状态寄存器处理指令**:MRS(Move to Register from Status)和MSR(Move to Status Register)用于读取和设置程序状态寄存器(PSR),PSR包含了处理器状态和条件标志。 3. **跳转指令**:B(Branch)和BL...

    ARM下的汇编语言

    - ARM处理器通过一组标志位来记录运算结果的状态,如零标志位(Z)、进位标志位(C)等。 **4. 异常处理** - 当处理器遇到某些特殊事件时(如中断请求、除零错误等),会触发异常处理流程,进入相应的异常模式。 ...

    微机-第3章 ARM微处理器的指令系统.doc

    在ARM状态下,大多数指令都有4位的条件码,这些条件码根据CPSR(Current Program Status Register)中的状态进行判断,例如,如果条件码是'EQ'(0000),那么只有当Z标志(Zero flag)置位时,指令才会被执行。...

Global site tag (gtag.js) - Google Analytics