转载地址http://www.embedu.org/Column/Column182.htm
ARM处理器CPSR标志位和条件符之间的关系
作者:刘洪涛,华清远见嵌入式学院讲师。
本文目的是要理清ARM处理器的CPSR状态标志和ARM指令的条件符之间的关系。
一、CPSR寄存器
ARM V4的CPSR寄存器(和保存它的SPSR寄存器)中的位分配如下图1所示。

图1 程序状态寄存器格式
状态标志位含义:(其它位的含义和本文主题无关,此处不多介绍)
N
二、条件符及对应的标志位
表1 条件符描述表

三、关于C、V值更多的解释
处理器内部以补码表示有符号数,8个二制位能够表达的整数范围是:+127 ~ -128,16位表达的范围是:+32767 ~ -32768。如果运算结果超出了这个范围,就是产生了溢出,有溢出,说明有符号数的运算结果需要考虑溢出情况。
溢出标志V和进位标志C是两个意义不同的标志。进位标志表示无符号数运算结果是否超出范围;溢出标志表示有符号数运算结果是否超出范围。
处理器对两个操作数进行运算时,按照无符号数求得结果,并相应设置进位标志C;同时,根据是否超出有符号数的范围设置溢出标志V。
应该利用哪个标志,则由程序员来决定。也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。
判断运算结果是否溢出有一个简单的规则:只有当两个相同符号数相加,而运算结果的符号与原数据符号相反时,产生溢出;其他情况下,则不会产生溢出。
代码举例1:
LDR
代码举例2:
代码举例3:
代码举例4://思考减法时,C值的影响
四、CPSR状态标志和ARM指令的条件符之间的关系
有了上面的背景知识以后,接下来思考表1中CPSR状态标志和ARM指令的条件符之间的关系,下面选取其中的一项来分析。
其它项的分析过程类似。
五、总结
尽管以上分析看起来有点复杂,但使用时在大多数情况下用一个简单的条件测试指令即可,不需要程序员计算出条件码的精确值即可得到需要的结果
4838

被折叠的 条评论
为什么被折叠?



