第4章 機器數的運算方法及運算器_第1頁
第4章 機器數的運算方法及運算器_第2頁
第4章 機器數的運算方法及運算器_第3頁
第4章 機器數的運算方法及運算器_第4頁
第4章 機器數的運算方法及運算器_第5頁
已閱讀5頁,還剩91頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第4章機器數的運算方法及運算器下一頁目錄

4.1機器數的加減運算及其實現4.2定點乘法及其實現4.3定點除法及其實現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解: 即,Z=+11100。【例4.2】設X=-10001,Y=-01011,求Z=X+Y解:即,Z=-11100。上一頁下一頁2.符號相異的兩個原碼相加:先比較兩數的絕對值大小,用絕對值大的數減去絕對值小的數,結果的符號是絕對值大的數的符號。【例4.3】設X=+10101,Y=-01010,求Z=X+Y解:先比較X與Y的絕對值,本題∣X∣>|Y|,所以做減法|X∣-|Y|,結果是Z=+01011【例4.2】設X=+01010,Y=-10111,求Z=X+Y解:先比較X與Y的絕對值,本題∣Y∣>|X|,所以做減法|Y∣-|X|,結果是Z=-01101上一頁4.1.1原碼加法下一頁用原碼進行符號不同的兩個數相加時有以下三步運算:①

比較兩個數的絕對值的大小;②

絕對值大的數的絕對值減去絕對值小的數的絕對值;③

結果賦以絕對值大的那個數的符號。上一頁4.1.1原碼加法下一頁4.1.2補碼加法1.定點補碼運算性質性質1兩數之和的補碼等于兩數補碼之和。[X+Y]補=[X]補+[Y]補

【例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就丟掉了。上一頁下一頁【例4.6】設X=+10101,Y=-11010,用補碼加法求Z=X+Y解:[X]補=010101,[Y]補=100110[X+Y]補=[X]補+[Y]補=010101+100110=111011所以,X+Y=-00101。上一頁下一頁性質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]原上一頁下一頁計算機中計算結果的補碼均可化成該數的原碼。【例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結果相同。

用補碼做加法是數值位連同符號位一起參加運算的。但是在有溢出的情況下,用一般的補碼加法就得不到正確的結果,再看下面的例子。上一頁下一頁【例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的正數相加,結果就為負值,結果顯然是錯誤的。【例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.11000Z=X+Y=+0.11000兩個絕對值大于0.5的負數相加,結果為正值,這也是錯誤的。它們的和超出了機器數所能表示的最大范圍,即產生了溢出,在有溢出的情況下,用一般補碼加法就無法得到正確結果。

上一頁下一頁【例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,沒有發生溢出,結果是正確的。上一頁下一頁【例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.00110Z=X+Y=-0.00110所以,Z=-0.00110,沒有發生溢出,結果也是正確的。上一頁下一頁2.變形補碼加法變形補碼是符號位用兩位來表示的補碼。變形補碼的定義為:對于變形補碼,補碼的加法性質公式同樣適用,即:[X+Y]變形補=[X]變形補+[Y]變形補[[X]

變形補]

變形補=[X]原用雙符號位進行判斷,若和的兩個符號位相同(00或11),不發生溢出;若和的兩個符號位相異(01或10),就說明發生了溢出。遇到溢出,就要停機進行如下處理:選取一個合理的比例因子H=2i,對每個加數都除以H,然后相加,其結果再乘以H,即得所求。上一頁下一頁下面我們對例4.9和例4.10用變形補碼加法來求結果。【例4.13】設X=+10111,Y=+10001,用變形補碼的加法求Z=X+Y解:設比例因子H=2,則有所以,X+Y=+101000上一頁下一頁【例4.14】設X=-10111,Y=-10001,用變形補碼的加法求Z=X+Y解:設比例因子H=2,

則有:所以:X+Y=-101000上一頁下一頁說明⑴

舍入處理

在變形補碼運算中,加數除以H=2i,是通過把[X]補右移I位得到的。在移位時,末幾位可能超出機器的最末位而丟失,造成誤差。為了減少誤差,通常要進行舍入處理,一般有兩種方法:①

