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

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

定点数

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

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

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

计算机组成与体系结构——运算方法_第2张图片
计算机组成与体系结构——运算方法_第3张图片

  1. 溢出的检测方法:
    ①对操作数和运算结果的符号位检测
    计算机组成与体系结构——运算方法_第4张图片
    ②利用最高数值位向符号位的进位值和符号位产生的进位值判断溢出
    怎么理解呢:因为溢出只有两种情况,即运算时的操作数符号位为0 0、1 1的时候所以我们就把这两种情况举出例子看一下就可以了,如下图
    举出例子可以发现,只要是C1和C0不相同,那么就会产生溢出,溢出标志为1,我们使用一个异或门就可以了

计算机组成与体系结构——运算方法_第5张图片③双符号位判断溢出
用Zn和Zn+1表示结果的两个符号位
(在双符号位中,其实最左边第一位是符号位,其余均是数值位)

Zn+1Zn =00: 结果为正
Zn+1Zn =01: 正溢出 两个正数相加,也就是符号位都是0 0,相加之后符号位Zn变成1了,再加上前面Zn+1,为0 1,所以是正溢出了。
Zn+1Zn =10: 负溢出

Zn+1Zn =11:结果为负

判断溢出的逻辑表达式为:
V= Zn⊕Zn+1 Zn与Zn+1不同,产生溢出,使用一个异或门
注意:勿将补码运算过程中的取模与溢出混为一谈。取模丢弃数据位时不一定溢出,溢出时也不一定就丢弃了数据位(确实是的 要根据题分析!)
例如:红色箭头所指的地方就是溢出了,记住这个双符号位是用来我们进行溢出判断的
计算机组成与体系结构——运算方法_第6张图片
计算机组成与体系结构——运算方法_第7张图片
③无符号数溢出判断
计算机组成与体系结构——运算方法_第8张图片
原码一位乘法
这个比较简单:符号位单独参加运算,数据位取绝对值参加运算

  1. 首先介绍移位操作及其意义
    左移:
    计算机组成与体系结构——运算方法_第9张图片
    右移
    计算机组成与体系结构——运算方法_第10张图片
    实现乘法运算有两种方式:
    ①硬件乘法器完成; ② 软件编程实现。
    掌握乘法运算方法不仅是设计乘法器的需要,对于乘法编程也有很大帮助。还需要加法器,所以我们想乘法也可由加法器实现
    <1>看一下这种方式:
    比如说b问题中的关于需要多输入全加器,右数第四列中0 0 1 0相加,就需要多输入的全加器
    计算机组成与体系结构——运算方法_第11张图片
    <2>如何改进呢?
    计算机组成与体系结构——运算方法_第12张图片
    分析一下:
    ①进行多次加 就是每次只加两个数 就不用使用多输入的全加器了
    ②针对乘数不同,部分积左移次数不同的问题,每次做完一次部分积,结果向右移动一位,但每次右移移出来那一位不能空了,所以我们可以把右移出来的那一位,移到乘数寄存器当中去,这样既把结果保留了,又把乘数向右推一位,这样带来的好处是我们永远只取最后一位去判断,部分积是加0还是加1
    ③最后结果明显看出来在部分积和乘数寄存器取结果
    例如:也比较容易理解,看一下下面这个例子。就是不断移位,在移位的过程中部分积不断加X或者加0
    计算机组成与体系结构——运算方法_第13张图片

补码一位乘法
这个就相对比较复杂了,是有固定算法的,就不证明一下其算法的本质了。
1 证明方法(有兴趣可以看一下):
计算机组成与体系结构——运算方法_第14张图片
计算机组成与体系结构——运算方法_第15张图片

计算机组成与体系结构——运算方法_第16张图片计算机组成与体系结构——运算方法_第17张图片
2. 运算规则:使用定点整数Booth算法或者定点小数Booth算法 记住其固定的步骤就可以了
符号位是参加运算的
计算机组成与体系结构——运算方法_第18张图片
几个问题:(要好好理解这两句话)
① yn+1取0的话 整个数据位的位数发生变化的话,那它的整个值也可能发生变化 因此yn+1不应该改变Y的值,因此在乘数寄存器Y后增加一位,目的是为了使乘法能够按照规则进行
②右移部分积和乘数寄存器,用乘数寄存器来保留部分积右移过程中移出来的那一位有效积,同时我们还便于从乘数寄存器的最末尾去寻找部分积中是加[X]补,还*是-[X]补,还是0

定点小数Booth算法:补码小数Booth算法对于n位小数做n+1次加法,做n次右移
定点整数Booth算法:补码整数Booth算法对于n位整数做n+1次加法,做n+1次右移
举个复习题的例子,按照这个方法进行运算就可以了计算机组成与体系结构——运算方法_第19张图片
(1)画了五条波浪线,也就意味着右移了5次=n(n为位数),这是定点整数

计算机组成与体系结构——运算方法_第20张图片
(2)
计算机组成与体系结构——运算方法_第21张图片

补码加减、原码乘、补码乘 习题

  1. 对于补码乘法,用Booth算法;对于无符号数乘法,直接手算就可以计算机组成与体系结构——运算方法_第22张图片

