CCR是一个显示执行指令后的结果和处理器的状态的8位寄存器。根据微型计算机的不同,名称也会不同,但是所有的微型计算机都有。在大多数微型计算机的情况下,用户不能直接读写,但有些微型计算机可以读写。您可以通过执行可以测试CCR位的指令或引用CCR位的指令来间接了解CCR的每个位的状态。
CCR通常包括以下的位
(1)V(溢出):表示在最后一个有符号的算术运算过程中发生了溢出。表示在最后一个有符号的算术运算过程中发生了溢出。在进行减法运算时,微型计算机将负数值作为“2的补数”进行加法运算。此时,将运算结果不在“2的补数”所能表现的范围内称为溢出。
补数:添加到该数字时导致进位的最小数字。
在十进制数的情况下,加起来成为10的数称为“10的补数”。
在二进制数的情况下,加成2的数字称为“2的补数”。
- 十进制数的场合
6的“10的补数”是4
3的“10的补数”是7
- 二进制数的场合
[1]中的“2补数”是[1]
([1]+[1]=[10]:位数上升)
然后,[1101]中的“2补数”就是[0011]。
([1101]+[0011]=[10000]:位数上升)
(2)I1&I0(中断掩码级别1和0):定义可中断级别。STM8家族特有的位,显示中断行为的条件。具体来说,在多重中断的时候,表示在哪个中断水平。它还指示是否可以收到更深的中断。
(3)H(半进位):在执行加法指令(如ADD)期间,在位3和位4之间发生进位(Carry:进位、上升)时设置。在BCD(二进制编码解码:二进制十进制数)操作中使用。BCD是用二进制四位数表示的,表示十进制的一个数量级(从0到9)。因此,BCD的个位数进位相当于位3和位4之间的进位。
(4)N(负):表示最后一个算术运算、逻辑运算或数据操作的结果为负。当您想比较两个数字的大小时使用。
(5)Z(零):表示最后一个算术运算、逻辑运算或数据操作的结果为零。在实际程序中使用的示例用于检测while语句的条件表达式中的变量为0。
(6)C(进位):表示在最后的算术运算中发生了进位或波罗(Borrow:进位、倒退)。主要用于加法或减法指令。移位和旋转操作反映了从MSB跳出的比特值。 除法运算还显示在执行过程中是否出现问题(如商溢出或除以零)。其他还用于位测试、分支(分支)和加载指令
CCR使用例子
N(负)
CCR自动用于确定在C语言程序中while语句的条件表达式是否成立。在下面的while语句中,将变量“i”递增(加1),并执行“语句”,同时小于常量n。在这种情况下,CPU重复计算n-i,并始终确定CCR中的N(负)被设置。当N被设置时,它会退出while语句。也就是说,确定i大于n。
i=0;
while (i <= n){ 语句
++ i ; }
这样,CCR是间接使用的,而不是用户直接读写。
C(进位)
当你想用8位微型计算机进行16位运算时,你可以利用C。
用8位微型计算机进行16位运算时,1次运算是不可能的,所以进行2次运算。
在第一次运算中,只计算数字的低8位。此时,当发生进位或借位时,将其设置为C(进位)。在第2次运算中,进行前8位的运算,刚才的C(进位)也一起运算。微型计算机的指令中,有一个可以运算的指令,包括前一个运算结果的进位或借位,所以使用它。这样一来,即使是8位微型计算机,2次运算也可以进行相当于16位的运算。