一:加法器中进位与溢出位的区别
1.首先要说的是,对于无符号数我们讨论的是它的进位位;对于有符号数我们讨论的是它的溢出位,因为有符号数的进位位就是溢出位。
2.在微机原理或计算机运算中,进位是指运算的结果对更高一位形成+了1的进位或-1的借位,进位标志位表示为CF(Carry Flag);溢出是指运算的结果超出了规定位宽所能装载的数值范围,溢出标志位表示为OF(Overflow Flag).。
3.进位与溢出对运算结果的影响:通过以下一个例子的对比来讨论无符号数的进位标志位和有符号数的溢出标志位对结果的影响:
假设研究对象是8位数据的加法器,则对于无符号数其表示范围是0-255,有符号数其表示范围为-128~127。
那计算机是如何知道现判断的是无符号数还是有符号数的呢?
通常计算机会直接把对象当作无符号数来处理,但是具体要用哪个标志位(OF或CF)则由程序员自行决定。
(1)溢出标志位:
以 7FH(0111 1111B)+02H(0000 0010B)=81H(1000 0001B)为例:
如果把它当作无符号数来运算,那么运算结果是81H(+129),此时没有发生进位,即CF=0;
如果把它当作有符号数来运算,那么运算结果是81H(由于负数以补码来表示,因此为-127),此时可以发现,结果(-127)与理论运算结果(129)不同,发生了错误,因为产生了溢出(此时溢出位OF=1)。可以发现溢出位的置位规律为:当两个相加数(A和B)的符号位相同同时它们的和与它们有不同的符号,就会产生溢出。通常溢出标志位的逻辑表达式为:
OF=(A[n-1]&&B[n-1]&&~ sum[n-1] )+(~ A[n-1]&&~ B[n-1]&&sum[n-1]);
(2)进位标志位:
以1000B+1100B=10100B为例
如果把它当作无符号数处理,则最高位的1就体现出了“进位”,