恒置1。即移位后機器末位總是1。上面的例子就是用的恒置1的方法。②0舍1入。即移出去的數是0則抹去,移出去的數是1則進1到末位。⑵

符號位擴展

補碼在右移時,要注意符號位要一起移,且最左邊一位要補上原符號位的值,這就叫做符號位擴展,即把符號位擴展到為3位。總結以上,得出補碼相加的規則:①

若兩數符號不同,相加的結果即為和的補碼。②

若兩數符號相同,相加后若其和的符號不變,則結果是和的補碼。③

若兩數符號相同,相加后若其和的符號改變,則表示發生了溢出。兩個正數相加,結果的符號為“01”,表示發生正溢出;兩個負數相加,結果的符號為“10”,表示發生負溢出。上一頁下一頁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上一頁下一頁【例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上一頁下一頁【例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上一頁下一頁【例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上一頁下一頁4.1.4補碼加減運算線路的實現在線路實現上,若已有[Y]補,求[-Y]補可用把[Y]補每一位(包括符號位和數值位)取反,再在最低位加1來實現。實現補碼加減運算的邏輯電路如右圖所示。下一頁上一頁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。下一頁上一頁運算原理如下:參加運算的兩個數被送到寄存器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。上一頁下一頁4.2定點乘法及其實現4.2.1原碼一位乘法及其實現4.2.2定點補碼一位乘法及其實現4.2.3原碼兩位乘法4.2.4補碼兩位乘法上一頁下一頁4.2.1原碼一位乘法及其實現在定點計算機中,用兩個原碼表示的數相乘,其乘積的符號由兩數的符號位異或得到,乘積的數值部分是兩數的絕對值相乘之積。例如,有兩個數X和Y[X]原=XsX1X2

…Xn[Y]原=YsY1Y2

…Yn則[X*Y]原=[X]原*[Y]原。乘積的符號位為:Xs⊕Ys乘積的數值部分為:(X1X2

…Xn)*(Y1Y2

…Yn)。上一頁下一頁

在計算機中其運算規則是:根據乘數Y絕對值每個數位上的值Yi是“1”還是“0”(從最低位Y0開始),決定本次部分積是加上被乘數X的絕對值,還是加上全“0”,得到的新部分積右移一位,再重復上面的動作,直到乘法做完為止。

【例4.19】X=+11010,Y=+10110,求Z=X*Y

解:[X]原=0.11010,[Y]原=0.10110乘積的符號位Z0=0⊕0=0

乘積的數值部分是兩數的絕對值相乘。開始時,部分積為全“0”。上一頁下一頁所得結果Z=+0.1000111100。有時部分積的符號位出現“1”,并不是出現了負數,而是部分積的值超出了“1”,右移時符號位應補“0”。

上一頁下一頁要實現原碼一位乘法,乘積的符號可以用異或門實現,異或門的兩個輸入為相乘兩數的符號,輸出即為乘積的符號。下圖給出了實現原碼一位乘法的邏輯電路框圖,以實現對相乘兩數的數值位相乘。上一頁下一頁

實現原碼一位乘法的邏輯電路框圖

主要組成部件有:寄存器A,存放計算的部分積Z,具有自動移位功能;寄存器B,存放被乘數X;寄存器C,存放乘數Y,具有自動移位功能;加法器F,進行部分積和被乘數相加;計數器i,用來控制逐位相乘的次數。控制信號A→F、B→F分別通過與門控制部分積、被乘數送入加法器F進行相加;控制信號A/2→A、C/2→C分別控制寄存器A、C自行右移一位。

下一頁上一頁4.2.2定點補碼一位乘法及其實現兩個補碼數相乘,其結果應直接得到乘積的補碼:[X]補*[Y]補=[X*Y]補⑴

當被乘數X的符號為任意,乘數Y的符號為正。因為Y≥0,[Y]補=Y,則[X]補*[Y]補=[X]補*Y=[X*Y]補這種情況,可以由兩個補碼數直接相乘得到正確的結果。運算過程中的加、移位等操作均按補碼規則進行。上一頁下一頁⑵

當被乘數X的符號為任意,乘數Y的符號為負。因為Y<0,[Y]補=2n+Y,則[X]補*[Y]補=[X]補*[2n+Y]=[X]補*2n+[X]補*Y

