计算机组成与原理第八章运算方法课件.ppt

上传人:石*** 文档编号:47506161 上传时间:2022-10-02 格式:PPT 页数:108 大小:4.25MB
返回 下载 相关 举报
计算机组成与原理第八章运算方法课件.ppt_第1页
第1页 / 共108页
计算机组成与原理第八章运算方法课件.ppt_第2页
第2页 / 共108页
点击查看更多>>
资源描述

《计算机组成与原理第八章运算方法课件.ppt》由会员分享,可在线阅读,更多相关《计算机组成与原理第八章运算方法课件.ppt(108页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、计算机组成与原理课件第八章运算方法第1页,此课件共108页哦 1.几种常用数据格式的算术运算算法和它们的硬件实现。包括定点数表示及其加、减、乘、除过程和硬件实现,二十进制(或BCD)码的格式和操作。2.提高算术操作性能的专用硬件专用硬件。(流水线、查找表、华莱士树)3.介绍浮点数浮点数的格式和它们的算术操作。包括浮点数的格式,性质,以及加、减、乘、除过程和硬件实现,还有IEEE 754 浮点数标准。执行算术和逻辑运算指令以及微操作是任何执行算术和逻辑运算指令以及微操作是任何CPUCPU的一个必不可少的重要部分。的一个必不可少的重要部分。第2页,此课件共108页哦8.1 8.1 无符号表示法无符

2、号表示法 非负数码非负数码:表示0或一个正数。n位非负数码的数值范围为0(所有位都为0)到2n-1(所有位都为1)。2 2的补码的补码(简称补码):既能表示正数又能表示负数。n位数的数值范围为-2-2n-1n-1到到2 2n-1n-1-1-1。当最高位为1时表示负数,最高位为0时表示正数(包括0)。正数(包括0)的补码与非负数码相同,负数的补码为其绝对值的2的补码,等于它的绝对值按位取反(该数的1的补码,简称为反码),加1。有两种常用的无符号表示法:有两种常用的无符号表示法:第3页,此课件共108页哦 例如,求-5的4位补码表示,首先求出它的绝对值5(0101),产生反码值1010,再加1得补

3、码1011。下表列出了8位二进制数的非负数码和补码表示的数值。表表8.1 8.1 无符号表示的数值无符号表示的数值 第4页,此课件共108页哦8.1.1 加法和减法 加法直接采用二进制加法实现,硬件中通过使用一个并行加法器来实现,如下图所示。X和Y是8位寄存器,该电路实现微操作 ADD:XX+Y 只要结果在正常范围内(对非负数码而言为0到2n-1,对2的补码而言为-2n-1到2n-1-1),该电路就能得到正确的结果。图图8.1 8.1 微操作微操作XX+YXX+Y的实现的实现 第5页,此课件共108页哦当结果不能表示为一个8位数值时就会导致溢出:例如,非负数码加法255+1,即1111 111

4、1+0000 0001,直接加得 1 0000 0000,有9位,不能存于8位寄存器中。并行加法器产生额外的进位输出,它用来标志算术溢出算术溢出。在非负数码中,这个进位能置溢出标志溢出标志,它提示系统产生了溢出,所得结果不完全正确,系统应进行相应的结果修复处理或错误处理。在补码中,判断溢出不但要检查进位输出,还要检查结果最高位的进位输入。如果这两者相等,那么不产生溢出,否则产生溢出。见下图:第6页,此课件共108页哦图图8.2 8.2 补码加法的溢出产生补码加法的溢出产生 在(a)和(c)中最高位的进位输入和进位输出相等,不产生溢出;而在(b)和(d)中两者不等,产生溢出。溢出溢出溢出溢出第7

5、页,此课件共108页哦 非负数码的减法可以转换成加法,即X Y通过执行X+(-Y)来实现。首先将Y转换成 Y的补码,再将 Y的补码与X的补码相加即可得X Y的补码:X Y补=X补+-Y补左图给出了执行微操作SUB:XXY的一种硬件实现。图图8.3 8.3 微操作微操作XXXXY Y的实现的实现 第8页,此课件共108页哦 对于非负数码,减法的结果不会比2n-1大,但可能比0小。例如,12执行为0000 0001+1111 1110=1111 1111,即255。图中(b)和(d)溢出,而(a)和(c)没有溢出。图图8.4 8.4 无符号无符号2 2的补码减法的溢出产生的补码减法的溢出产生 同样

6、,补码减法也将XY转换成X+(Y)来执行,而判断溢出的条件与补码加法相同。此时,如果减法(通过补码加法实现)产生了进位输出0而不是1时,则发生了溢出。溢出溢出溢出溢出第9页,此课件共108页哦8.1.2 乘法 乘法可以看成加法的重复。一个数乘以n与n个该数相加的结果相同。可以用下列算法来实现乘法xy。z=0;FOR i=1 TO y DO z=z+x 这种算法不理想,原因是速度慢、计算xy的时间不确定。我们希望不论x、y取何值,执行乘法的时间相同。x=2 7 y=2 5 3 8 1 1 3 5 5 4 6 8 3 1 第10页,此课件共108页哦 这个过程被称为移位移位相加乘法相加乘法。首先计

7、算每个部分积部分积并左移到正确位置,然后再将所有的部分积相加相加。对这个算法稍做修改,使得硬件实现更为简单,就可得到无符号非负二进制数的乘法基本算法。第一个修改是每求出一个部分积后就计算和:x=2 7 y=2 5 3 8 1 1 3 5 1 4 3 1 计算的和 5 4 6 8 3 1 最终计算的和 因为硬件上,二输入加法器很容易实现,而三输入或多输入的加法器则变得非常复杂。任何时候都没有多于两个数的加。注意:每一个部分积都逐次左移一位,因此排列的位置不同。在当前和与部分积的相加中,某些位的运算不必要。第11页,此课件共108页哦第二个修改用右移当前和代替左移部分积:x=27 y=253 81

8、 右移一位 81 1被右移出,故不参加加法运算 135 1431 右移一位 1431 3 1被右移出,故不参加加法运算 54 6831 最后右移一位 6831 每次都是相同的两列数字进行加法。已经右移到这两列右边的数字只是简单的写下,不进行加法。第12页,此课件共108页哦 若用二进制,不是乘以0就是乘以1,因此部分积不是0 0(X0=0)就是被乘数的值(X1=X)。算法:两个n位寄存器的值X和Y的移位相加乘法 n位寄存器U和V:保存结果 (U保存结果的高n位,V保存结果的低n位)一位寄存器C:用来保存执行加法时的进位 C=0,U=0;FOR i=1 TO n DO IF Y0=1 THEN

9、CU=U+X;线性右移 CUV;循环右移 Y 二进制乘法 第13页,此课件共108页哦考虑乘法:1311,即X=1101,Y=1011,n=4表8.2第14页,此课件共108页哦 算法的RTL代码如下所示。其中1 1,2 2,3 3是连续的状态。1 1:C0,U0,in Y02 2:CUU+X 2 2:ii-1 3 3:shr(CUV),cir(Y)Z3 3:GOTO 2 2 Z3 3:FINISH1 表8.3列出了1311的RTL代码的执行步骤。同样初始化X=1101,Y=1011。除了在每个周期增加了满足的条件和执行的微操作外,表8.3同表8.2一样。第15页,此课件共108页哦表表8.3

10、 11018.3 110110111011移位相加乘法移位相加乘法RTLRTL代码的执行轨迹代码的执行轨迹 第16页,此课件共108页哦根据 RTLRTL代码设计硬件代码设计硬件。硬件包括两部分:寄存器部分:微操作在此执行;控制部分:产生需要的控制信号和状态值。X n位寄存器 Y、U、V n位移位寄存器 (当shr信号有效时它们右移一位)寄存器i 存储值n的递减计数器 C和FINISH 一位寄存器 在寄存器之间设置数据通路来实现RTL代码中的微操作所要求的数据传送。由于在算法的RTL代码中,当i=0时,Z=1;因此将i的所有位异或在一起产生Z,从而满足仅当i的所有位都为0(i=0)时,Z才为1

11、。否则,Z为0,用来驱动状态计数器装载1。第17页,此课件共108页哦图图8.5 8.5 移位移位相加乘法算法的相加乘法算法的硬件实现硬件实现 3第18页,此课件共108页哦 考察图8.5给出的控制部分,看它是如何实现RTL代码的。当START置1时,State Counter和FINISH清零,Decoder工作。Decoder输出1 1,使U清零,数n装载到i中。State Counter加1,Decoder输出2 2。使i减1,并且,若Y0=1,将U+X保存在CU中;若Y0=0,则C、U的值不变。State Counter加1到10,Decoder输出3 3。此时,C、U、V都右移一位。

12、以下两件事必有一件发生:当Z=0时,State Counter被装载值01,Decoder输出2 2,实现操作“GOTO 2 2”。否则Z=1时,FINISH置1,Decoder使能端置0,不再输出1 1,2 2,3 3,硬件停止工作。第19页,此课件共108页哦如果Y值不要求保存,可将其值保存在V寄存器中,则乘法转换为UVX V。每次检查V的最低位V0,若为1,执行加法。下一步执行右移时,该位将丢弃,因为它不再需要使用。修改后的RTL代码为:1 1:C0,U0,in V02 2:CUU+X 2 2:ii-1 3 3:shr(CUV)Z3 3:GOTO 2 2 Z 3 3:FINISH1 与前

13、面的RTL代码有两处不同:一是 CUU+X的条件由Y02 2改为V02 2;二是减少了cir(Y)的操作。硬件实现上,除了C和U的LD信号改为V02 2,以及去掉了寄存器Y之外,该代码的硬件实现与图8.5的相同。优化算法第20页,此课件共108页哦下表显示改进后的RTL代码执行11011011的步骤。表表8.4 8.4 改进后改进后的的RTLRTL代码代码的执的执行步行步骤骤 除了初始化V寄存器和去掉Y寄存器之外,该表与表8.3相同。第21页,此课件共108页哦8.1.2.1 布斯算法 对于补码,上面的算法并不总能得出正确的结果。原因是该算法仅能处理两个正数相乘。例子(1101 1011)中,

14、补码表示分别为3和-5,它们的积应是15;而上面的算法将得出结果1000 1111,即 113,显然是错的。当有一个或两个操作数为负数时,执行下面的程序,上面的算法则可以使用:IF 被乘数 0 THEN 被乘数-被乘数;IF 乘数 71,商有3位,比商寄存器的位数(2位)还要多一位,因此产生溢出。这种溢出检测的好处是可以防止除以0的操作,此时也会产生溢出。第31页,此课件共108页哦二进制值除法二进制值除法:二进制除法中,商只可能为0或1。当被除数大于等于除数时,商1;否则商0。下面的算法实现了两个二进制值的移位相减除法。被除数在初始化时加载到UV,其中U保存高n位,V保存低n位。除数和商分别

15、保存在n位值X和Y中。余数保存在U中。C为1位值,用来保存U的移出位。U X THEN 产生溢出并终止算法;Y=0;C=0;FOR i=1 TO n DO 线性左移 CUV;线形左移 Y;IF CU X THEN Y0=1,U=CU X 考虑第一步就终止的情况。如1127,若n=4,则UV=0111 0000,X=0111。由于UX,均为0111,将终止算法。如果继续执行,将产生商16(1 0000)和余数0。但值1 0000不能保存在4位的Y中,产生溢出。第32页,此课件共108页哦 下表列出了该算法执行14713的步骤。即U=1001,V=0011,X=1101,n=4。表表8.7 8.7

16、 移位移位相减算法的执行步骤相减算法的执行步骤 第33页,此课件共108页哦 算法的RTLRTL代码代码。其中X、U、V、Y为n位值,C和OVERFLOW为1位值。当i=0时,Z=1;当UX时,G=1。FINISHI置1则算法结束。1 1,2 2,3 3,4 4是连续的状态。G 1 1:FINISH1,OVERFLOW1 2 2:Y0,C0,OVERFLOW0,in 3 3:shl(CUV),shl(Y),ii-1(C+G)4 4:Y0 1,UU+X+1 Z4 4:GOTO 3 3 Z 4 4:FINISH1 大部分的RTL语句由算法直接转换而成,注意条件 CUX等价于条件 UX(G=1)或(

17、C=1),即(C+G);算法中的U=CUX使用补码加法 UU+X+1实现。第34页,此课件共108页哦 下表列出了该RTL代码执行除法:14713的执行步骤。初始化时U=1001,V=0011,X=1101,n=4。表表8.8 8.8 移移位位相减相减除法的除法的RTLRTL代码的执行代码的执行步骤步骤 第35页,此课件共108页哦该算法的硬件实现。图图8.7 8.7 移位移位相相减除法的硬件实现减除法的硬件实现 2第36页,此课件共108页哦 以上称为不恢复余数的除法算法不恢复余数的除法算法,这种算法是仅当CU X时,才执行减法 UUX。第二种类型的除法是恢复余数的除法算法恢复余数的除法算法

18、。它不是在执行减法之前先检查是否 CUX,它是先执行减法再比较CU是否大于等于X。如果 CUX,则该算法再执行一次 UU+X,使U恢复为原来值。恢复余数的算法有相同的步骤:首先检测溢出。如果没有产生溢出,则进入移位相减循环。它们的主要区别是处理比较的方式不同。不恢复余数的算法是先进行CU和X的比较,如果CUX则执行减法 UCUX。恢复余数的算法则相反,先执行减法 UUX,如果发现 CUX(结果为负),则说明不应执行减法,此时通过执行加法 UU+X,使U恢复为原来值。第37页,此课件共108页哦 恢复余数的算法。被除数初始化时保存在UV中,除数保存在X中,商保存在Y中,余数最后保存在U中。U、V

19、、X、Y都是n位值,C是一位值。CU=U+X+1;U=U+X,IF C=1 THEN 产生溢出并终止算法;Y=0;FOR i=1 TO n DO 线性左移 CUV;线形左移 Y;IF C=1 THEN U=U+X+1 ELSE CU=U+X+1 IF C=1 THEN Y0=1 ELSE U=U+X 算法第一步为CU与X的比较第38页,此课件共108页哦CUCU与与X X的比较的比较。操作 C U=U+X+1实际上实现了两个功能:显式的功能是减法 U X,而隐含的功能是U和X的比较。如果UX,该操作将C置1,否则将C置0。如下所示:在(a)和(b)中,UX,C置1;在(c)中,UX,C置0。图

20、图8.8 8.8 在计算在计算C U=U+XC U=U+X+1+1的同时比较了的同时比较了U U和和X X:(a a)正结果,()正结果,(b b)零结果,()零结果,(c c)负结果)负结果 第39页,此课件共108页哦整个算法整个算法的分析。头两条语句是比较U和X的大小。如果U X,将产生溢出,此时U U+X+1将C置1。否则不溢出,它将C置0。第二条语句是将U恢复为原来值,如果没有溢出,将初始化Y并进入移位相减循环。移位相减循环从左移CUV和Y 开始的。而第一条IF语句(IFC=1THENU=U+X+1ELSECU=U+X+1)实现了减法(U=U X)和CU与X的比较(如果CU X则C=

21、1)。下一条IF语句(IFC=1THENY0=1ELSEU=U+X)当C=1时,CU X,减法有效,只需在商的相应位(Y0)上商1。而当C=0时,CU X,加法将U恢复为原来值。如C=1,则CU一定比X大,执行减法U U+X+1,并且使C仍保持1值。如C=0,执行减法CU U+X+1。该减法仅当CU X时,使C置1。结果是:无论执行哪个减法,都有 U=UX,以及当CU X时C置1,否则置0。第40页,此课件共108页哦两个例子两个例子。第一个例子为22513,它的执行步骤如表8.9(a)所示。首先初始化X=1101,n=4。第一个减法将C置1,说明将产生溢出。(实际上,由于22513=17 余

22、4,而17的二进制是1 0001,因此不能存于4位的寄存器中。)下一步恢复U值并终止算法。表表8.9 8.9 恢复余数除法算法的执行步骤(恢复余数除法算法的执行步骤(a a)有溢出,)有溢出,另一个例子14713,执行步骤如表8.9(b)所示。没有溢出。算法的前几步检测溢出和初始化Y。接下来每三步为一组表示循环的一次迭代。第41页,此课件共108页哦该算法正确地计算了14713(X=1101),商为11,余数为4。表表8.9 8.9 恢复余数除法算法的执行步骤恢复余数除法算法的执行步骤(b b)无溢出)无溢出 每次迭代都执行相似的移位和减法/比较操作。每次迭代的最后一步不是更新商(保存在Y中)

