第四章------运算方法和运算器

目录

补码加减法运算

补码加减法

求补运算[y]补~~~[-y]补

补码运算溢出

定点数阵列乘法

无符号位乘法

n*n位二进制乘法

 小结

定点运算器组成

定点运算器总线结构

 单总线(1)双寄存器

单总线(2)一个寄存器

双总线

三总线

浮点数加减法

 必备补充知识

流程

对阶,规格化 

 右规​

 左规

 舍入、判溢出


补码加减法运算

补码加减法

[x]补+[y]补=[x+y]补

[x]补+[-y]补=[x-y]补

特点:

使用补码进行加减运算,符号位和数值位一样参加运算。

补码的减法可以用加法来实现,任意两数之差的补码等于被减数的补码与减数相反数的补码之和 。 注意:该公式不适合任何其他机器数编码(原码、反 码、移码)。

求补运算[y]补~~~[-y]补

补码运算溢出

 例:X=+1000,Y=+1001,求X+Y;

当运算结果超出机器数的表示范围时,称为溢出。

对于加减运算,可能发生溢出的情况:同号(两数) 相加,或者异号(两数)相减。

确定发生溢出的情况:

正数相加,且结果符号位为1;

负数相加,且结果符号位为0;

正数负数,且结果符号位为1;

负数正数,且结果符号位为0;

 上图中要记住C1和Cf这两个进位信号,后面要用【V非常重要】

定点数阵列乘法

无符号位乘法

先转为补码运算,乘法再转为阵列加法

位积的每一位XiYj用一个与门产生。

每一次的累加都用单独一组FA实现。

本次累加的FA之间的进位,送至下一次再累加。

若A为m位二进制数,B为n位二进制数,即:

1.需要的与门个数:m*n;

2.进行串行加法需要的FA:        m*n个;

3.进行并行加法需要FA:        n*m个;

n*n位二进制乘法

则需要n*n个与门,n*(n-1)个FA

 小结

定点运算器组成

基本组成包括:

算术逻辑运算单元ALU:实现算术运算和逻辑运算

寄存器数据的输入:一般用边沿工作方式。

寄存器数据的输出:一般用电平工作方式。

暂存器、缓冲器,都是用来存放参与计算的数据及运算结果,它只对硬件设计者可见,即只被控制器硬件逻辑控制或微程序所访问 ;

通用寄存器堆:用于存放程序中用到的数据,它可以被软件设计者所访问。

内部总线:用于连接各个部件的信息通道。

定点运算器总线结构

 单总线(1)双寄存器

过程: 

1.Ri→IB  IB→LA (置入LA寄存器)

2.Ri→IB  IB→LB (置入LB寄存器)

3.C_OP(控制ALU)    ALU→IB      IB→Ri (置入ALU计算,通过缓冲器【缓冲器作用不冲突总线】)

单总线(2)一个寄存器

过程

1.Ri→IB IB→LA (送入LA)

2.Ri→IB  C_OP   ALU→LC (直接送人ALU计算)

3.LC→IB IB→Ri  C_OP         (结果送入LC,LC接入总线)

双总线

太简单理解了,看图就能懂

 

三总线

浮点数加减法

 必备补充知识

1. 定点小数补码:模为固定值 “2” ;

2. 正定点小数的补码:和真值形式完全一样;

3. 负定点小数的补码:模2+真值x,或者试用扫描法快速计算

4. 举例:真值x1=0.01011,x2=-0.01011,

[x1]补=0.01011 [x2]补=2-0.01011=1.10101

流程

对阶,规格化 



 右规


 左规


 舍入、判溢出

例子!非常有用!

自定义规格化的浮点数格式为:阶码 4 位,尾数 6 位,均用补码表示。
X=-0.10101*2^7,Y=110.11*2^3,应用浮点数加法/减法运算规则,计算 X+Y, X-Y 的真值及其浮点数结果。

(1)按浮点数格式要求,写出 X,Y 的浮点数存储格式:
[X]浮=0111 , 1.01011,[Y]浮=0110 , 0.11011


(2)对阶:[ΔE]补=Ex 补-Ey 补=Ex+(-Ey)补=0111+1010=0001,阶差的真值ΔE=1,说明 X 的阶
码比 Y 的大一,按照小阶向大阶码看齐,Y 的阶码加 1,其尾数右移 1 位(带符号位的右移),
得[Y]浮=0111 , 0.01101(1)

(3)尾数运算:
[M 和]补=Mx 补+My 补=1.01011+0.01101(1)=1.10000(1)      V 尾=0⊕0=0
[M 差 1]补=Mx 补+(-My)补=1.01011+1.10010(1)=10.11101(1)
或者
[M 差 2]补=Mx 补+(-My)补=1.01011+1.10011(1)=10.11110(1) V 尾=1⊕0=1

(4)尾数规格化
[M 和]补的规格化:因为 V 尾=0,所以不需要右规;
又因为其符号位跟最高数码位相同,所以需要左规,直到尾数的符号位跟最高数码位相异,尾数左移1位,同时阶码减1得:[M和]补=1.00001,
[E 和]补=0111+[-1]补=0111+1111=0110,V 阶=1⊕1=0 