而正確的乘積應為[X]補*Y,這種情況,結果應該進行修正,把[X]補*2n作為修正值,這就是修正法補碼乘法。總結修正法補碼乘法的運算規則是:①

符號位參加運算,結果的符號由運算結果得出,重復執行n步右移操作進行相加。②

當乘數為負時,需進行n+1步操作,進行修正。上一頁下一頁⑶

當被乘數X和乘數Y的符號都任意時:應該用比較法補碼乘法。比較法又叫BOOTH法,是由修正法導出的用兩個補碼直接相乘后就得到正確結果的方法。乘數

Y=-2n+[Y]補=-2n+[Y0Y1Y2…Yn-1]=-2n+[Y0*2n-1+Y1*2n-2+Y3*2n-3+…+Yn-1*20]=-2n*Y0+Y0*2n-1+Y1*2n-2+…+Yn-1*20]=-2n-1*Y0+Y1*2n-2+Y2*2n-3+…+Yn-2*21+Yn-1*20]上式中,-2n乘以Y0,該公式仍然正確。將上式提出2n,則有:Y=[-2-1*Y0+Y1*2-2+Y2*2-3+…+Yn-2*2-(n-1)+Yn-1*2-(n)]2n=[2-1*(Y1-Y0)+2-2*(Y2-Y1)+2-3*(Y3-Y2)+…+2-(n-1)*(Yn-1-Yn-2)+2-n*(Yn-Yn-1)]*2n上一頁下一頁得:[X]補*Y=(2-1*(Y1-Y0)*[X]補+2-2*(Y2-Y1)*[X]補+2-3*(Y3-Y2)*[X]補+…+2-(n-1)*(Yn-1-Yn-2)*[X]補+2-n*(Yn-Yn-1)*[X]補)*2n也即:[X]補*Y=2-1*((Y1-Y0)*[X]補*2n+2-1*((Y2-Y1)*[X]補*2n+2-1*(Y3-Y2)*[X]補*2n+…+2-1*((Yn-1-Yn-2)*[X]補*2n+2-1*((Yn-Yn-1)*[X]補*2n))…)))寫成遞推公式:[Z0]補=2-1*(Yn-Yn-1)*[X]補*2n[Z1]補=2-1*([Z0]補+(Yn-1-Yn-2)*[X]補*2n)[Z2]補=2-1*([Z1]補+(Yn-2-Yn-3)*[X]補*2n)┇[Zi]補=2-1*([Zi-1]補+(Yn-i-1-Yn-i-2)*[X]補*2n)┇[Zn-1]補=2-1*([Zn-2]補+(Y1-Y0)*[X]補*2n)最后乘積為[Zn-1]補式中,Yn為附加位,在Yn-1以后,Yn=0。上一頁下一頁由此,可以總結出比較法補碼乘法的規則:在作補碼一位乘法時,在乘數的最末位后面再加一位附加位yn。開始時,yn=0,第一步運算是根據yn-1

yn這兩位的值判斷后決定,然后再根據yn-2yn-1這兩位的值判斷第二步該作什么運算,再根據yn-3yn-2這兩位的值判斷第三步該作什么運算,如此等等。因為每進行一步,乘數都要右移一位,yn-2yn-1

就移到yn-1

yn位置上。作第三步時,原來的yn-3yn-2移到了yn-2yn-1位置上。所以每次只要判斷yn-1

yn這兩位的值就行。判斷規則如表4-1所示。上一頁下一頁補碼一位比較乘法規則

上一頁下一頁比較法計算用流程圖表示

上一頁下一頁【例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。

上一頁下一頁實現一位補碼乘法的邏輯原理圖如圖4-4所示。它與一位原碼乘法的邏輯原理圖有些相似,不同的地方有以下幾點:⑴被乘數和乘數的符號位參加運算;⑵乘數寄存器C有附加位Yn,其初始狀態為“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控制信號,使最后一步不移位。上一頁下一頁補碼一位乘法邏輯原理圖上一頁下一頁4.2.3原碼兩位乘法定點原碼兩位乘法是根據乘數中相鄰兩位數碼的值來確定乘法的每一步作什么運算。兩位乘法的判別位是2位,即ynyn+1,共有4種可能,即00,01,10,11,其操作方法如下表所列。下一頁上一頁【例4.21】設X=1101,Y=1001,用原碼兩位乘法求Z=X*Y

