当前位置:文档之家› 计算机组成原理第3章 运算器和运算方法

计算机组成原理第3章 运算器和运算方法

第三章运算方法和运算器3.1补码的移位运算1、左移运算:各位依次左移,末位补0对于算术左移,若没有改变符号位,左移相当于乘以2。

2、右移运算:算术右移:符号位不变,各位(包括符号位)依次右移。

(相当于除以2)逻辑右移:最高位补0,其余各位依次右移例1:已知X=0.1011 ,Y=-0.0101 求 [0.5X]补;[0.25X]补;[-X]补;2[-X]补;[0.5Y]补;[0.25Y]补; [-Y]补;2[-Y]补[X]补=0.1011 [Y]补=1.1011[0.5X]补=0.01011 [0.5Y]补=1.11011[0.25X]补=0.001011 [0.25Y]补=1.111011[-X]补=1.0101 [-Y]补=0.01012[-X]补=0.1010 (溢出) 2[-Y]补=0.10103.2定点加减法运算及其实现3.2.1 补码加减法运算方法由于计算机中的进行定点数的加减运算大都是采用补码。

(1)公式:[X+Y]补=[X]补+[Y]补[X-Y]补=[X]补+[-Y]补(证明过程见教材P38)例1 X=0.001010 Y=-0.100011 求[X-Y]补,[X+Y]补解:[X]补=0.001010 [-Y]补=0.100011则 [X-Y]补=[X]补+[-Y]补=0.001010 + 0.100011=0.101101 [X]补=0.001010 [Y]补=1.011101则 [X+Y]补=[X]补+[Y]补=0.001010 + 1.011101=1.100111例2:已知X=+0.25,Y=-0.625,求X+Y; X-Y写出计算的过程.例3:已知X=25,Y=-9,求X+Y; X-Y写出计算的过程.例4:已知X=-25,Y=-9,求X+Y; X-Y写出计算的过程.解: (8位二进制表示)例2: X=0.0100000 Y=-0.1010000[X]补=0.0100000 [Y]补=1.0110000则 [X+Y]补=[X]补+[Y]补=0.0100000 + 1.0110000=1.1010000[X+Y]原=-0.0110000=(-0.375)D[X]补=0.0100000 ,[-Y]补=0.1010000则 [X-Y]补 = [X]补+[-Y]补 = 0.0100000+0.1010000=0.1110000[X+Y]原 = 0.1110000 =(0.875)D例3: X=+0011001 Y=-0001001[X]补=00011001,[Y]补=11110111则 [X+Y]补 = [X]补+[Y]补= 00011001 + 11110111= 00010000[X+Y]原 =+0010000=(+16)D[X]补= 00011001 ,[-Y]补= 00001001则 [X-Y]补 = [X]补+[-Y]补= 00011001 + 00001001= 00100010[X+Y]原 = +0100010 =(34)D例4: X=-0011001 Y=-0001001[X]补=11100111,[Y]补=11110111则 [X+Y]补 = [X]补+[Y]补= 11100111 + 11110111[X+Y]原 =-00100010=(-34)D[X]补= 11100111 ,[-Y]补= 00001001则 [X-Y]补 = [X]补+[-Y]补= 11100111 + 00001001= 11110000[X+Y]原 = -0010000 =(-16)D3.2.2 定点加减法运算中的溢出问题溢出:运算结果大于机器所能表示的最大正数或者小于机器所能表示的最小负数.溢出只是针对带符号数的运算.比如:[X]补=0.1010,[Y]补=0.1001,那么[X]补+[Y]补=1.0011(溢出)溢出是一种错误,计算机中运算时必须能够发现这个现象,并加以处理判断溢出的方法:1、采用变形补码法[X+Y] 变补=[X] 变补+[Y] 变补[X-Y] 变补=[X] 变补+[-Y] 变补例1 X=0.1011 Y=0.0011 求[X+Y]补解: [X]变补 = 00.1011, [Y]变补 = 00.0011[X+Y]变补 = 00.1011 + 00.0011 = 00.1110所以 [X+Y]补 = 0.1110例2 X=0.1011 Y=0.1001 求[X+Y]补解: [X]变补 = 00.1011 [Y]变补 = 00.1001[X+Y]变补 = 00.1011 + 00.1001 = 01.0100运算结果的两符号位是01,不相同,发生溢出,因第一符号位是0,代表正数,所以称这种溢出为“正溢出”。

例3 X=-0.1101 Y=-0.1010 求[X+Y]补解: [X]变补 = 11.0011 [Y]变补 = 11.0110结果的两符号位是10,不相同,发生溢出,因第一符号位是1,代表负数,所以称这种溢出为“负溢出”。

总结:判断溢出的原则:当两符号位相同时,正确。

“00”表正数,“11”表负数。

当两符号位不同时,溢出;“01”表正溢出,“10”表负溢出2、利用符号位的进位信号判断原理:设数码位向符号位的进位为C n-1,符号位向更高位的进位为C n 。

则 OF= C n-1 ⊕ C n当 OF为“0”表示无溢出,为“1”表示溢出了。

比如: [X]补=0.1010,[Y]补=0.1001[X]补+[Y]补=1.0011C n-1=1, C n =0 则OF=13根据加数、被加数、和的符号判断当操作数中的加数与被加数符号相同时,若结果的符号与操作数的符号不一致,表示溢出;否则,表示无溢出.3.2.1 补码加减法运算的实现补码运算只需要设置一个加法器。

