欢迎来到天天文库
浏览记录
ID:58657022
大小:948.50 KB
页数:91页
时间:2020-10-05
《计算机系统组成与结构PPT第8章ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第八章运算方法本章我们详细说明几种常用数据格式的算术运算算法和它们的硬件实现。包括定点数表示及其加、减、乘、除过程和硬件实现,二—十进制(或BCD)码的格式和操作。接下来讨论一些提高算术操作性能的专用硬件,包括流水线、查找表、华莱士树。最后介绍浮点数的格式和它们的算术操作。包括浮点数的格式,性质,以及加、减、乘、除过程和硬件实现,还有IEEE754浮点数标准。执行算术和逻辑运算的指令以及微操作是任何CPU的一个必不可少的重要部分。8.1无专门符号位表示法本节讨论二进制数无专门符号位表示法的加、减、乘、除的基本算法以及实现这些算法的硬件。这些算法同
2、时也是二进制数带专门符号位表示法、BCD码和浮点表示法的算术运算基础。非负数码:表示0或一个正数。n位非负数码的数值范围为0(所有位都为0)到2n-1(所有位都为1)。2的补码(简称补码):既能表示正数又能表示负数。n位数的数值范围为-2n-1到2n-1-1。当最高位为1时表示负数,最高位为0时表示正数(包括0)。正数(包括0)的补码与非负数码相同,负数的补码为其绝对值的2的补码,等于它的绝对值按位取反(该数的1的补码,简称为反码),加1。有两种常用的无专门符号位表示法:例如,求-5的4位补码表示,首先求出它的绝对值5(0101),产生反码值10
3、10,再加1得补码1011。下表列出了8位二进制数的非负数码和补码表示的数值。表8.1无符号表示的数值8.1.1加法和减法加法直接采用二进制加法实现,硬件中通过使用一个并行加法器来实现,如下图所示。X和Y是8位寄存器,该电路实现微操作ADD:X←X+Y。只要结果在正常范围内(对非负数码而言为0到2n-1,对2的补码而言为-2n-1到2n-1-1),该电路就能得到正确的结果。图8.1微操作X←X+Y的实现当结果不能表示为一个8位数值时就会导致溢出:例如,非负数码加法255+1,即11111111+00000001,直接加得100000000,有9位
4、,不能存于8位寄存器中。并行加法器产生额外的进位输出,它用来标志算术溢出。在非负数码中,这个进位能置溢出标志,它提示系统产生了溢出,所得结果不完全正确,系统应进行相应的结果修复处理或错误处理。在补码中,判断溢出不但要检查进位输出,还要检查结果最高位的进位输入。如果这两者相等,那么不产生溢出,否则产生溢出。见下图:图8.2补码加法的溢出产生在(a)和(c)中最高位的进位输入和进位输出相等,不产生溢出;而在(b)和(d)中两者不等,产生溢出。减法可以转换成加法,即X–Y通过执行X+(-Y)来实现。首先将Y转换成–Y的补码,再将–Y的补码与X的补码相加
5、即可得X–Y的补码:[X–Y]补=[X]补+[-Y]补左图给出了执行微操作SUB:X←X–Y的一种硬件实现。图8.3微操作X←X–Y的实现对于非负数码,减法的结果不会比2n-1大,但可能比0小。例如,1–2执行为00000001+11111110=11111111,即255。图中(b)和(d)溢出,而(a)和(c)没有溢出。图8.4非负数码减法的溢出产生同样,补码减法也将X–Y转换成X+(–Y)来执行,而判断溢出的条件与补码加法相同。此时,如果减法(通过补码加法实现)产生了进位输出0而不是1时,则发生了溢出。8.1.2乘法乘法可以看成加法的重复。
6、一个数乘以n与n个该数相加的结果相同。可以用下列算法来实现乘法x×y。z=0;FORi=1TOyDO{z=z+x}这种算法不理想,原因是速度慢、计算x×y的时间不确定。我们希望不论x、y取何值,执行乘法的时间相同。x=27y=25381135546831考虑人工计算:首先,27乘以乘数y的最低位3。接着,27乘以乘数y的次低位5,结果放在前一个积的左边一位处,因为乘数5在3的左一位上。然后,27乘以2,结果进一步左移一位。最后,将所有值加在一起。8.1.2.1移位——相加算法(非负数码乘法)这个过程被称为移位——相加乘法。首先计算每个部分积并左移
7、到正确位置,然后再将所有的部分积相加。对这个算法稍做修改,使得硬件实现更为简单,就可得到无符号非负数码的乘法基本算法。第一个修改是每求出一个部分积后就计算和:x=27y=253811351431←计算的和546831←最终计算的和因为硬件上,二输入加法器很容易实现,而三输入或多输入的加法器则变得非常复杂。任何时候都没有多于两个数的加。注意:每一个部分积都逐次左移一位,因此排列的位置不同。在当前和与部分积的相加中,某些位的运算不必要。第二个修改用右移当前和代替左移部分积:x=27y=25381←右移一位81←1被右移出,故不参加加法运算135143
8、1←右移一位1431←31被右移出,故不参加加法运算546831←最后右移一位6831每次都是相同的三列数字进行加法。已经右移到这三列右
此文档下载收益归作者所有