计算机组成与体系结构,第3章mooc学习
定点数
补码加、减法与溢出概念
现代计算机中都是使用补码做加减法运算的
-
基本公式:公式如何证明呢?需要我们分情况进行考虑。
⑴ 补码加法的基本公式:
(X真值 + Y真值)补码=X补码+Y补码
(2)补码减法的基本公式:
(X真值 - Y真值)补码=X补码+(-Y)补码
运算器设计过程中,加法器既可以实现加法,又可以实现减法(上面公式一定要理解)
例如,拿减法举个例子:
求(-Y)补码的技巧:对于求Y补码,从右向左找到第一个"1",这第一个"1"前面的数全部取反 -
溢出概念:
运算过程中数据超出机器字长所能表示范围称为溢出。
大概理解就是这样:如果机器字长只有8位,按28模的意义,如果两个数相加或相减之后位数为9位了,那么肯定会舍去最高位,也就是"1"或"0"自然丢掉,那么舍去最高位(溢出)可能会导致结果发生变化了,从而导致运算错误。
例如:
下面两张图中红色背景的字对应的运算发生了溢出。
我们思考:不论是加法还是减法,只要实际参加操作的两个数符号相同,结果的符号又与之不同时,即为溢出。(看好是实际参加操作的两个数) 下面第二张图的溢出都是参加运算的两个数符号位相同,但由于运算过后舍去最高位,导致符号位发生变化,运算错误。
- 溢出的检测方法:
①对操作数和运算结果的符号位检测
②利用最高数值位向符号位的进位值和符号位产生的进位值判断溢出
怎么理解呢:因为溢出只有两种情况,即运算时的操作数符号位为0 0、1 1的时候所以我们就把这两种情况举出例子看一下就可以了,如下图
举出例子可以发现,只要是C1和C0不相同,那么就会产生溢出,溢出标志为1,我们使用一个异或门就可以了
③双符号位判断溢出
用Zn和Zn+1表示结果的两个符号位
(在双符号位中,其实最左边第一位是符号位,其余均是数值位)
Zn+1Zn =00: 结果为正
Zn+1Zn =01: 正溢出 两个正数相加,也就是符号位都是0 0,相加之后符号位Zn变成1了,再加上前面Zn+1,为0 1,所以是正溢出了。
Zn+1Zn =10: 负溢出
Zn+1Z