




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
計算機組成原理朱華貴2015年9月21日計算機組成原理第4章數值的機器運算朱華貴2015年9月21日計算機組成原理運算器是計算機進行算術運算和邏輯運算的主要部件,運算器的邏輯結構取決于機器的指令系統、數據表示方法和運算方法等。本章主要討論數值數據在計算機中實現算術運算和邏輯運算的方法,以及運算部件的基本結構和工作原理。
第4章數值的機器運算本章學習內容4.1基本算術運算的實現4.2定點加減運算4.3帶符號數的移位和舍入操作4.4定點乘法運算4.5定點除法運算4.6規格化浮點運算4.7十進制整數的加法運算4.8邏輯運算與實現4.9運算器的基本組成與實例本章學習要求掌握:定點補碼加法和減法運算方法理解:3種溢出檢測方法理解:補碼移位運算和常見的舍入操作方法了解:串行加法器與并行加法器理解:進位產生和進位傳遞掌握:定點原碼、補碼乘法運算方法掌握:定點原碼、補碼加減交替除法運算方法理解:浮點加減乘除運算理解:邏輯運算了解:運算器的基本結構及浮點協處理器4.1基本算術運算的實現
計算機中最基本的算術運算是加法運算,不論加、減、乘、除運算最終都可以歸結為加法運算。所以在此討論最基本的運算部件——加法器,以及并行加法器的進位問題。4.1.1加法器1.全加器全加器(FA)是最基本的加法單元,它有三個輸入量:操作數Ai和Bi、低位傳來的進位Ci-1;兩個輸出量:本位和Si、向高位的進位Ci。
圖4-1全加器的邏輯框圖
全加器真值表AiBiCi-1SiCi0000111100110011010101010110100100010111根據真值表,可得到全加器的邏輯表達式為:
Si=Ai⊕Bi⊕Ci-1Ci=AiBi+(Ai⊕Bi)Ci-1全加器的邏輯表達式2.串行加法器與并行加法器加法器有串行和并行之分。在串行加法器中,只有一個全加器,數據逐位串行送入加法器進行運算;并行加法器則由多個全加器組成,其位數的多少取決于機器的字長,數據的各位同時運算。
串行加法器具有器件少、成本低的優點,但運算速度太慢,所以除去某些低速的專用運算器外很少采用。
并行加法器可同時對數據的各位相加,但存在著一個加法的最長運算時間問題。這是因為雖然操作數的各位是同時提供的,但低位運算所產生的進位會影響高位的運算結果。例如:11…11和00…01相加,最低位產生的進位將逐位影響至最高位,因此,并行加法器的最長運算時間主要是由進位信號的傳遞時間決定的,而每個全加器本身的求和延遲只是次要因素。很明顯,提高并行加法器速度的關鍵是盡量加快進位產生和傳遞的速度。
并行加法器中的每一個全加器都有一個從低位送來的進位輸入和一個傳送給高位的進位輸出。將傳遞進位信號的邏輯線路連接起來構成的進位網絡稱為進位鏈。每一位的進位表達式為:
Ci=AiBi+(Ai⊕Bi)Ci-1其中:Gi=AiBi為進位產生函數
Pi=Ai⊕Bi為進位傳遞函數
∴進位表達式Ci=Gi+PiCi-14.1.2進位的產生和傳遞圖4-3串行進位的并行加法器其中:C1=G1+P1C0C2=G2+P2C1
┇
Cn=Gn+PnCn-1
串行進位的并行加法器
4.1.2進位的產生和傳遞(續)
串行進位的并行加法器的總延遲時間與字長成正比,字長越長,總延遲時間就越長。假定,將一級“與門”、“或門”的延遲時間定為ty,從上述公式中可看出,每一級全加器的進位延遲時間為2ty。在字長為n位的情況下,若不考慮Gi、Pi的形成時間,從C0→Cn的最長延遲時間為2nty(設C0為加法器最低位的進位輸入,Cn為加法器最高位的進位輸出)。1.并行進位方式
并行進位又叫先行進位、同時進位,其特點是各級進位信號同時形成。
C1=G1+PC0C2=G2+P2C1=G2+P2G1+P2P1C0C3=G3+P3C2=G3+P3G2+P3P2G1+P3P2P1C0
C4=G4+P4C3=G4+P4G3+P4P3G2+P4P3P2G1
+P4P3P2P1C0
┇4.1.3并行加法器的快速進位這種進位方式是快速的,若不考慮Gi、Pi的形成時間,從C0→Cn的最長延遲時間僅為2ty,而與字長無關。但是隨著加法器位數的增加,Ci的邏輯表達式會變得越來越長,輸入變量會越來越多,這會使電路結構變得很復雜,所以完全采用并行進位是不現實的。⑴單級先行進位方式(組內并行、組間串行)以16位加法器為例,可分為4組,每組4位。第一小組組內的進位邏輯函數C1、C2、C3、C4的表達式與前述相同,它們是同時產生的,實現上述進位邏輯函數的電路稱之為4位先行進位電路CLA,其延遲時間是2ty。利用這種4位的CLA電路以及進位產生/傳遞電路和求和電路可以構成4位的CLA加法器。用4個這樣的CLA加法器,很容易構成16位的單級先行進位加法器。
2.分組并行進位方式16位單級先行進位加法器圖4-416位單級先行進位加法器16位單級先行進位時間圖圖4-516位單級先行進位時間圖
⑵多級先行進位方式(組內并行、組間并行)仍以字長為16位的加法器作為例子,分析兩級先行進位加法器的設計方法。第一小組的進位輸出C4可以變成兩個與項相或:C4=G4+P4G3+P4P3G2+P4P3P2G1+P4P3P2P1C0=G1*+P1*C0其中:G1*=G4+P4G3+P4P3G2+P4P3P2G1P1*=P4P3P2P1
Gi*稱為組進位產生函數Pi*稱為組進位傳遞函數2.分組并行進位方式(續)依次類推,可以得到:
C8=G2*+P2*C4=G2*+P2*G1*+P2*P1*C0C12=G3*+P3*G2+P3*P2*G1*+P3*P2*P1*C0C16=G4*+P4*G3*+P4*P3*G2*+P4*P3*P2*G1*+P4*P3*P2*P1*C0成組先行進位電路BCLA,其延遲時間是2ty。利用這種4位的BCLA電路以及進位產生/傳遞電路和求和電路可以構成4位的BCLA加法器。16位的兩級先行進位加法器可由4個BCLA加法器和1個CLA電路組成。2.分組并行進位方式(續)圖4-616位兩級先行進位加法器若不考慮Gi、Pi的形成時間,C0經過2ty產生第一小組的C1、C2、C3及所有組進位產生函數Gi*和組進位傳遞函數Pi*;再經過2ty,由CLA電路產生C4、C8、C12、C16;再經過2ty后,才能產生第二、三、四小組內的C5~C7、C9~C11、C13~C15。此時加法器的最長進位延遲時間是6ty。2.分組并行進位方式(續)圖4-716位兩級先行進位時間圖
定點數的加減運算包括原碼、補碼和反碼3種帶符號數的加減運算,其中補碼加減運算實現起來最方便。4.2定點加減運算原碼加減運算規則:⑴參加運算的操作數取其絕對值;⑵若做加法,則兩數直接相加,若做減法,則將減數先變一次補,再進行加法運算;⑶運算之后,可能有兩種情況:
①有進位,結果為正,即得到正確的結果。
②無進位,結果為負,則應再變一次補,才能得到正確的結果。⑷結果加上符號位。
通常,把運算之前的變補稱為前變補,運算之后的變補稱為后變補。
4.2.1原碼加減運算4.2.2補碼加減運算1.補碼加法
兩個補碼表示的數相加,符號位參加運算,且兩數和的補碼等于兩數補碼之和,即:
[X+Y]補=[X]補+[Y]補根據補碼加法公式可推出:
[X-Y]補=[X+(-Y)]補=[X]補+[-Y]補從補碼減法公式可以看出,只要求得[-Y]補,就可以變減法為加法。不管Y的真值為正或為負,已知[Y]補求[-Y]補的方法是:將[Y]補連同符號位一起求反,末尾加“1”
。[-Y]補被稱為[Y]補的機器負數,由[Y]補求[-Y]補的過程稱為對[Y]補變補(求補),表示為
[-Y]補=[[Y]補]變補2.補碼減法2.補碼減法(續)
“某數的補碼表示”與“變補”是兩個不同的概念。一個負數由原碼轉換成補碼時,符號位是不變的,僅對數值位各位變反,末位加“1”。而變補則不論這個數的真值是正是負,一律連同符號位一起變反,末位加“1”。[Y]補表示的真值如果是正數,則變補后[-Y]補所表示的真值變為負數,反之亦然。例1:Y=-0.0110,[Y]原=1.0110,
[Y]補=1.1010,[-Y]補=0.0110
例2:Y=0.0110,[Y]原=0.0110,
[Y]補=0.0110,[-Y]補=1.1010
⑴參加運算的兩個操作數均用補碼表示;⑵符號位作為數的一部分參加運算;⑶若做加法,則兩數直接相加;若做減法,則將被減數與減數的機器負數相加;⑷運算結果仍用補碼表示。3.補碼加減運算規則例3:A=0.1011,B=-0.1110,求A+B
∵[A]補=0.1011[B]補=1.00100.1011[A]補+1.0010[B]補1.1101[A+B]補
∴[A+B]補=1.1101
A+B=-0.0011例4:A=0.1011,B=-0.0010,求A-B
∵[A]補=0.1011[B]補=1.1110[-B]補=0.00100.1011[A]補+0.0010[-B]補0.1101[A-B]補
∴[A-B]補=0.1101
A-B=0.1101補碼減法示例
在計算機算術運算中,有時必須將采用給定位數表示的數轉換成具有更多位數的某種表示形式,這被稱為“符號擴展”。
實際上補碼的符號擴展非常簡單,所有附加位均用符號位填充,即正數用0進行填充,負數用1填充。4.符號擴展4.2.3補碼的溢出判斷與檢測方法1.溢出的產生
在補碼運算中,若兩個正數相加,而結果為負;兩個負數相加,而結果為正,則結果出錯。例5:設:X=1011B=11D,Y=111B=7D則[X]補=0,1011,[Y]補=0,01110,1011 [X]補+0,0111 [Y]補1,0010 [X+Y]補∴[X+Y]補=1,0010
X+Y=-1110B=-14D
兩正數相加結果為-14D,顯然是錯誤的。1.溢出的產生(續)例6:設:X=-1011B=-11D,Y=-111B=-7D則[X]補=1,0101[Y]補=1,10011,0101 [X]補+1,1001 [Y]補0,1110 [X+Y]補∴[X+Y]補=0,1110
X+Y=1110B=14D
兩負數相加結果為14D,顯然也是錯誤的。1.溢出的產生(續)字長為n+1位的定點整數(其中一位為符號位),采用補碼表示,當運算結果大于2n-1或小于-2n時,就產生溢出。設參加運算的兩數為X、Y,做加法運算。若X、Y異號,實際上是做兩數相減,所以不會溢出。若X、Y同號,運算結果為正且大于所能表示的最大正數或運算結果為負且小于所能表示的最小負數(絕對值最大的負數)時,產生溢出。將兩正數相加產生的溢出稱為正溢;反之,兩負數相加產生的溢出稱為負溢。
2.溢出檢測方法設:被操作數為:[X]補=Xs,X1X2…Xn
操作數為:[Y]補=Ys,Y1Y2…Yn
其和(差)為:[S]補=Ss,S1S2…Sn
⑴采用一個符號位采用一個符號位檢測溢出時,當Xs=Ys=0,Ss=1時,產生正溢;當Xs=Ys=1,Ss=0時,產生負溢。
溢出判斷條件為
溢出=Ss+XsYs2.溢出檢測方法(續)⑵采用進位位判斷兩數運算時,產生的進位為Cs,C1C2…Cn,其中:Cs為符號位產生的進位,C1為最高數值位產生的進位。
兩正數相加,當最高有效位產生進位(C1=1)而符號位不產生進位(Cs=0)時,發生正溢;兩負數相加,當最高有效位不產生進位(C1=0)而符號位產生進位(Cs=1)時,發生負溢。故溢出條件為
溢出=C1+Cs=Cs⊕C1
2.溢出檢測方法(續)⑶采用變形補碼(雙符號位補碼)在雙符號位的情況下,把左邊的符號位Ss1叫做真符,兩個符號位都作為數的一部分參加運算。這種編碼又稱為變形補碼。
雙符號位的含義如下:
Ss1Ss2=00結果為正數,無溢出
Ss1Ss2=01結果正溢
Ss1Ss2=10結果負溢
Ss1Ss2=11結果為負數,無溢出
當兩位符號位的值不一致時,表明產生溢出,溢出條件為:
溢出=Ss1⊕Ss24.2.4補碼定點加減運算的實現要實現補碼加法,則需給出X→F、Y→F和F→X三個控制信號,同時打開門A、門B和門C,把寄存器X和寄存器Y的內容送入加法器的兩個輸入端進行加法運算,并把結果送回,最后由打入脈沖CPX打入寄存器X。
減法與加法的不同之處在于,加法使用Y→F控制信號,減法使用→F和1→F控制信號,其余控制信號相同。
補碼加減運算的邏輯電路圖4-8補碼加減運算器框圖≥1
在計算機中,實現乘除運算的方案通常有3種:
⑴
軟件實現。在低檔微機中無乘除運算指令,只能用乘法和除法子程序來實現乘除運算。
⑵
在原有實現加減運算的運算器基礎上增加一些邏輯線路,使乘除運算變換成加減和移位操作。在機器中設有乘除指令。
⑶
設置專用的乘、除法器,機器中設有相應的乘除指令。
不管采用什么方案實現乘除法,基本原理是相同的。如果采用第⑵種方案,則必然會涉及到移位操作。4.3帶符號數的移位和舍入操作1.原碼的移位規則
不論正數還是負數,在左移或右移時,符號位均不變,空出位一律以“0”補入。負數的原碼移位前后結果為:左移:移位前有:1X1X2
…Xn-1Xn
移位后有:1X2X3
…Xn
0右移:移位前有:1X1X2
…Xn-1Xn
移位后有:10
X1
…Xn-2Xn-1
4.3.1帶符號數的移位操作2.補碼的移位規則
⑴正數
符號位不變,不論左移或右移,空出位一律以“0”補入。⑵負數
符號位不變,左移后的空出位補“0”,右移后的空出位補“1”。左移:移位前有:1X1X2
…Xn-1Xn
移位后有:1X2X3
…Xn
0右移:移位前有:1X1X2
…Xn-1Xn
移位后有:11
X1
…Xn-2Xn-1
3.移位功能的實現在計算機中,通常移位操作由移位寄存器來實現,但也有一些計算機不設置專門的移位寄存器,而在加法器的輸出端加一個移位器。移位器是由與門和或門組成的邏輯電路(實際是一個多路選擇器),可以實現直傳(不移位)、左斜一位送(左移一位)和右斜一位送(右移一位)的功能。移位器邏輯電路≥1
圖4-9移位器邏輯電路4.3.2帶符號數的舍入操作在算術右移時,由于受到硬件的限制,運算結果有可能需要舍去一定的尾數,這會造成一些誤差。為了縮小誤差,就要進行舍入處理。假定經過運算后的數共有p+q位,現僅允許保留前p位。常見的舍入方法有:⑴恒舍(切斷)無論多余部分q位為何代碼,一律舍去,保留部分的p位不作任何改變。4.3.2帶符號數的舍入操作(續)⑵馮·諾依曼舍入法這種舍入法又稱為恒置1法,即不論多余部分q位為何代碼,都把保留部分p位的最低位置1。⑶下舍上入法
下舍上入就是0舍1入。用將要舍去的q位的最高位作為判斷標志,以決定保留部分是否加1。如該位為0,則舍去整個q位(相當于恒舍);如該位為1,則在保留的p位的最低位上加1。4.3.2帶符號數的舍入操作(續)
⑷查表舍入法查表舍入法又稱ROM舍入法,因為它用ROM來存放舍入處理表,每次經查表來讀得相應的處理結果。通常,ROM表的容量為2K個單元,每個單元字長為K-1位。舍入處理表的內容設置一般采用的方法是:當K位數據的高K-1位為全“1”時,讓那些單元按恒舍法填入K-1位全“1”,其余單元都按下舍上入法來填其內容。4.4定點乘法運算
在計算機中,乘法運算大多數由累加與移位來實現,也有些機器中具有由大規模集成電路制造的陣列乘法模塊。4.4.1原碼一位乘法1.原碼一位乘法算法
原碼一位乘法是從手算演變而來的,即用兩個操作數的絕對值相乘,乘積的符號為兩操作數符號的異或值(同號為正,異號為負)。
乘積P=|X|×|Y|
符號Ps=Xs⊕Ys式中:Ps為乘積的符號,Xs和Ys為被乘數和乘數的符號。1.原碼一位乘法算法(續)原碼一位乘法的規則:⑴參加運算的操作數取其絕對值;⑵令乘數的最低位為判斷位,若為“1”,加被乘數,若為“0”,不加被乘數(加0);
⑶累加后的部分積以及乘數右移一位;
⑷重復n次⑵和⑶;
⑸符號位單獨處理,同號為正,異號為負。
1.原碼一位乘法算法(續)通常,乘法運算需要3個寄存器。被乘數存放在B寄存器中;乘數存放在C寄存器中;A寄存器用來存放部分積與最后乘積的高位部分,它的初值為0。運算結束后寄存器C中不再保留乘數,改為存放乘積的低位部分。例8:已知:X=0.1101,Y=-0.1011,求:X×Y。|X|=00.1101→B,|Y|=0.1011→C,0→A原碼一位乘法示例
AC說明00.00001011+|X|00.1101C4=1,+|X|00.1101→00.01101101部分積右移一位01.0011+|X|00.1101C4=1,+|X|→00.10011110部分積右移一位+000.0000
C4=0,+000.1001→00.01001111部分積右移一位+|X|00.1101C4=1,+|X|01.0001→00.10001111部分積右移一位∵PS=XS⊕YS=0⊕1=1∴XY=-0.10001111
原碼一位乘法流程圖圖4-11原碼一位乘法流程圖2.原碼一位乘法運算的實現圖4-12中A、B是n+2位的寄存器,C是n位的寄存器,A寄存器和C寄存器是級聯在一起的,它們都具有右移一位的功能,在右移控制信號的作用下,A寄存器最低一位的值將移入C寄存器的最高位。C寄存器的最低位的值作為字級與門的控制信號,以控制加被乘數還是不加被乘數(即加0)。C寄存器中的乘數在逐次右移過程中將逐步丟失,取而代之的是乘積的低位部分。原碼一位乘法運算器電路中除去三個寄存器外,還需要一個n+2位的加法器、一個計數器、n+2個與門(控制是否加被乘數)和一個異或門(處理符號位)。4.4.2補碼一位乘法雖然原碼乘法比補碼乘法容易實現,但因為補碼加減法簡單,在以加減運算為主的通用機中操作數都用補碼表示,所以這類計算機在做乘法時常使用補碼乘法。1.校正法校正法是將[X]補和[Y]補按原碼規則運算,所得結果根據情況再加以校正,從而得到正確的[X×Y]補。補碼乘法的統一表達式:
[X×Y]補=[X]補×(0.Y1Y2…Yn)+[-X]補×Ys2.比較法——Booth乘法
遞推公式:[Z0]補=0[Z1]補=2-1{[Z0]補+(Yn+1-Yn)[X]補}[Z2]補=2-1{[Z1]補+(Yn-Yn-1)[X]補}
┇[Zn]補=2-1{[Zn-1]補+(Y2-Y1)[X]補}
∴[X×Y]補=[Zn]補+(Y1-Ys)[X]補式中,[Z0]補為初始部分積,[Z1]補~[Zn]補依次為各次求得的累加并右移之后的部分積。
2.比較法——Booth乘法
(續)
Booth乘法規則:⑴參加運算的數用補碼表示;⑵符號位參加運算;⑶乘數最低位后面增加一位附加位Yn+1,其初值為0;⑷由于每求一次部分積要右移一位,所以乘數的最低兩位Yn、Yn+1的值決定了每次應執行的操作;⑸移位按補碼右移規則進行;⑹共需做n+1次累加,n次移位,第n+1次不移位。Booth乘法運算操作判斷位YnYn+1
操作00原部分積右移一位01原部分積加[X]補后右移一位10原部分積加[-X]補后右移一位11原部分積右移一位2.比較法——Booth乘法
(續)
由于符號位要參加運算,部分積累加時最高有效位產生的進位可能會侵占符號位,故被乘數和部分積應取雙符號位,而乘數只需要一位符號位。運算時仍需要有3個寄存器,各自的作用與原碼時相同,只不過存放的內容均為補碼表示而已。例9:已知X=-0.1101,Y=0.1011;求X×Y。[X]補=11.0011→B,[Y]補=0.1011→C,0→A
[-X]補=00.1101Booth乘法示例
AC附加位說明00.00000.10110+[-X]補00.1101C4C5=10,+[-X]補00.1101→00.0110101011部分積右移一位+000.0000C4C5=11,+000.0110→00.0011010101部分積右移一位+[X]補11.0011C4C5=01,+[X]補11.0110→11.1011001010部分積右移一位+[-X]補00.1101C4C5=10,+[-X]補00.1000→00.0100000101部分積右移一位+[X]補11.0011C4C5=01,+[X]補11.0111∵[XY]補=1.01110001∴XY=-0.10001111Booth乘法流程圖圖4-13Booth乘法流程圖3.Booth乘法運算的實現各器件的作用與原碼一位乘法相同,A、B寄存器長n+2位,C寄存器長n+1位,還需一個n+2位的加法器、n+2個與或門和一個計數器。由C寄存器的最低兩位CnCn+1來控制是加/減被乘數還是加0,當CnCn+1=01時,加被乘數,即加B寄存器的內容;CnCn+1=10時,減被乘數,即加上B寄存器中內容的反,并在加法器的最低位加1;CnCn+1=00或11時,不加也不減(加0)。由于符號位參與運算,所以不需要專門處理符號位的異或門。4.4.3補碼兩位乘法為了提高乘法的執行速度,可以選用兩位乘法的方案。所謂兩位乘法,就是每次處理乘數中的兩位,從而使乘法的速度提高了一倍。根據Booth乘法方便地推導出補碼兩位乘法,即把補碼兩位乘理解為將Booth乘法的兩次合并為一次來做。
補碼兩位乘法操作Yn-1YnYn+1000+0,右移2位001+[X]補,右移2位010+[X]補,右移2位011+2[X]補,右移2位100+2[-X]補,右移2位101+[-X]補,右移2位110+[-X]補,右移2位111+0,右移2位4.4.3補碼兩位乘法(續)被乘數和部分積取3符號位,當乘數的數值位n為偶數時,乘數取兩符號位,共需作+1次累加,次移位(最后一次不移位);當n為奇數時,乘數只需一個符號位,共需次累加和移位,但最后一次僅移一位。
例10:已知:X=0.0110011,Y=-0.0110010,求:X×Y。[X]補=000.0110011→B,[Y]補=1.1001110→C,0→A2[X]補=000.1100110,[-X]補=111.1001101,2[-X]補=111.0011010補碼兩位乘法示例
AC附加位+2[-X]補111.0011010000.00000001.10011100
111.00110102→111.1100110101100111
+0
000.0000000111.11001102→111.1111001101011001
+[X]補000.0110011000.01011002→000.0001011001010110
+[-X]補111.1001101111.10110001→111.1101100000101011
∴[X×Y]補=1.11011000001010
X×Y=-0.00100111110110
4.5定點除法運算除法是乘法的逆運算,與乘法運算的處理思想相似,可以將n位除轉化成若干次“減法-移位”,也有些計算機具有由大規模集成電路制造的陣列除法模塊。4.5.1原碼除法運算1.原碼比較法和恢復余數法⑴比較法比較法類似于手工運算,只是為了便于機器操作,將除數右移改為部分余數左移,每一位的上商直接寫到寄存器的最低位。設A寄存器中存放被除數(或部分余數),B寄存器中存放除數,C寄存器用來存放商Q,若A≥B,則上商1,并減除數;若A<B,則上商0。比較法需要設置比較線路,從而增加了硬件的代價。圖4-16(a)比較過程流程
1.原碼比較法和恢復余數法(續)
⑵恢復余數法恢復余數法是直接作減法試探方法,不管被除數(或部分余數)減除數是否夠減,都一律先做減法。若部分余數為正,表示夠減,該位商上“1”;若部分余數為負,表示不夠減,該位商上“0”,并要恢復余數。圖4-16(b)恢復余數過程流程1.原碼比較法和恢復余數法(續)由于部分余數的正、負是根據不同的操作數組合隨機出現的,恢復除數法會使得除法運算的實際操作次數不固定,從而導致控制電路比較復雜。而且在恢復余數時,要多作一次加法,降低了除法的執行速度。因此,原碼恢復余數法在計算機中一般很少采用。2.原碼不恢復余數法(原碼加減交替法)原碼不恢復余數法是對恢復余數法的一種改進,它減少了浪費的加法時間,且運算的次數固定,故被廣泛采用。在恢復余數法中,若第i-1次求商的部分余數為ri-1,則第i次求商操作為:ri=2ri-1-Y,若夠減,部分余數ri=2ri-1-Y>0,商1。
若不夠減,部分余數ri=2ri-1-Y<0,商0,恢復余數后,ri’=ri+Y=2ri-1,然后再左移一位,進行第i+1次操作:
ri+1=2ri’-Y=2(ri+Y)-Y=2ri+2Y-Y=2ri+Y2.原碼不恢復余數法(續)原碼不恢復余數除法由下面的通式表示:
ri+1=2ri+(1-2Qi)Y
式中Qi為第i次所得的商,若部分余數為正,則Qi=1,部分余數左移一位,下一次繼續減除數;若部分余數為負,則Qi=0,部分余數左移一位,下一次加除數。由于加減運算交替地進行,故稱為原碼加減交替法。2.原碼不恢復余數法(續)除法運算需要3個寄存器。A和B寄存器分別用來存放被除數和除數,C寄存器用來存放商,它的初值為0。運算過程中A寄存器的內容為部分余數,它將不斷地變化,最后剩下的是擴大了若干倍的余數,只有將它乘上2-n才是真正的余數。例12:已知:X=-0.10101,Y=0.11110,求:X÷Y。|X|=00.10101→A,|Y|=00.11110→B,0→C[|Y|]變補=11.00010原碼不恢復余數除法示例
AC說明00.101010.00000+[|Y|]變補11.00010-|Y|11.101110.00000
余數為負,商0←11.01110左移一位+|Y|00.11110+|Y|00.011000.00001
余數為正,商1←00.11000左移一位+[|Y|]變補11.00010-|Y|11.110100.00010
余數為負,商0←11.10100左移一位+|Y|00.11110+|Y|00.100100.00101
余數為正,商1←01.00100左移一位+[|Y|]變補11.00010-|Y|00.001100.01011
余數為正,商1←00.01100左移一位+[|Y|]變補11.00010-|Y|11.011100.10110
余數為負,商0+|Y|00.11110恢復余數,+|Y|00.01100原碼不恢復余數除法示例(續)經過原碼不恢復余數除法,有:商=0.10110余數=0.011002-5∴X÷Y=-(0.10110+)0.011002-50.11110原碼加減交替除法流程圖圖4-17原碼加減交替除法流程圖2.原碼不恢復余數法(續)在定點除法運算時,為了防止溢出,要求被除數的絕對值小于除數的絕對值,|X|<|Y|(|X|=|Y|除外),且除數不能為0。因此第一次減除數肯定是不夠減的,如果我們采用先移位后減除數的方法,得到的結果也是相同的。另外,在原碼加減交替法中,當最終余數為負數時,必須恢復一次余數,使之變為正余數,注意此時不需要再左移了。
3.原碼加減交替除法的實現
圖4-18中A、B寄存器長n+2位,C寄存器長n+1位,還需一個n+2位的加法器、n+2個與或門、一個計數器和一個異或門。應當注意,A寄存器和C寄存器是級聯在一起的,它們都具有左移一位的功能,在左移控制信號的作用下,C寄存器最高位的值將移入A寄存器的最低位。A寄存器中的初值是被除數,但在運算過程中將變為部分余數。C寄存器的最低位用來保存每次運算得到的商值,此商值同時也作為下一次操作是做加法還是做減法的控制信號。4.5.2補碼除法運算1.夠減的判斷
參加運算的兩個數符號任意,當被除數(或部分余數)的絕對值大于或等于除數的絕對值時,稱為夠減;反之稱為不夠減。當兩數同號時,實際應作減法;兩數異號時,實際應作加法。
判斷的方法和結果如下:當被除數(或部分余數)與除數同號時,如果得到的新部分余數與除數同號,表示夠減,否則為不夠減;當被除數(或部分余數)與除數異號時,如果得到的新部分余數與除數異號,表示夠減,否則為不夠減。
2.上商規則補碼除法運算的商也是用補碼表示的,上商的規則是:如果[X]補和[Y]補同號,則商為正數,夠減時上商“1”,不夠減時上商“0”;如果[X]補和[Y]補異號,則商為負數,夠減時上商“0”,不夠減時上商“1”。補碼的上商規則可歸結為:
部分余數[ri]補和除數[Y]補同號,商上“1”,反之,商上“0”。
3.商符的確定
商符是在求商的過程中自動形成的,按補碼上商規則,第一次得出的商,就是實際應得的商符。為了防止溢出,必須有|X|<|Y|,所以第一次肯定不夠減。當被除數與除數同號時,部分余數與除數必然異號,商上“0”,恰好與商符一致;當被除數與除數異號,部分余數與除數必然同號,商上“1”,也恰好就是商的符號。
4.求新部分余數求新部分余數[ri+1]補的通式如下:
[ri+1]補=2[ri]補+(1-2Qi)×[Y]補
Qi表示第i步的商。若商上“1”,下一步操作為部分余數左移一位,減去除數;若商上“0”,下一步操作為部分余數左移一位,加上除數。5.末位恒置1商的最末一位恒置為“1”,運算的最大誤差為2-n。此法操作簡單,易于實現。
補碼加減交替除法規則[X]補與[Y]補第一次操作[ri]補與[Y]補上商求新余數[ri+1]補的操作同號[X]補-[Y]補①同號(夠減)1[ri+1]補=2[ri]補-[Y]補②異號(不夠減)0[ri+1]補=2[ri]補+[Y]補異號[X]補+[Y]補①同號(不夠減)1[ri+1]補=2[ri]補-[Y]補②異號(夠減)0[ri+1]補=2[ri]補+[Y]補補碼加減交替除法示例例13:已知X=0.1000,Y=-0.1010;求X÷Y。[X]補=00.1000→A,
[Y]補=11.0110→B,0→C[-Y]補=00.1010補碼加減交替除法示例(續)
AC說明00.10000.0000+[Y]補11.0110[X]補、[Y]補異號,+[Y]補←11.1100左移一位+[-Y]補00.1010+[-Y]補00.01100.0010[ri]補、[Y]補異號,商0←00.1100左移一位+[Y]補11.0110+[Y]補00.00100.0100[ri]補、[Y]補異號,商0+[Y]補11.0110+[Y]補11.10100.1001[ri]補、[Y]補同號,商1←11.0100左移一位+[-Y]補00.1010+[-Y]補11.11101.0011末位恒置111.11100.0001[ri]補、[Y]補同號,商1←00.0100左移一位補碼加減交替除法示例(續)[商]補=1.0011[余數]補=1.11102-4∴商=-0.1101余數=-0.00102-41.11102-41.0110[X÷Y]補=1.0011+-0.00102-4-0.1010X÷Y=-0.1101+補碼加減交替除法流程圖圖4-19補碼加減交替除法流程圖習題講解1、已知X和Y,試用它們的變形補碼計算出X+Y,并指出結果是否溢出。(1)X=0.11011,Y=0.11111[X]補=0.11011,[Y]補=0.1111100.11011[X]補00.11111[Y]補01.11010[X+Y]補Ss1Ss2溢出=Ss1⊕Ss2=1,Ss1
=0,結果為正溢(2)X=0.11011,Y=-0.10101[X]補=0.11011,[Y]補=1.0101100.11011[X]補11.01011[Y]補00.00110[X+Y]補Ss1Ss2溢出=Ss1⊕Ss2=0,不溢出。X+Y=0.00110小結:補充符號位,并參與運算,利用符號位進行異或運算判斷是否溢出,如溢出則看Ss1是0/1,為0對應為正溢,為1對應為負溢。2、已知:X=0.1011,Y=-0.0101。求[X/2]補[-X]補,[Y/4]補[-Y]補。X=0.1011,X/2=0.0101,[X/2]補=0.0101,-X=-0.1011,[-X]補=1.0101;Y=-0.0101,Y/4=-0.0010,[Y/4]補=1.1110,-Y=0.0101,[-Y]補=0.0101。3、用原碼乘法計算X*Y,X=0.11011,Y=-0.11111。|X|=0.11011,|Y|=0.1111100.0000011111+|X|00.1101100.1101111111右移一位
00.0110111111+|X|00.1101101.0100011111右移一位00.1010001111+|X|00.1101101.0111101111右移一位00.1011110111+|X|00.110110
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 CISPR 14-1:2005 FR-D Electromagnetic compatibility - Requirements for household appliances,electric tools and similar apparatus - Part 1: Emission
- 以客戶運營為中心
- 2025年化妝品營銷策劃方案經典
- 2025年鄉村幼兒園工作方案
- 2025年冷餐會方案
- 2025年七一建黨104周年活動方案策劃
- 2025年全國交通安全日學校工作方案
- 2025年文明禮儀實施方案
- 機械生產安全知識講座課件
- 渠道經銷商管理
- 中國農業銀行筆試題庫(含答案)
- DB13(J)∕T 8377-2020 建筑施工安全管理標準
- 2019人教版高中英語選擇性必修三單詞表
- 項目部二級安全教育內容
- 統編(部編)五年級語文下冊全冊教學反思
- 七年級地理歐洲西部
- GB∕T 16754-2021 機械安全 急停功能 設計原則
- 下肢靜脈曲張硬化治療指南
- MT_T 142-1986 煤礦井下空氣采樣方法_(高清版)
- 【民辦幼兒園發展規劃】幼兒園發展規劃
- 設備更新改造管理制度
評論
0/150
提交評論