数据的溢出与 CF OF 标志的判定

首先,什么是溢出?

需要深入理解一下,我的观点是溢出是有符号数的概念,也就是说无符号数是不存在溢出的说法的,只能叫进位。对于无符号数的运算在计算机中都是模n进行的,所以当超过了范围,又自动从0开始计数了。实际上,自己经历此思维的变化也是有一段很长的时间,期间我存在的 一个关于此类问题的最大障碍就是 进借位标志 CF 和 溢出标志OF  傻傻分不清,更别提做题了,现在来总结一下我对此问题的看法,并分析一下真题中的问题。

课本对于溢出的解释:是指计算机进行算术运算产生的结果超出机器所能表示的范围。

上溢与下溢的解释:假设机器字长固定,设为8为,包含一位符号位,补码表示的范围为-128~+127.若现在两个数相加大于127 或者小于 -128,则称为溢出。其中大于127称为上溢出,小于-128称为下溢出。对于定点小数,若两个定点小数相加大于等于1,则称为上溢,若两个定点小数相加小于-1,则称为下溢。

溢出判断的3种方法

(1)正数+正数=负数      ;负数+负数=正数

(2)通过数值部分最高位的进位 和符号位产生的进位 进行 异或操作,若异或结果为1,则为溢出。

       注:是数值最高位进位   与    符号位进位的异或

(3)采用双符号位

    01表示正溢,10表示负溢

变形补码以4为模,两位符号位要连同数值部分一起参加运算,高符号位产生的进位直接丢弃。

(对于3种方法我不想做过多的分析,一方面我想把精力集中在以下的内容,一方面是因为这3种方法说是这么说,但我一般只用第一种,我想除非考我有几种判断溢出的方法,我才会自信的说:3种)

接下来我想谈的重点就是分析OF 与 CF标志

基本观点(1)CF是无符号数进借位标志,OF是有符号数溢出标志

                (2)CPU根本不知道参与运算的数是无符号数还是有符号数,所以在一道题目中才会同时让我们分析 CF  OF

1.CF的判断

加法 十进制角度,如果两个无符号数相加,结果大于2^{n}-1(n为位数),则CF=1,否则CF=0
加法 二进制角度,如果两个无符号数相加,最高位向前有进位,则CF=1,否则CF=0
   
减法 十进制角度,如果两无符号数相减,减数>被减数,即结果不在(0~2^{n}-1)内,则CF=1,否则CF=0
减法 二进制角度,如果两无符号数相减,最高位向前游位,则CF=1,否则CF=0

 

 

 

 

 

 

2.OF的判断

加法 十进制角度,如果两有符号数相加,结果不在  -2^{n-1}~2^{n-1}-1内,则OF=1,否则OF=0
加法 二进制角度,正+正=负 则OF=1,否则 OF=0
   
减法 补码的减法都被转换成了补码加法的运算,故对减法的讨论就没有意义了。

 

 

 

 

 

下面分析一下题目看一下表格怎么用

例1:source:2018年真题

数据的溢出与 CF OF 标志的判定_第1张图片

分析:对于无符号数,减数>被减数,所以表示够减,即CF=0

看溢出标志OF,这里要用补码的加法,这相当于一个正数,一个负数相加,结果也不会溢出。

实际上这里最简单的判断方法是R1 和R2都表示 负数,但是R1是-1啊,它表示最大的负数,所以两者相减的结果肯定为正,没有溢出,下面的计算过程也说明了结果为正。我想着这应该才是命题老师最希望我们使用的方法

数据的溢出与 CF OF 标志的判定_第2张图片

(这段内容不太重要,只可能考选择题)注:溢出有上溢和下溢之分,在定点计算机和浮点计算机中,上溢和下溢的概念是不完全相同的。在定点计算机中,从正方向超过了数的表示范围,称为上溢;从负方向超过了数的表示范围,则称为下溢。在浮点计算机中,浮点数的表示范围主要由阶码来决定。不论数的符号是正还是负,若阶码从正的方向超出了阶码的表示范围,称为上溢;若阶码从负的方向超出阶码的表示范围,或者尾数为“0”时,统称为下溢。一般来说,计算机对于浮点数的下溢,则自动当作“0”来处理,不输出错误信息;而产生的上溢,计算机则产生“溢出中断”,并输出溢出的错误信息,甚至停止程序的运行。

 

你可能感兴趣的:(计算机组成原理)