23、就是将余数恢复为原来值(保存在U中)。第42页,此课件共108页哦恢复余数除法算法的恢复余数除法算法的RTLRTL代码代码。它采用的值与不恢复余数算法中采用的值基本相同。它与不恢复余数算法非常接近。OVERFLOW为1位值,当溢出发生时置1,否则置0。FINISH为1位值,当算法终止时置1。不管是循环结束的正常终止还是溢出,都要将FINISH置1。与其他算法相同,计数器i的值从n递减到0。当i=0时,Z=1。除非遇到GOTO操作,在正常情况下状态从1 11-1 122 23-43-41-4 42。第43页,此课件共108页哦 1 11:CUU+X+1;1 12:UU+X C1 12:FINIS

24、H1,OVERFLOW1 2 2:Y0,OVERFLOW0,in 3 3:shl(CUV),shl(Y),ii-1 C4 41:UU+X+1 C4 41:CUU+X+1 C4 42:Y01 C4 42:UU+X Z4 42:FINISH1 Z4 42:GOTO 3 3 CU=U+X+1;U=U+X,IF C=1 THEN 产生溢出并终止算法;Y=0;FOR i=1 TO n DO 线性左移 CUV;线形左移 Y;IF C=1 THEN U=U+X+1 ELSE CU=U+X+1 IF C=1 THEN Y0=1 ELSE U=U+X 第44页,此课件共108页哦表表8.10 8.10 恢复余数