解:以X為被乘數,Y為乘數,其判別位Y1Y0=01,Y3Y2=10,其兩位乘法的運算過程如下:上一頁下一頁所得結果Z=1110101。【例4.22】用原碼兩位乘法求Z=X*Y,其中X=101011,Y=001001,

解:以X為被乘數,Y為乘數,其判別位Y1Y0=01,Y3Y2=10,Y5Y4=00,其兩位乘法的運算過程如下:上一頁下一頁所得結果Z=110000011。說明:①

部分積減去被乘數X,是用補碼進行運算,即用+[-X]補的方法實現。②

部分積減去被乘數所得結果一般為負數,這是因為部分積要右移2位,所以總是小于被乘數的緣故。③

當判別位為11時,要用上次部分積減被乘數,右移2位,再在下一個判別位上加1。其原因是判別位為11(即3),應加上3倍的被乘數。兩種方法是等效的。 ④符號位擴展的實質是采用幾位加法器的問題。若采用n+2位加法器,符號位擴展2位;若采用n+3位加法器,則符號位應擴展3位。

下一頁上一頁4.2.4補碼兩位乘法進行定點補碼兩位乘法,要有3位判別位,3位判別位的組合關系為:-2Yi+Yi-1+Yi-2

它們的組合值與相應的加法操作,如下表所示。下一頁上一頁⑴判別位。在乘數的最低位后增加一位附加位。乘數的符號位要視數值部分的位數來決定。若數值部分的位數為偶數,則必須采用2位符號位;否則,就采用1位符號位。⑵加法操作的次數。定點補碼兩位乘法運算所做加法操作的次數為乘數的位數(包括符號位)除以2的值。⑶被乘數的符號位。可采用2位符號位或3位符號位,視情況而定。⑷符號位擴展。在進行定點補碼兩位乘法運算中,在進行右移2位操作時,要注意符號位的擴展,即右移時符號要一起移,空出的符號位以符號的原值填充。⑸最后一步的移位。視乘數的符號位而定。若符號位為2位,則不用移位;若符號位為1位,則要進行右移1位的操作。下一頁進行定點補碼兩位乘法運算需注意如下問題上一頁【例4.23】設X=-1101,Y=-0101,用補碼的兩位乘法求Z=X*Y

解:[X]補=11.0011,[-X]補=00.1101,[Y]補=11.1011采用2位符號位,[X*Y]補的補碼兩位乘法運算過程如下:下一頁故運算結果為:[X*Y]補=00.01000001,所以Z=X*Y=+1000001上一頁4.3定點除法及其實現4.3.1定點原碼除法4.3.2定點補碼除法

下一頁上一頁4.3.1定點原碼除法

⒈恢復余數法恢復余數法的運算規則如下:⑴從被除數減去2n-1倍除數,如果第一次余數為正,則除法溢出,停止運算;如果第一次余數為負,表示除法不溢出。⑵當余數為負時,將2n-1倍除數加到余數上,以恢復原來余數,然后減去2n-2倍的除數。如果余數為正,表示夠減,商為“1”;如果余數為負,表示不夠減,商為“0”。并需要恢復余數。⑶重復第⑵步,一直做到余數減去20為止,計算結束。下一頁上一頁【例4.24】設X=1011,Y=1101,用恢復余數法求Z=X÷Y解:[-Y]補=110011,除法過程如右。所以,結果是:商D=0.1101,余數R=0.0111下一頁上一頁⒉加減交替法運算規則如下:⑴商的符號位單獨處理,由ZS=XS⊕YS求得。⑵被除數與除數同符號,被除數減去除數;被除數與除數異號,被除數加上除數。⑶余數與除數同符號,上商“1”,余數左移一位,下次減除數,得到新的余數;余數與除數異號,上商“0”,余數左移一位,下次加除數,得到新的余數。 ⑷

重復第⑶步,共做n次(n為除數的位數),除法結束。

