Bootstrap

计算机组成与体系结构——运算方法

计算机组成与体系结构,第3章mooc学习

定点数

补码加、减法与溢出概念
现代计算机中都是使用补码做加减法运算的

  1. 基本公式:公式如何证明呢?需要我们分情况进行考虑。
    ⑴ 补码加法的基本公式:
    (X真值 + Y真值)补码=X补码+Y补码
    (2)补码减法的基本公式:
    (X真值 - Y真值)补码=X补码+(-Y)补码
    运算器设计过程中,加法器既可以实现加法,又可以实现减法(上面公式一定要理解)
    例如,拿减法举个例子:
    在这里插入图片描述
    求(-Y)补码的技巧:对于求Y补码,从右向左找到第一个"1",这第一个"1"前面的数全部取反

  2. 溢出概念:
    运算过程中数据超出机器字长所能表示范围称为溢出。
    大概理解就是这样:如果机器字长只有8位,按28模的意义,如果两个数相加或相减之后位数为9位了,那么肯定会舍去最高位,也就是"1"或"0"自然丢掉,那么舍去最高位(溢出)可能会导致结果发生变化了,从而导致运算错误。
    例如:
    下面两张图中红色背景的字对应的运算发生了溢出。
    我们思考:不论是加法还是减法,只要实际参加操作的两个数符号相同,结果的符号又与之不同时,即为溢出。(看好是实际参加操作的两个数) 下面第二张图的溢出都是参加运算的两个数符号位相同,但由于运算过后舍去最高位,导致符号位发生变化,运算错误。

在这里插入图片描述
在这里插入图片描述

  1. 溢出的检测方法:
    ①对操作数和运算结果的符号位检测
    在这里插入图片描述
    ②利用最高数值位向符号位的进位值和符号位产生的进位值判断溢出
    怎么理解呢:因为溢出只有两种情况,即运算时的操作数符号位为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

;