[M 差]补的规格化:因为 V 尾=1,所以需要右规——尾数右移 1 位,同时阶码加 1,得:
[M 差 1]补=1.01111(11),或者[M 差 2]补=1.01111(01);[E,差]补=0111+[1]补=1000,V 阶=1⊕0=1

(5)舍入处理
采取 0 舍 1 入的方式(多余位的最高位为 1 就在舍去时往前面进 1):
[M 差 1]补=1.01111+2^(-5)=1.10000,故尾数需要再度向左规格化 1 位,同时阶码减 1,得
[M 差1]补=1.00000,但是由于 V 阶=1 已经发生了溢出,无法正确进行阶码减 1;
 [M 差 2]补=1.01111

采取 0 舍 1 入的方式(多余位的最高位为 1,若尾数真值为正就在舍去时往前面进 1,反之
就直接舍去多余的位):[M 差 1]补=1.01111; [M 差 2]补=1.01111+2^(-5)=1.10000,故尾数需
要再度向左规格化 1 位,同时阶码减 1,得[M 差 1]补=1.00000,但是由于 V 阶=1 已经发生
了溢出,无法正确进行阶码减 1。

(6)结果的溢出判断
浮点数加法运算:V 阶=0,结果没有溢出,[X+Y]浮=0110,1.00001
浮点数减法运算:V 阶=1,结果溢出

总结自定义浮点数加减法:

第一步:写出浮点数的二进制

(根据题目要求,尾数与阶码各不相同要求,一般来说。。尾数是补码)


第二步:对阶

PS:打一个比喻,就是假如101.02+0.04这两个数,起码也得整成101.02+000.04这样竖式加法运算会比较好看,其实就是对齐小数点

对阶的主要作用是把两个浮点数的阶码整成一样,若两个浮点数的阶码一样就不用进行对阶操作,若两个浮点数的阶码不一样的话。。。(进行对阶,1.小阶对(准)大阶[减少误差],适当进行2.右移(针对尾数的,因为我们操作了阶码,这时候也要操作阶码了)

记住,尾数就只有右移,左移的话就相当于大阶对(准)小阶,大错特错)

怎么判断哪个对哪个,用3.△E来判断,△E=Ex-Ey;

那怎么样尾数右移呢,符号位是0时,右移就补0,符号位是1时,右移就补1

PS:1.0101一一>1.1101(01)    【右移了两位】

         0.1101一一>0.0011(01)     【右移两位】

你会发现括号里面的要干什么,其实在后面的舍入处理,左规会非常重要


 第三步:尾数运算

尾数运算其实就要做两步:

1.直接加减,减法就是1.把 -[X]补  化成   [-X]补再相加;这个过程其实就是取反加1(符号位也要取反)

然后符号位溢出了的话。。。还是继续写上去,后面要用的,还有就是第二步因为右移的括号也要在加减运算中保留下来

[M 和]补=Mx 补+My 补=1.01011+0.01101(1)=1.10000(1)      V 尾=0⊕0=0
[M 差 1]补=Mx 补+(-My)补=1.01011+1.10010(1)=10.11101(1)

2.判断V尾这个V尾要在尾数规格化要用,V尾其实是溢出标志,V尾要在后面尾数规格化的右规时候要用

如果说V尾=0,且符号位为两位时(x,y补都只有一个符号位),这时候扔掉符号位最高位即可

V尾=1,符号位为两位时,这时候符号位保留,等到后面的尾数规格化(右规)会处理。

 例如:

[M 和]补=[Mx]补+[My]补=1.10100(0)+1.01011=1 0.11111(0),V 尾=1⊕0=1,模上进位保留,

[M 差]补=[Mx]补+[-My]补=1.10100(0)+0.101001=1 0.01001(0),V 尾=1⊕1=0,模上进位扔掉,[M 差]补=0.01001(0)

),V尾和整个数的溢出没有关系

3.V尾=符号位上的进位信号 ⊕ 尾数最高位(除去符号位)进位信号;


第四步:尾数规格化

因为尾数加减可能会出现尾数溢出或者是尾数绝对值小于2^-1(太小了)

所以针对这两种不同的情况有不同的做法【右规与左规】,左规右规的同时阶码也要改变

尾数溢出情况:

1.当第三步中的V尾=1时,这时候要进行右规,右规只要右规一次!!!死记

符号位产生的进位Cf右移入最高符合位位置, 然后阶码加1,并计算溢出标志V阶码的值。

 


尾数绝对值过小[符号位与尾数最高有效位相同时]:

可以左规多次,下图说直到V阶=1(不是V尾)时说明都已经溢出了,那还有什么计算的必要。。。

左规会用到第一步右移括号()里面的数


第五步:舍入处理

在右移、右规操作之后,需要把尾数超出的低位部分截去

0舍1入的方式:

尾数是正,被截部分非0且最高位是1,丢掉多余位,往前进1;

尾数是负,被截部分非0且最高位是0,丢掉多余位,往前进1;

其它情况,直接丢掉多余的部分。 


第六步:判断溢出

 判断阶码是否溢出

根据阶码运算过程中V阶码的值判断

V阶= 1

若 V阶码=1且Cf=1: 阶码上溢,则浮点数上溢  【Cf为尾数符号位上的进位】

V阶码=1且Cf=0: 阶码下溢,则浮点数为机器零

V阶= 阶码符号位上的进位信号 ⊕ 阶码最高位(除去符号位)进位信号

总结 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值