采用串行进位方式的n位并行加法器的逻辑结构。

n个全加器(FA n-1~FA0),进位信号C i从低位向高位逐位串行传送。

两个n位长的补码A和B,连同C-1一起传送到全加器的输入端,得到n位运算结果S,最高位为符号位。

左上方的半加器用来判定溢出。

如何区分加减运算?M=0时C-1=0实现加法运算M=1时C-1=1实现减法运算3.3定点乘法运算及其实现3.3.1 原码一位乘法(1)运算规则设x=xf x1x2...xn,y=yfy1y2...yn,乘积为P,乘积的符号位为Pf则:Pf=xf⊕y f |P|=|x||y|,求|P|的运算规则:①被乘数和乘数均取绝对值参加运算,符号位单独考虑。

②被乘数取双符号,部分积的长度同被乘数,初值为0。

③从乘数的最低位yn开始判断:yn=1,则部分积加上被乘数|x|,然后右移一位:yn=0,则部分积加上0,然后右移一位。

①重复③判断n次。

(2)逻辑实现和操作流程实现原码一位乘法的硬件逻辑如图所示。

原码一位乘法的操作流程如图所示,图中的i用于计数,它表示循环次数(相加/移位的次数),随着y的右移,yn位总是表示乘数将要被判断的那一位。

3.3.2补码一位乘法补码一位乘法的运算算法是Booth夫妇首先提出来的,所以也称Booth算法,其运算规则如下:①符号位参与运算,运算的数均以补码表示。

②被乘数一般取双符号位参加运算,部分积初值为0。

③乘数可取单符号位以决定最后一步是否需要校正,即是否加[-xl补④乘数末位增设附加位yn+1,且初值为0。

⑤按下表所示进行操作。

⑥按照上述算法进行n+l步操作,但第n+l步不再移位,仅根据y0与yl的比较结果作相应的运算即可。

Y n Y n +1 操 作 0 0 部分积右移一位 0 1 部分积加X 补,右移一位1 0 部分积加-X 补,右移一位 1 1 部分积右移一位(2)逻辑实现和操作流程 3.4 定点除法运算及其实现 3.4.1原码除法运算 1.恢复余数法:(1)对于n 位除数来说,为了保证商数的数码位n 位,必须要求被除数的高端n 位小于除数,否则,商数的小数点前将位1,表示除法运算产生溢出,对于定点除法运算来说这是不能允许的,遇到这种情况,除法运算应终止。

(2)每次上商总是比较一下余数和除数的大小,若余数大于除数时,则商“1”,且将余数减去除数后左移1位得新的余数,若余数小于除数则商“0”,只将余数左移1位得新的余数,上述过程重复进行n 次,共上n 位商数,完成n 位除法运算的全过程。

(3)最后根据符号位单独运算的结果,给商数冠以正确符号,余数的符号位应与被除数相同。

上述操作过程在计算机中实现,需要稍做如下改动:(1)为判定本次除法运算是否产生溢出,首先需要将被除数的高n 位减去除数,若其余数大于“0”,则判定本次运算溢出,立即终止除法运算过程;若余数小于“0”,则应将除数加回去恢复被除数,继续除法运算过程。

(2)每次上商之前总要做一次余数减除数的操作。

若该余数大于或等于“0”,则表示够减,商“0”后将该余数左移一位得新余数;若该余数小于“0”,则表示不够减,商“0”,而且本次减法运算不该做,应将除数加回去,恢复原来的余数后将其左移一位得新余数,“恢复余数法”因此面遇名。

上述手算例子采用原码恢复余数法在计算机中的操作过程如下: 例题1:已知:X =+0.1001,Y=-0.1101,求X/Y=? 解:符号位单独运算:Qf =Xf ⊕Yf =1[∣X ∣]原=[∣X ∣]原 =0.1001, [∣Y ∣]原=[∣Y ∣]原 =0.1101, [-∣Y ∣]原 =1.0011,最后给出结果,冠以正确得符号:商数Q=-0.1011余数R=+0.0001×2-4例题2:已知:X=-0.01010,Y=-0.11001,求X/Y=?从上述操作过程可以看出,恢复余数法存在两个明显的缺点: (1)商“0”时,需要恢复余数,降低了除法运算得速度。

(2)操作步骤不规则,商“0”时只需做3步操作,而商“1”时需要做5步操作。

2.加减交替法“加减交替法”又称做“不恢复余数法”它是由“恢复余数法”改进而来的。

我们先分析恢复余数法的操作过程:第i 次操作是将余数R i 左移一位后减去除数Y 得新的余数R i +1,即R i +1=2R i -Y 。

若R i +1≥0则商“1”,然后进入第i+1次的操作为:2 R i +1-Y若R i+l <0则商“0”,然后需恢复余数,即:完成R i+l +Y=2 R i ,才进入第i+1次操作为: 4R i -Y如果当第i 次操作商“0”时,不恢复余数,而是直接进入第i+1次操作,将小于“0”的余数(R i +1)继续左移一位后“+Y ”,即: 2R i+1+Y=2(2R i -Y)+Y=4R i -Y这样做的结果与恢复余数后的第i+1次操作完全相同。

说明恢复余数的操作并不是必需的。

相关主题