vala
PRESENTED BY
283 SLIDES
3.02K VUES
2.83K LIKES

第 4 章 机器数的运算方法及运算器

DESCRIPTION

第 4 章 机器数的运算方法及运算器. 目 录. 4.1 机器数的加减运算及其实现 4.2 定点乘法及其实现 4.4 浮点数的算术运算 4.5 运算器的组成和结构. 4.1 机器数的加减运算及其实现. 4.1.1 原码加法 4.1.2 补码加法 4.1.3 减法运算 4.1.4 补码加减运算线路的实现. 4.1.1 原码加法. 1.符号相同的两个原码相加:符号相同的两个原码相加,只要两个数的数值相加即可,其符号不变。. 例4.1 设 X=+10001,Y=+01011, 求 Z=X+Y 解:

1 / 283

Télécharger la présentation

第 4 章 机器数的运算方法及运算器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第4章 机器数的运算方法及运算器

  2. 目 录 4.1 机器数的加减运算及其实现 4.2 定点乘法及其实现 4.4 浮点数的算术运算 4.5运算器的组成和结构

  3. 4.1 机器数的加减运算及其实现 4.1.1 原码加法 4.1.2 补码加法 4.1.3 减法运算 4.1.4 补码加减运算线路的实现

  4. 4.1.1 原码加法 1.符号相同的两个原码相加:符号相同的两个原码相加,只要两个数的数值相加即可,其符号不变。 例4.1 设X=+10001,Y=+01011,求Z=X+Y 解: 即,Z=+11100。

  5. 例4.2 设X=-10001,Y=-01011,求Z=X+Y 解: 即,Z=-11100。

  6. 4.1.1 原码加法 2.符号相异的两个原码相加:先比较两数的绝对值大小,用绝对值大的数减去绝对值小的数,结果的符号是绝对值大的数的符号。 【例4.3】设X=+10101,Y=-01010,求Z=X+Y 解: 先比较X与Y的绝对值,本题∣X∣>|Y|,所以做减法|X∣-|Y|, 结果是Z=+01011

  7. 例4.2 设X=+01010,Y=-10111,求Z=X+Y 解: 先比较X与Y的绝对值,本题∣Y∣>|X| ,所以做减法|Y∣-|X|, 结果是Z=-01101

  8. 4.1.1 原码加法 用原码进行符号不同的两个数相加时有以下三步运算: ① 比较两个数的绝对值的大小; ② 绝对值大的数的绝对值减去绝对值小的数的绝对值; ③ 结果赋以绝对值大的那个数的符号。

  9. 4.1.2 补码加法 补码运算特点:①补码运算时,不用判断符号位,符号位与数值一块参与运算; ②两数相加之后,进位的最高位超出字长部分自动丢失。 1.定点补码运算性质 性质1 两数之和的补码等于两数补码之和。 [X+Y]补=[X]补+[Y]补

  10. 例4.5 设X=+11010,Y=-10101,用补码的加法求Z=X+Y 解:加数和被加数的数值位都是5位,在数值位之前加1位符号位。这样, [X]补=011010,[Y]补=101011 [X+Y]补= [X]补+[Y]补= 011010+101011=000101 所以,X+Y=+00101。 注意:在运算中,数值位和符号位有进位,本例采用单符号位,以2为模,进位的1就丢掉了。

  11. 例4.6 设X=+10101,Y=-11010,用补码加法求Z=X+Y 解:[X]补= 010101,[Y]补=100110 [X+Y]补=[X]补+[Y]补= 010101+100110=111011 所以,X+Y=-00101。

  12. 性质2 一个负数的补码的补码就是这个负数的原码。[[X]补]补=[X]原 例4.7 设有两个定点小数 X=-0.10011,Y=-0.11001,求这两个负数补码的补码。 解: [X]原=1.10011 [Y]原=1.11001 [X]补=1.01101 [Y]补=1.00111 [[X]补]补=1.10011=[X]原 [[Y]补]补=1.11001=[Y]原 补码这一性质,计算机中计算结果的补码均可化成该数的原码。

  13. 例4.8 设有两个定点小数 X=-0.1101,Y=0.0111,(-1<X+Y<0),求这两数之和。 解:[X]补=1.0011 [Y]补=0.0111 [X]补+[Y]补=1.0011+0.0111=1.1010 [X+Y]原=[[X]补+[Y]补]补=[1.1010]补=1.0110 所以,X+Y=-0.0110 用真值进行运算:X+Y=-0.1101+0.0111=-0.0110 结果相同。 用补码做加法是数值位连同符号位一起参加运算的。但是在有溢出的情况下,用一般的补码加法就得不到正确的结果,再看下面的例子。

  14. 例4.9 设有两个定点小数X=+0.10111,Y=+0.10001,用补码的加法求Z=X+Y 解:[X]补= 0.10111,[Y]补=0.10001 [X+Y]补= [X]补+[Y]补=0.10111+0.10001=1.01000 Z=X+Y=-0.11000 两个大于0.5的正数相加,结果就为负值,结果显然是错误的。

  15. 例4.10 设X=-0.10111,Y=-0.10001,用补码的加法求Z=X+Y 解:[X]补=1.01001,[Y]补=1.01111 [X+Y]补= [X]补+[Y]补=1.01001+1.01111=0.11000 Z=X+Y=+0.11000 两个绝对值大于0.5的负数相加,结果为正值,这也是错误的。 它们的和超出了机器数所能表示的最大范围,即产生了溢出,在有溢出的情况下,用一般补码加法就无法得到正确结果。

  16. 例4.11 设有两个定点小数X=+0.10111,Y=-0.10001,用补码的加法求Z=X+Y 解:[X]补= 0.10111,[Y]补=1.01111 [X+Y]补= [X]补+[Y]补 =0.10111+1.01111=0.00110 所以,Z=+0.00110,没有发生溢出,结果是正确的。

  17. 例4.12 设有两个定点小数X=-0.10111,Y=+0.10001,用补码的加法求Z=X+Y 解:[X]补=1.01001,[Y]补=0.10001 [X+Y]补= [X]补+[Y]补=1.01001+0.10001 =1.11010 [[X+Y]补]补=1.00110 Z=X+Y=-0.00110 所以,Z=-0.00110,没有发生溢出,结果也是正确的。

  18. 2.变形补码加法 变形补码是符号位用两位来表示的补码。 变形补码的定义为 : 对于变形补码,补码的加法性质公式同样适用,即: [X+Y]变形补= [X]变形补+[Y]变形补 [[X]变形补] 变形补=[X]原

  19. 用双符号位进行判断,若和的两个符号位相同(00或11),不发生溢出;若和的两个符号位相异(01或10),就说明发生了溢出。遇到溢出,就要停机进行如下处理:选取一个合理的比例因子H=2i,对每个加数都除以H,然后相加,其结果再乘以H,即得所求。

  20. 下面我们对例4.9和例4.10用变形补码加法来求结果。下面我们对例4.9和例4.10用变形补码加法来求结果。 【例4.13】设X=+10111,Y=+10001,用变形补码的加法求Z=X+Y 解:设比例因子H=2,则有 所以, X+Y=+101000

  21. 【例4.14】设X=-10111,Y=-10001,用变形补码的加法求Z=X+Y【例4.14】设X=-10111,Y=-10001,用变形补码的加法求Z=X+Y 解:设比例因子H=2, 则有: 所以:X+Y=-101000

  22. 说 明 ⑴ 舍入处理 在变形补码运算中,加数除以H=2i,是通过把[X]补右移I位得到的。在移位时,末几位可能超出机器的最末位而丢失,造成误差。为了减少误差,通常要进行舍入处理,一般有两种方法: ① 恒置1。即移位后机器末位总是1。上面的例子就 是用的恒置1的方法。 ② 0舍1入。即移出去的数是0则抹去,移出去的数 是1则进1到末位。 ⑵ 符号位扩展 补码在右移时,要注意符号位要一起移,且最左边一位要补上原符号位的值,这就叫做符号位扩展,即把符号位扩展到为3位。

  23. 说 明 总结以上,得出补码相加的规则: ① 若两数符号不同,相加的结果即为和的补码。 ②若两数符号相同,相加后若其和的符号不变,则结果是和的补码。 ③若两数符号相同,相加后若其和的符号改变,则表示发生了溢出。两个正数相加,结果的符号为“01”,表示发生正溢出;两个负数相加,结果的符号为“10”,表示发生负溢出。

  24. 4.1.3 减法运算 性质3 两数之差的补码等于被减数的补码与负的减数补码之和。[X-Y]补=[X]补+[-Y]补 由性质1推导得:[X-Y]补=[X+(-Y)]补=[X]补+[-Y]补 例4.15 两个正数相减,被减数大于减数的例子。设X=+11001,Y=+10001,求Z=X-Y。 解:[X]补= 00.11001,[-Y]补=11.01111 [X-Y]补= [X]补+[-Y]补= 00.11001+11.01111=00.01000 X-Y=+01000 所以,Z=+01000

  25. 例4.16 两个正数相减,被减数小于减数的例子。设X=+10011,Y=+11001,求Z=X-Y。 解:[X]补= 00.10011,[-Y]补=11.00111 [X-Y]补= [X]补+[-Y]补= 00.10011+11.00111 =11.11010 X-Y =-00110 所以,Z =-00110

  26. 【例4.17】两负数相减,被减数大于减数的例子。设X=-10011,Y=-11001,求Z=X-Y。【例4.17】两负数相减,被减数大于减数的例子。设X=-10011,Y=-11001,求Z=X-Y。 解:[X]补= 11.01101,[-Y]补=00.11001 [X-Y]补 = [X]补+[-Y]补 =11.01101+00.11001 =00.00110 X-Y =+00110 所以,Z= +00110

  27. 【例4.18】两负数相减,被减数小于减数的例子。设X=-11001,Y=-10011,求Z=X-Y。【例4.18】两负数相减,被减数小于减数的例子。设X=-11001,Y=-10011,求Z=X-Y。 解:[X]补= 11.00111,[-Y]补=00.10011 [X-Y]补=[X]补+[-Y]补=11.00111+00.10011 =11.11010 X-Y=-00110 所以,Z=-00110

  28. 4.1.4 补码加减运算线路的实现 在线路实现上,若已有[Y]补,求[-Y]补可用把[Y]补每一位(包括符号位和数值位)取反,再在最低位加1来实现。 实现补码加减运算的逻辑电路如右图所示。

  29. 4.1.4 补码加减运算线路的实现 图中各个部件的名称和功能是: F 表示多位并行加法器,它的功能是接收参加运算的两个数X和Y,实现加法运算,并在输出端给出本次运算结果。加法器的最低一位可以接收一个进位信号1→F。 X和Y临时存放参加运算数据的两个寄存器,X还用来保存运算的结果。 A “与”门,功能是控制寄存器X输出的内容是否送到加法器F的左输入端,用X→F信号控制。 C “与”门,功能是控制加法器F的运算结果是否写回寄存器X,用F→X信号控制。 B “与或”门,功能是通过控制信号Y→F和→F分别把Y寄存器中的内容是原数据送加法器F还是各位取反后送加法器F。

  30. 运算原理如下: 参加运算的两个数被送到寄存器X和Y,以补码的形式保存。要实现[X+Y]补→X,需给出X→F、Y→F两个控制信号,就可以把[X]补和[Y]补送入加法器F的两个输入端,加法器再完成两个补码[X]补和[Y]补的相加。加法完成之后,再通过F→X命令,把相加结果送入寄存器X。 若要完成[X-Y]补→X,“与”门A送出的还是[X]补,但“与或”门B送出的应是Y每一位的取反值,并在加法器的最低位加进位信号1→F,这样就得到[-Y]补,通过加法器F相加,就实现了[X]补+[-Y]补,也就是[X-Y]补。再通过F→X命令,把[X-Y]补送入寄存器X。

  31. 4.2 定点乘法及其实现 4.2.1 原码一位乘法及其实现 4.2.2 定点补码一位乘法及其实现 4.2.3 原码两位乘法 4.2.4 补码两位乘法(了解)

  32. 4.2.1 原码一位乘法及其实现 在定点计算机中,用两个原码表示的数相乘,其乘积的符号由两数的符号位异或得到,乘积的数值部分是两数的绝对值相乘之积。 例如,有两个数X和Y,[X]原=XsX1X2…Xn [Y]原=YsY1Y2…Yn 则 [X*Y]原=[X]原*[Y]原。 乘积的符号位为:Xs⊕Ys 乘积的数值部分为:(X1X2…Xn)*(Y1Y2…Yn)。

  33. 例如:X=0.1001,Y=0.1101 求Z=X*Y 解: 0.1001 X 0.1101 1001 0000 1001 1001 0.01110101 得到相乘结果X*Y= 0.01110101

  34. 在计算机中其运算规则是:根据乘数Y绝对值每个数位上的值Yi是“1”还是“0”(从最低位Y0开始),决定本次部分积是加上被乘数X的绝对值,还是加上全“0”,得到的新部分积右移一位,再重复上面的动作,直到乘法做完为止。

  35. 【例4.20】X=+11010,Y=+10110,求Z=X*Y 解:[X]原=0.11010,[Y]原=0.10110 乘积的符号位Z0=0⊕0=0 乘积的数值部分是两数的绝对值相乘。开始时,部分积为全“0”。

  36. 所得结果Z=+0.1000111100。 有时部分积的符号位出现“1”,并不是出现了负数,而是部分积的值超出了“1”,右移时符号位应补“0”。

  37. 实现原码一位乘法的逻辑电路框图 要实现原码一位乘法,乘积的符号可以用异或门实现,异或门的两个输入为相乘两数的符号,输出即为乘积的符号。 下图给出了实现原码一位乘法的逻辑电路框图,以实现对相乘两数的数值位相乘。

  38. 主要组成部件有: 寄存器A,存放计算的部分积Z,具有自动移位功能; 寄存器B,存放被乘数X; 寄存器C,存放乘数Y,具有自动移位功能; 加法器F,进行部分积和被乘数相加; 计数器i,用来控制逐位相乘的次数。 控制信号A→F、B→F分别通过与门控制部分积、被乘数送入加法器F进行相加;控制信号A/2→A、C/2→C分别控制寄存器A、C自行右移一位。

  39. 4.2.2 定点补码一位乘法及其实现(重点) 假设两个数X和Y相乘,X=x0.x1x2x3…xn;Y=y0.y1y2y3…y 两个正数补码数相乘,其结果应直接得到乘积的补码: [X]补*[Y]补=[X*Y]补 因为:[X*Y]补=X*Y=[X]原*[Y]原=[X]补*[Y]补 那么:X、Y为任意符号呢?

  40. 当被乘数X的符号为任意,乘数Y的符号为正。因为Y≥0,[Y]补=Y,则 [X]补*[Y]补=[X]补*Y=[X*Y]补 由于:[X]补*[Y]补 =[X]补*Y =[X]补*(0.y1y2y3…yn) =[X*Y]补

  41. 当被乘数X的符号为任意,乘数Y的符号为负。因为Y<0,则 (3)综上所述:

  42. ⑶ BOOTH法 假设两个数X和Y相乘,X=x0.x1x2x3…xn;Y=y0.y1y2y3…y当被乘数X和乘数Y的符号都任意时侯。 [X*Y]补=[X]补*(0. y1y2y3…yn)-[X]补*y0 =[X]补*(- y0+0. y1y2y3…yn) =[X]补*(-y0+y1*2-1+y2*2-2+y3*2-3…yn*2-n) =[X]补*{(y1-y0)+(y2-y1)*2-1+(y3-y2)*2-2+(y4-y3) *2-3…(yn-yn-1)*2-(n-1)+(0-yn)*2-n}

  43. 写成递推公式: [Z0]补=0 [Z1]补=2-1*{[Z0]补+(Yn+1-Yn)*[X]补}Yn+1=0 [Z2]补=2-1*{([Z1]补+(Yn-Yn-1)*[X]补)} [Z3]补=2-1*{([Z2]补+(Yn-1-Yn-2)*[X]补)} ┇ [Zi]补=2-1*{([Zi-1]补+(Yn-i+2-Yn-i+1)*[X]补)} ┇ [Zn+1]补=([Zn]补+(Y1-Y0)*[X]补) 最后乘积为[Zn+1]补式中,Yn+1为附加位,在Yn+1以后,Yn+1=0。

  44. 由此,可以总结出比较法补码乘法的规则: 在作补码一位乘法时,在乘数的最末位后面再加一位附加位yn+1。开始时,yn+1=0,第一步运算是根据yn+1 yn这两位的值判断后决定,然后再根据yn yn-1这两位的值判断第二步该作什么运算,再根据yn-2 yn-3这两位的值判断第三步该作什么运算,如此等等。因为每进行一步,乘数都要右移一位,yn-1 yn就移到yn yn+1位置上。作第三步时,原来的yn-2 yn-1移到了yn-1 yn位置上。所以每次只要判断yn yn+1这两位的值就行。判断规则如表4-1所示。

  45. 补码一位比较乘法规则

  46. 比较法计算用流程图表示

  47. 【例4.20】利用补码一位乘法计算Z=X*Y ,其中X=-0.1101,Y=0.1011。 解:[X]补=11.0011,[Y]补=0.1011,[-X]补=00.1101 乘积的数值部分是两数的绝对值相乘。开始时,部分积为全“0”。 • 所以[X*Y]补=11.01110001, • 结果Z=X*Y=-0.10001111。

  48. 部分积 乘数/判别位 说明 00.0000 01011 0 yn+1=0 判别位10 • +[-x]补00.1101部分积加+[-x]补 • 00.1101 • 00.011010101 1 右移1位,判别位11 • 00.0011 01010 1 右移1位,判别位01 • +[x]补11.0011 +[x]补 • 11.0110 • 11.101100101 0 右移1位,判别位10 • +[-x]补 00.1101 +[-x]补 • 00.1000 • 00.0100 00010 1 右移1位,判别位01 • +[x]补 11.0011 +[x]补 • 11.0111 0001最后一步不移位

  49. 实现一位补码乘法的逻辑原理图如图4-4所示。它与一位原码乘法的逻辑原理图有些相似,不同的地方有以下几点: ⑴被乘数和乘数的符号位参加运算; ⑵乘数寄存器C有附加位Yn+1,其初始状态为“0”。当乘数和部分积每次右移时,部分积最低位移入寄存器C的首位位置,所以寄存器C必须是具有右移功能的寄存器。 ⑶被乘数寄存器B的每一位用原码或反码(可用触发器的Q端或端输出)经多路开关传送到加法器对应位的一个输入端,而多路开关的控制信号由Yn-1、Yn的输出译码器产生。当Yn-1Yn=01时,送[X]补;当Yn-1Yn=10时,送[-X]补,即送寄存器B内容的反码且在加法器末位加1。 ⑷寄存器A用来保存部分积,该寄存器也应具有右移的功能,其符号位与加法器的符号位始终一致。 ⑸当计数器i=n+1时,封锁A/2→A,C/2→C控制信号,使最后一步不移位。

  50. 补码一位乘法逻辑原理图

More Related