25、恢复余数除法算法除法算法的的RTLRTL代码代码的执行步的执行步骤骤 14713第45页,此课件共108页哦该算法的硬件实硬件实现现如图所示。减少了产生G的比较器,但并行加法器的输入更加复杂。因为此时要求它进行两种操作U+X或U X。同时,由于有6个状态,状态计数器和译码器要稍微大一些。图图8.9 8.9 恢复余数除法的硬件实现恢复余数除法的硬件实现 42i第46页,此课件共108页哦补码相除补码相除 补码相除没有一种通用的算法。一般是通过对正负数值进行转换来实现补码相除。该算法如下所示。除法可以使用恢复余数的硬件实现或不恢复余数的硬件实现。IF 被除数 0 THEN 被除数-被除数;IF 除

26、数 Y、X=Y还是X Y时,U应为X Y,即X+Y+1。当X Y时,Us与Xs的值相同;X Y时,C=1,Z=0;当X=Y时,C=1,Z=1;当X Y),U中已保存了结果的正确幅值(X Y)。此时仅需要考虑结果的符号,即把Xs赋给Us。CZ为真时(C=1且Z=1,即X=Y),U中也已保存了结果的正确幅值0。此时仅需要把结果的符号设置为0,使结果以+0的格式保存。C为真时(C=0,即X Y、PM=1且X=Y、PM=1且X Y、X=Y和X T1/k,降低了加速比。鉴于此,应该使每段流水线的延时尽可能相等,从而提高加速比。第75页,此课件共108页哦 实际上,锁存器需要一定的时间来保存数据。这是流水

27、线的额外开销。对前例,若锁存器的延时为2 ns,则实际加速比为:S100=nT1=10020ns=1.65(k+n1)Tk(2+1001)12ns 若只计算一个值A1,则加速比小于1:S1=nT1=120ns=0.83(k+n1)Tk(2+11)12ns 此时流水线的速度实际上比非流水线的低,这是因为每段流水线都增加了锁存器的延时。以上是基本的流水线技术。在11章中我们将看到,流水线也用于加快CPU中的取指令,指令译码和执行指令。第76页,此课件共108页哦8.4.2 查找表 理论上,每一组合电路都可通过将ROM配置成查找表查找表来实现:组合电路的输入数据输入数据作为该ROM的输入地址输入地址

28、,而组合电路的输出结果输出结果作为该地址中保存的数据数据。对组合电路的任何输入,通过编程,ROM都能输出正确的结果。例如,用一个41的ROM来模拟一个2输入的与门与门。下图给出了该与门与门和它等价的查找表。与门的输入作为ROM的输入地址,而ROM的输出数据对应于与门的输出。通过编程ROM,对于所有可能的X和Y,ROM的输出与与门的完全相同。第77页,此课件共108页哦 用查找表ROM计算UVXY的实现方法如图所示。寄存器X和Y提供查找表的输入地址,查找表的输出数据为X与Y的积,它被输入到寄存器UV中。U、V、X、Y均为4位的寄存器,X与Y 的积为8比特数据,因此共需要256个地址来保存所有的积

29、。例如,地址1011 1101保存数据1000 1111,即143,它是1011(11)与1101(13)的积。图图8.16 8.16 用查找表实现的乘法器用查找表实现的乘法器 第78页,此课件共108页哦 很多算法可以通过查找表ROM来实现,而且与前面的算法实现相比,查找表可能更具有优势。例如,图8.16给出的硬件实现比图8.5给出的移位相加的硬件实现更简单,执行速度更快。随着操作数位数的增加,查找ROM的大小将迅速增大。实现4位乘法器的ROM大小为2568,而等价的8位乘法器将需要64K16的ROM。8.4.3 Wallace树 Wallace Wallace树树是用来实现两数相乘的一种组

30、合电路。尽管与移位相加的乘法器相比,所需的元器件要多一些,但它的运行速度要快得多。Wallace树使用几个进位保存加法器和仅仅一个并行加法器实现乘法。第79页,此课件共108页哦 进位保存加法器能同时执行三数相加,而不是两数加。它不是输出一个结果,而是输出一个和S以及一组进位位,如图。由于进位位通过加法器没有延时,因此它比并行加法器要快。它不生成最终和。图图8.17 8.17 一个进位保存加法器一个进位保存加法器 每位Si是位Xi、Yi、Zi的二进制和,进位位Ci+1是该和产生的进位。要得到最终和,必须将S和C相加。例如,X=0111,Y=1011,Z=0010,进位保存加法器将输出和S=11

31、10,进位C=00110。用一个并行加法器将S与C相加,就可以求出最终结果10100(20),即0111(7)+1011(11)+0010(2)的和。注意,因为在产生Si同时产生Ci+1,与S相比,C必须左移一位。第80页,此课件共108页哦 为了使用进位保存加法器实现乘法,首先求出每一个部分积,再将这些部分积输入到进位保存加法器中,例如:x=111y=110000PP0111PP1111PP2101010求出的最终和 根据Y的每一位为1还是为0,部分积选择X或0并左移到正确的位置。本例中,因为PP2为Y2的部分积,要将X的值111左移2位,即PP2实际为11100。类似的,由于PP1为Y1的

32、部分积,要左移1位。图8.18给出了为本例生成部分积的一种方法。第81页,此课件共108页哦图图8.18 8.18 用用WallaceWallace树生树生成乘法的部成乘法的部分积分积 第82页,此课件共108页哦 可以用一个5位的进位保存加法器对部分积PP0、PP1、PP2进行加法。然后用一个并行加法器将输出S和C相加,就可以得到X与Y的最终乘积。下图给出了该乘法的硬件实现。图图8.19 8.19 用进位保用进位保存加法器实现存加法器实现3333的的乘法器乘法器 第83页,此课件共108页哦 图8.19给出的是一个最小Wallace树,不能完整的说明Wallace树的设计原则。下图给出两个4

33、位数相乘的Wallace树的设计。考虑乘法10111110。它产生部分积PP0=000 0000,PP1=001 0110,PP2=010 1100,PP3=101 1000。第一个进位保存加法器的输出为:S=011 1010,C=0000 1000。第二个进位保存加法器的输出为:S=0110 1010,C=0 0011 0000。并行加法器输出最终积:1001 1010。第一个进位保存加法器实现PP0、PP1、PP2的加法;第二个进位保存加法器将PP3与S和C相加;最后通过一个并行加法器输出积。图图8.20 448.20 44的的WallaceWallace树乘法器树乘法器 0第84页,此课

34、件共108页哦 部分积的个数随着乘数位数的增加而增加。因此当乘数位数较大时,Wallace树可以利用并行操作。图中给出两个8位数相乘的Wallace树。图图8.21 888.21 88的的WallaceWallace树乘法器树乘法器 第85页,此课件共108页哦8.5 8.5 浮点数浮点数 定点数仅能表示整数而不能表示小数,计算机用浮点数浮点数来表示小数。8.5.1 数据格式 浮点数的格式类似于科学记数法。一个数在科学记数法中包含:符号,小数或有效值(也叫尾数)和指数(通常叫阶)。例如,数1234.5678可以表示为 1.2345678103,其中符号为负号,有效值为1.23456789,指数

35、为3。在这个例子中采用10作为基数,计算机一般都以2为基数表示浮点数。必须对浮点数进行规格化规格化,即浮点数的有效值是一个没有前导0的小数。于是1234.567就只有一个有效的浮点表达:.1234567104,而不能是1.234567103或1234567.10-3。规格化第86页,此课件共108页哦 0不能被规格化。要用一个特殊值表示0,在运算中,还要把0做为特殊情况处理。类似的,正无穷大和负无穷大也要用一个特殊值来表示,并且也需要特殊处理。另外,非法操作,如/或对负数开平方,我们称其结果为不存在的数不存在的数,记为NaNNaN。NaNNaN也要用一个特殊值来表示,在浮点数算法中NaNNaN

36、也要求特殊处理。特殊值 浮点数格式。每个浮点数包括1位符号,定长的有效值和阶。浮点数X记为XSXFXE,其中XS表示符号,XF表示有效值,XE表示阶。例如,值1234.5678(=.12345678104)被保存为XS=1,XF=12345678,XE=4。因为每个数据都以正常格式存储,因此它隐含表示基数点位于有效值的最高有效位的左边,并且不需要明确地表示出来。浮点数格式第87页,此课件共108页哦 阶没有符号位,阶值可用补码表示,但最好是用移码移码。阶的移码是在实际阶值上加一个偏移量,其和被保存在阶中。假设XE有四位,它可以表示从8到7的所有阶码,将实际阶值加一个偏移量8,其和保存在XE中,

37、则最小阶值8的移码为 8+8=0 或二进制的 0000,最大阶值7的移码为7+8=15=1111。二进制表示的规格化浮点数(除了0、+/-、NaN)的有效值的最高位为1,在有效值寄存器中可以不保存该位。移码第88页,此课件共108页哦8.5.2 数据性质 精度精度表示浮点数的精确性,定义为有效值的位数。若计算机规定浮点数的有效值为8位,则它的精度为8位。有效值的位数越多,CPU的精度越高,表示的数据越精确。许多计算机中有两种浮点数格式:单精度浮点数和双精度浮点数。双精度浮点数的位数是单精度浮点数的两倍。间距间距为两个相邻值的差的绝对值。其大小由阶值的大小决定。例如,浮点数:.1011 1010

38、23,它的2个相邻值为:.1011 101123和.1011 100123,间距为:.0000 000123=2-5。浮点数X的间距可以表示为2(X E precision)。浮点数固有特性 范围范围由浮点数格式所能表示的最大值和最小值决定。例如,一个有8位有效值(假设首位1也保存在有效值寄存器中)和4位阶码(表示阶值 8 7)的浮点数的范围为.1111 111127 .1111 111127,即 127.5+127.5。第89页,此课件共108页哦 例如,某浮点数格式,有1位符号位,8位阶且偏移量为128,23位有效值(类似于IEEE 754 单精度浮点数)。则精度为23位,范围为.111

39、1111 1111 1111 1111 11112127.111 1111 1111 1111 1111 11112127,或1.7 1038 +1.71038。间距由实际的浮点数决定,对.12127,间距为2(127 23)=2104;对.1 2-128,间距为2(-128 23)=2-151。举例 当浮点数操作所产生的结果不能存于计算机的浮点寄存器时,就发生了溢出。对有8位有效值和4位阶(偏移量为8)的浮点数,浮点数.126 和.125相乘将得积.01211=.1210,积的阶值大于该格式所允许的最大阶值7,因此产生了溢出。溢出和下溢 溢出可为正或为负,由溢出值的符号决定。溢出值可以处理为

40、+/-,或NaN,或像定点数一样置溢出标志为1。第90页,此课件共108页哦 当结果在0到最小正值或最小负值之间时,将产生下溢。例如,在上例格式中,执行乘法(.12-6)(.12-5),所得结果为.12-12,它在0 与最小正值.12 8之间,因此产生下溢。下溢也可以为正或为负。下溢值可以处理为0,或者设置下溢标志位。当操作结果有效值的位数太多而不能放入CPU的寄存器中(例如,8位有效值的浮点数相乘,得到16位有效值的积),此时必须将该值进行舍入处理舍入处理,使之能放入规定位数的有效值寄存器中。就近舍入法(也称为无偏舍入法)的目标是使舍入后的结果尽可能接近实际值。例如,将值.1011 0101

41、舍入为4位,得到值.1100。它的最大误差为+/-0.5LSB(LSB为舍入后结果的最低有效位值)。舍入处理第91页,此课件共108页哦表表8.16 8.16 不同舍入方法的比较不同舍入方法的比较 常见的舍入方法还有:截断法、朝+舍入法、朝-舍入法。下表给出了数值在不同的舍入方法下的舍入结果。除了“截断法”,各种舍入法都要求在最终的表示之外增加额外的几位,通常只要1、2位就足够了。这些位的最高位称为舍入位舍入位,次高位称为保护位保护位。在浮点数运算的算法中,这些位是对结果的补充。第三位称为粘滞位粘滞位(sticky bit)(sticky bit),粘滞位置1后,值就不再改变。第92页,此课件

42、共108页哦 例如,(.101123)-(.110022),有效值分别为1011和1100,二者直接相减不能得出正确结果。由于减数的阶比被减数的阶小1,它的有效值必须右移一位。本质上,这种对齐是将减数由.110022转换为.011023。只有当操作数的阶相等时,才能执行有效值的相减。8.5.3 加法和减法 浮点数加减法与符号幅值表示加减法相似,但有两个不同:首先要能检测出操作数为0、或NaN以及结果为0或的情况。其次由于阶可能不等,因此要能进行有效值的对齐。移位/对齐/相减(相加)的过程能处理大部分规格化浮点数的加减法。但当操作数为0、或NaN时,浮点数算法必须对其单独处理。第93页,此课件共

43、108页哦 表中列出了对不同的操作数X和Y,UXY的执行结果。当X与Y相加时,AS=0;相减时,AS=1。1、IFY=0,THENUX0=X,即UX,ELSE2、IFX=0且YNaN,THENU0Y。IFAS=0THENUY,否则UY,ELSE3、IFX=NaN,THENUX(=NaN),ELSE4、IFY=NaN,THENUY(=NaN),ELSE5、IFX=,THENUX,ELSE6、IFY=,THEN当AS=0时UY,否则UY,ELSE7、用常规的加减法步骤计算U。上表根据以下规则求出:表表8.17 8.17 特殊形式的浮点数特殊形式的浮点数的操作结果的操作结果 第94页,此课件共108

44、页哦 浮点加减算法。每一个值有3个寄存器:一个1位的符号寄存器(US),一个n位的有效值寄存器(UF)和一个m位的阶码寄存器(UE)。(IXNY+NX+ZY)1:UX,FINISH1(NYZXZY+IXIYNX)1:U(YSAS)YFYE,FINISH1(IYNX+NXNY)1:UY,FINISH1EXY2:shr(YF),YEYE+1,GOTO2EYX2:shr(XF),XEXE+1,GOTO2PM3:CUFXF+YFPM3:CUFXF+YF+1 3:USXS,UEXE,CE0CPM4:shr(CUF),CEUEUE+1CEPM5:UUSPM5:FINISH1CPM4:USUS,UFUF+1

45、ZUCEUF(n1)PM5:shl(UF),CEUEUE1,GOTO5(ZU+CE)PM5:U0,FINISH1CEUF(n1)PM5:FINISH1AS=0表示加法,AS=1表示减法,PM=XSASYS。REG(X或Y)=NaN时,NREG=1;REG=0时,ZREG=1;REG=时,IREG=1。XE YE 时,EXY=1;YE XE时,EYX=1。第95页,此课件共108页哦 状态1 1:当X或Y为特殊值(0、或NaN)时得出正确结果并终止算法。状态2 2:对齐有效值。右移阶值小的操作数的有效值,同时让其阶码加1,直到两阶值相等。例如,X=.110125,Y=.100023 时,Y的有效

46、值UF要右移2位,同时Y的阶码将增加2。得YF=0010,YE=5,即.001025。状态3 3:执行有效值加减,并设置结果的符号。这时算法分为两种情况考虑。当PM=0时,有效值相加。如果加法使C置1,则结果的形式为1.xxxx,此时必须将其有效值右移一位,并且阶码加1,使其规格化。如果这使得阶码溢出,则最终结果被置为,否则将得到正确结果。表8.18给出了(.110123)+(.111022)的执行步骤(此时PM=0)。第96页,此课件共108页哦表表8.18 8.18 执行(执行(X=X=.11012.110123 3)+(Y=Y=.11102.111022 2)的的RTLRTL代码代码轨迹

47、轨迹 状态1 1检测操作数是否为特殊值,不执行任何操作。状态2 2。由于XE YE,因此EXY=1,将Y的有效值右移一位同时将Y的阶码加1。然后回到状态2 2,重复操作直到阶码相等。这里循环一次就使得XE =YE。当XE =YE 时,EXY 和EXY 均为0,无操作,进入状态3 3。由于PM=0,状态3 3执行有效值相加。进位C记录溢出。设置结果符号、阶码,将CE 初始化为0。状态4 4检查并且规格化结果形式为1.xxxx的情况。因C置1,因此进行规格化,即有效值右移一位同时阶码加1到4。规格化处理中可能产生溢出。但本例中并没有发生,则状态5 5 FNISH置1并终止算法。最终(.110123

48、)+(.111022)=(.101024),即6.5+3.5=10。PM=0第97页,此课件共108页哦 当PM=1时,执行有效值相减。若相减使C置0,则结果的有效值取负(UF UF+1),符号取反(US US),在状态4 4中进行。状态4 4结束时,结果的形式只可能为.0 xxx或.1xxx。如果以0开头(UF(n-1),则有效值左移一位同时阶码减1。重复这一操作,直到出现以下3种情况:UF(n-1)=1、UF=0、阶值小于最小阶(即CE=1,下溢)。当出现第一种情况时,结果完成规格化,得出正确结果并终止算法。当出现其他两种情况时,结果必须被置0。表8.19给出了减法(.110123)(.1

49、11022)的执行步骤。该算法的硬件设计类似于符号幅值表示加减法算法的硬件设计。(略)第98页,此课件共108页哦 状态1 1检查特殊值,状态2 2对齐有效值。在状态3 3执行有效值相减并设置结果的符号和阶。若需要,在状态4 4中要将结果取负,符号取反。但对于本例不必。状态5 5将结果规格化。对本例,有效值中只有一个先导0,因此只需进行一次左移。当算法回到状态5 5时,已规格化,且阶码没有下溢,算法完成。最终(.110123)(.111022)=(.110022),即6.53.5=3。表表8.19 8.19 执行(执行(X=.11012X=.110123 3)()(Y=.11102Y=.111

50、022 2)的)的RTLRTL代码轨迹代码轨迹 PM=1第99页,此课件共108页哦8.5.4 乘法和除法 与符号幅值表示法一样,浮点数乘法采用移位相加的算法实现,但要作修改。首先检测操作数是否为特殊值,接着通过有效值相乘和阶值相加实现乘法。同时检查是否溢出和下溢。有效值相乘所得积的形式为.1xxx或.01xx。若为.01xx,要规格化并重新检查下溢。两个规格化浮点数相乘,积的有效值不可能小于.01。在最糟的情况下,结果为.1000.1000=.01xx。状态1 1检测操作数是否有特殊值(0、NaN和)并进行相应的处理。有则进行特殊值处理后终止算法,否则设置结果的符号位和阶。若至少一个操作数为

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