计算机组成与体系结构——运算方法_第23张图片
解答:
(1)根据运算规则(X+Y)=X+Y=001010+111010=1000100=000100=+4
[没有溢出]
(X-Y)=X+ -Y=001010+000110=010000=+16
[也没有溢出 但是如果题目说5位机器数呢?那么第二问就溢出了]
(2)同样也是右移了n=6次,注意与布斯算法的不同点计算机组成与体系结构——运算方法_第24张图片
3. 计算机组成与体系结构——运算方法_第25张图片
问题:求[A]补+[B]补和[X]补+ [Y]补运算完成后,CF、PF、AF、ZF、SF、OF的取值
[A]补+[B]补=01.10001000
[X]补+ [Y]补=00.00000000
根据8086寄存器各标志位进行判断即可
答案错了 看底下那张图判断
计算机组成与体系结构——运算方法_第26张图片
计算机组成与体系结构——运算方法_第27张图片

浮点数

一般意义 浮点数加减运算(先规格化!)

  1. 基本思路:
    设两个浮点数为:X=Mx×2Ex, Y=My×2Ey,尾数Mx、My为规格化小数,用补码表示加粗样式;阶码Ex、Ey为整数,用移码或补码表示。阶底常选用2、8或16,下面以2为例进行讨论。(上面这都是不一定是这样表示的,只是通常意义)
    流程:
    对阶→尾数相加减 →规格化 →舍入操作 →溢出判断
    (1)对阶:使两个浮点数的阶码相等,ΔE=Ex-Ey:
    ΔE>0: 将Ey+ΔE,My右移ΔE位;
    ΔE<0:将Ex+|ΔE|,Mx 右移|ΔE|位; ΔE =0:不操作。(要理解这个操作)
    (2)尾数相加减:采用定点小数加减法
    (3)规格化:将运算后的尾数规格化处理。
    规则:
    尾数结果为:00.0×××××或11.1×××××时,需要左规格化,即将尾数向左移动(因为你想右移动永远没法移动到规格化的形式),每移动一次,阶码减一,直到尾数形式位:00.1×××××或11.0×××××
    尾数结果为:01.×××××或10.×××××时,表明尾数求和的结果是大于1的,此时仅需执行一次右移进行规格化,阶码加一,直到尾数形式为:00.1×××××或11.0×××××
    ( 4 )舍入操作:右移规格化可能会造成低位数据位丢失)
    ①截断法:多余位去掉。此法简单,影响精度。
    ②置1法:如果1多余位去掉,最低位恒置“1”。
    ③0舍1入法:右移移出位是1的时候 最低位+1。
    思考一下使用0舍1入会产生多大的误差?
    (5)阶码溢出判断:最后需判断结果的正确性。通过检查阶码是否溢出来判断,因为浮点数的溢出是以其阶码溢出表现出来的:(阶码代表着浮点数的表示范围)

若阶码上溢,则浮点数上溢,置溢出标志;(阶码符号位为01)
若阶码下溢,则将运算结果置为机器零。(阶码符号位为10)

  1. 实际例子:

(1)计算机组成与体系结构——运算方法_第28张图片
第三步,尾数少写了个0 ppt错误了计算机组成与体系结构——运算方法_第29张图片
(2)
计算机组成与体系结构——运算方法_第30张图片

浮点数课后习题

补充一个知识点:浮点数的规格化解释,IEE754只是规格化浮点数的一个特例

计算机组成与体系结构——运算方法_第31张图片
整体思路:
需要将0.75 -65.25先分别表示成IEE754标准单精度的形式
0.75 IEE754格式为:
0 01111110 10000000000000000000000
-65.25 IEE754格式为:
1 10000101 00000101000000000000000
Ex=01111110
Mx=0(1).100…
Ey=10000101
My=1(1).00000101…
[其中最高位为数符,次高位为隐藏的1 可以看作是我们在此问题中规定的标准,之后在尾数相加减的过程中,这个规定一直存在!我是这么认为的]
(1)0.75+(-65.25)
①对阶:(注意也得用补码进行减法对阶)
▲Ex补=Ex补+(-Ey)补=-7
所以x阶码小,让阶码变大,尾数应该变小,右移7位。得到新的Ex Mx
②尾数相加
③规格化
④舍入:舍入后面两位
⑤溢出判断:看是否发生了阶码上溢或下溢问题
(2) 0.75-(-65.25)
①对阶:(注意也得用补码进行减法对阶)
▲Ex补=Ex补+(-Ey)补=-7
所以x阶码小,让阶码变大,尾数应该变小,右移7位。得到新的Ex Mx
②尾数相减
③规格化
④舍入
⑤溢出判断:看是否发生了阶码上溢或下溢问题

(1)简单的化简计算机组成与体系结构——运算方法_第32张图片
(2)浮点数计算
对阶->运算->规格化(固定套路)
注意:表示X Y的时候位数尽量用双符号位表示,仅最高位代表符号。理解这做这个过程
计算机组成与体系结构——运算方法_第33张图片

End:

自己总结的大部分都是来自华中科技大学mooc

你可能感兴趣的:(计算机组成与体系结构——运算方法)