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

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

一、CPSR寄存器

ARM V4的CPSR寄存器(和保存它的SPSR寄存器)中的位分配如下图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 程序状态寄存器格式

表1 条件符描述表

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

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

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

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

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

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

 

   来源:维库开发网

微信扫描分享本文到朋友圈
扫码关注5G通信官方公众号,免费领取以下5G精品资料
  • 1、回复“YD5GAI”免费领取《中国移动:5G网络AI应用典型场景技术解决方案白皮书
  • 2、回复“5G6G”免费领取《5G_6G毫米波测试技术白皮书-2022_03-21
  • 3、回复“YD6G”免费领取《中国移动:6G至简无线接入网白皮书
  • 4、回复“LTBPS”免费领取《《中国联通5G终端白皮书》
  • 5、回复“ZGDX”免费领取《中国电信5GNTN技术白皮书
  • 6、回复“TXSB”免费领取《通信设备安装工程施工工艺图解
  • 7、回复“YDSL”免费领取《中国移动算力并网白皮书
  • 8、回复“5GX3”免费领取《R1623501-g605G的系统架构1
  • 本周热点本月热点

     

      最热通信招聘

      最新招聘信息

    最新技术文章

    最新论坛贴子