上一頁下一頁加減交替法求兩定點原碼數的除法:【例4.25】設X=1011,Y=1101,用加減交替法求Z=X÷Y解:加減交替法中經常要加除數,減除數,減除數Y,就是加[-Y]補,[-Y]補=110011,運算過程如下:得到同樣結果:D=0.1101,余數R=0.0111

說明:如果最末一位商為0,則要在負余數上加上除數才是真正的余數。本題中,商到第3位時,商為0,此時真正的余數應為111101+1101,即1.010。

下一頁上一頁【例4.26】設X=00101011,Y=0110,用加減交替法求Z=X÷Y解:[-Y]補=11010,運算過程如下:結果是:商D=0.0111,

余數R=0.0001上一頁下一頁實現原碼加減交替除法的邏輯結構框圖表示于下圖中。

上一頁下一頁4.3.2定點補碼除法

用[X]補÷[Y]補直接求得[X/Y]補。補碼除法的運算規則如下:⑴如果被除數與除數同號,求商時,用被除數減去除數;若兩數異號,則用被除數加上除數的辦法處理。⑵若余數與除數同號,上商1,左移一位后下次作余數減除數操作;若余數與除數異號,上商0,左移一位后下次作余數加除數操作。⑶商的符號是在第一次試算時求出的,若定點除不溢出,得到的就是正確的符號位的值。⑷商的修正問題。在對精度不高時,將商的最低一位恒置1。此時最大誤差為|2-n|。若對商的精度要求較高時,可對n位數求商n+1次,按得到的不同結果對商進行修正。當商為負時,要在商的最低一位加1,從反碼的結果得到商的正確的補碼值。上一頁下一頁補碼除法運算實例:【例4.27】設X=-1001,Y=+1101,用補碼除法求Z=X÷Y。解:[X]補=110111,[Y]補=001101,[-Y]補=110011,運算過程如下:運算結果,商的補碼[q]補=110101,余數的補碼[r]補=110010;商q=-1011,余數為R=-1110。下一頁上一頁【例4.28】設X=+1011,Y=+1101,用補碼加減交替除法求Z=X÷Y。解:[X]補=001011,[Y]補=001101,[-Y]補=110011,運算過程如下:

運算結果,商的補碼[q]補=001101,余數的補碼

[r]補=000111;商

q=+1101,余數為r=+0111。上一頁下一頁4.4浮點數的算術運算

4.4.1浮點數的補碼加法運算4.4.2浮點數的乘法運算4.4.3浮點數的除法運算下一頁上一頁4.4.1浮點數的補碼加法運算

完成浮點數加減運算的步驟:⑴對階。方法是,小階向大階看齊,階碼較小的數的尾數每向右移1位,該數階碼便加1,直到兩數的階碼相同為止。對階時要進行舍入處理。⑵尾數求和。

尾數連同符號相加。⑶規格化。若進行右規,還需要進行舍入處理。

下一頁上一頁【例4.29】有兩個浮點數

A=210(-0.110100),B=2100(+0.101011),求A+B=?解:①對階。

先把A、B兩數用補碼表示: [A]補=00.010;11.001100[B]補=00.100;00.101011可以看出,[A]補的階碼小,應向[B]補階碼看齊,[A]補階碼增2,尾數向右移2位:[A]補=00.100;11.110011[B]補=00.100;00.101011②

尾數求和。 11110011 +00101011 100.011110下一頁上一頁③

規格化上述結果為:

A+B=2100×(+0.011110)這是一個非規格化的數,對上述結果規格化,即進行左規:尾數向左移1位,階碼減1。得到最后結果:

A+B=2011×(+0.111100)④

舍入處理 舍入處理不是對每一個題目都是必須的,主要看在對階和右規格化尾數向右移位時,尾數的低位部分有否被丟掉。常用的舍入方法有兩種:一種是“0舍1入”法,即如果右移時被丟掉的數位的最高位為0,則舍去;反之則將尾數的末位加“1”。另一種是“恒置1”法,即只要有數位被移掉,就在尾數的末位恒置“1”。

下一頁上一頁4.4.2浮點數的乘法運算

浮點數乘法的運算規則是:乘積的尾數是相乘兩數的尾數之積,乘積的階碼是相乘兩數的階碼之和。結果也要進行規格化和舍入處理。如有兩個浮點數

X和

Y:X=2ex·Sx

Y=2ey·S

Z=X×Y=2(ex+ey)·(Sx×Sy)

在具體實現中,兩數階碼的求和運算可在階碼加法器中進行,兩個尾數的乘法運算,就是定點數的乘法運算。

下一頁上一頁4.4.3浮點數的除法運算

浮點數除法的運算規則是:商的尾數是相除兩數的尾數之商,商的階碼是相除兩數的階碼之差。結果也要進行規格化和舍入處理。如有兩個浮點數

X和

Y:X=2ex·Sx

Y=2ey·Sy則

Z=X÷Y=2(ex–ey)·(Sx÷Sy)綜上所述,浮點數的算術運算比定點數的算術運算要復雜許多,從運算器的結構來說,不但要有尾數運算器,而且還要有階碼運算器。階碼運算器用來求階差,修改階碼等等,一般只進行加減運算。而尾數運算器不但要有加法器用以求和,還應有左移和右移的功能,以實現對階操作和規格化操作。關于浮點運算器的一般結構,將在本章的最后小節進行介紹。

下一頁上一頁4.5運算器的組成和結構4.5.1算術邏輯單元ALU4.5.2

通用寄存器組4.5.3狀態寄存器4.5.4數據通路4.5.5運算器的基本結構4.5.6運算器組成實例下一頁上一頁4.5.1算術邏輯單元ALUALU的主要功能是對二進制數據進行算術運算、邏輯運算和各種移位操作。算術運算包括定點加、減、乘和除的運算;邏輯運算主要有邏輯與、邏輯或、邏輯異或和邏輯非操作;移位操作主要完成邏輯左移、邏輯右移、算術左移、算術右移及其它一些移位操作。 74181是一種典型的4位ALU器件。下頁圖是74181的電路圖,及用正邏輯和負邏輯表示的4位ALU74181的方框圖。和74181的運算功能表。

上一頁下一頁74181ALU的方框圖下一頁上一頁74181ALU的方框圖下一頁上一頁74181的運算功能表

下一頁上一頁4.5.2通用寄存器組

通用寄存器用來保存參加運算的操作數和運算的結果。寄存器是計算機中存取速度最快的存儲器件,同時還可以兼作某些指令的專用寄存器。例如,IBMPC系列微型計算機中,其CPU有8個16位的通用寄存器,其結構如下圖所示。

下一頁上一頁4.5.3狀態寄存器

記錄運算結果狀態,一般設置下面幾種標志狀態位:Z(零標志位):當運算結果為零時,Z位置1;結果非零時,Z位清0。N(符號標志位):當運算結果為負時,N位置1;結果為正時,N位清0。V(溢出標志位):當運算結果有溢出發生時,V位置1;無溢出時,V位清0。C(進位或借位標志位):當作加法時,如果運算中最高有效位向前有進位,C位置1;否則C位清0。當作減法運算時,如果不夠減,最高位向前有借位時,C位置1;否則C位清0。下一頁上一頁4.5.4數據通路

通常把從一個功能部件向另一個功能部件傳送數據所經過的功能部件、總線等稱為數據通路。數據通路是個很重要的概念,正確理解數據通路,能幫助我們理解指令執行過程,理解計算機總體運行過程

在上面圖所示的右半部分運算器中,MUX1、MUX2分別是兩個多路數據選擇器,用它們來選擇當前哪兩組數據送到ALU中。MUX1數據有三個來源:通用寄存器的輸出、指令中的相對位移量和常數“0”;MUX2數據也有三個來源:通用寄存器的輸出、程序計數器的輸出和數據寄存器的輸出。ALU的輸出信息通過內部數據總線送到通用寄存器中。 下一頁上一頁假設這個通用寄存器組有兩個輸出端口RA和RB,有一個輸入端口RI。寄存器中的數據以補碼表示。并假設寄存器組中的寄存器1用R1表示,寄存器2用R2表示,寄存器3用R3表示。運算之前,R1=0110,R2=1100,Z、N、C、V標志位全為0。

⑴第一種操作:R1加R2,結果送R3

其操作過程如下:R1的內容通過端口RA輸出,MUX1選擇RA的內容送到ALU的A輸入端;R2的內容通過端口RB輸出,MUX2選擇RB的內容送入ALU的B輸入端。令ALU作A+B算術加法操作,從Y輸出端輸出加的結果,并存入R3寄存器中。

下一頁上一頁

⑵第二種操作:0減R1,結果送R3,即求與R1相補的數。其操作過程如下:R1的內容從RB輸出,經過MUX2選擇,送到ALU的B輸入端,在MUX1處選擇常數“0”送入ALU的A輸入端,在ALU中選擇A-B的算術運算功能。由于運算器要進行的是補碼運算,A-B功能是通過[A]補+[-B]補來完成的。⑶第三種操作:利用運算器計算操作數地址或轉移地址假設當前執行轉移指令,轉移地址由程序計數器的值加上相對位移量得出。運算器計算轉移地址的過程是:MUX2選擇程序計數器PC的內容送往ALU的B輸入端,MUX1選擇指令字中的相對位移量到ALU的A輸入端,令ALU做A+B算術加運算,從Y輸出的內容送往程序計數器PC中,這時PC中就為轉移地址了。下次執行指令就從轉移地址開始執行。

下一頁上一頁⑷第四種操作:關于移位操作為簡單起見,我們以4位二進制數(最左邊一位為符號位)為例,來說明移位操作的規則和操作結果。下一頁上一頁下一頁上一頁下一頁上一頁下一頁上一頁4.5.5運算器的基本結構

⒈單總線結構的運算器運算器所有部件都接到同一條總線上的運算器結構是單總線結構的運算器。下一頁例如要執行一次加法操作,需要先把第一個操作數放入A緩沖器,然后再把第二個操作數放入B緩沖器,只有當這兩個操作數同時出現在ALU的兩個輸入端,ALU才能執行加法操作。這種結構的運算器主要缺點是操作速度較慢。上一頁⒉雙總線結構的運算器

雙總線結構的運算器如下圖所示。在這種結構中,兩個操作數同時加到ALU進行運算,只需要一次操作控制,而且馬上可以得到運算結果。ALU的輸出不能直接加到總線上,必須在ALU的輸出端設置一個緩沖寄存器。整個操作分兩步完成:第一步,在ALU的兩個輸入端輸入操作數,形成結果并送入緩沖寄存器;第二步,把結果送入目的寄存器。下一頁上一頁⒊三總線結構的運算器

三總線結構的運算器如下圖所示。在三總線結構運算器中,ALU的兩個輸入端分別由兩條總線供給,而ALU的輸出則與第三條總線相連。三總線結構的運算器的特點是操作時間快。下一頁上一頁4.5.6運算器組成實例⒈最簡單的運算器

下圖示出的一個運算器只有三個邏輯部件:算術邏輯運算單元ALU、累加寄存器AC和數據緩沖寄存器DR。是最簡單的運算器。上一頁下一頁⒉一臺小型機的運算器

下頁圖示出了一臺小型機的運算器邏輯方框圖。該運算器的基本功能包括:兩數的加減運算、一個數的加1運算、兩數的邏輯加運算、一個數的變補、變反傳送,以及數碼的左移、右移、直送和字節交換等操作。該運算器由以下幾部分組成:⑴算術邏輯運算單元ALU:由4片74181ALU芯片和1片74182CLA(Carrylookaheadadder,先行進位加法器)芯片組成16位字長的運算部件,因而具有兩級先行進位。

⑵鎖存器:在ALU的兩個輸入端上有兩個鎖存器A和B,用來暫存來自外部設備或存儲器(經數據總線)的數據,或者暫存來自通用寄存器(R0~R7)和源寄存器、暫存寄存器中的數據。一旦數據放入鎖存器,不管其外部的數據如何變化,ALU將依據鎖存器A和B中的數據進行運算。上一頁下一頁上一頁下一頁

⑶移位器將ALU的輸出進行左移、右移、直送、半字交換。因此這里的移位器也是一個4選1的多路開關,每次只能從4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論