




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第4章
機器數(shù)的運算方法及運算器機器數(shù)的加減運算及其實現(xiàn)定點乘法及其實現(xiàn)定點除法及其實現(xiàn)浮點數(shù)的算術(shù)運算運算器的組成和結(jié)構(gòu)浮點運算器習題4.1
機器數(shù)的加減運算及其實現(xiàn)4.1.1 原碼加法符號相同的兩個原碼相加,運算比較簡單;符號不相同的兩個原碼相加,實際上就是做減法運算,而在計算機中實現(xiàn)減法運算是很復雜的。1.符號相同的兩個原碼相加符號相同的兩個原碼相加,只要兩個數(shù)的數(shù)值相加即可,其符號不變?!纠?.1】設X=+10001,Y=+01011,求Z=X+Y。解:(+10001)+(+01011)+11100即Z=+11100?!纠?.2】設X=-10001,Y=-01011,求Z=X+Y。解:(-10001)+ (-01011)-11100即Z=-11100。2.符號相異的兩個原碼相加符號相異的兩個原碼相加,實際上是要做減法運算,做減法運算時先比較兩數(shù)的絕對值大小,用絕對值大的數(shù)減去絕對值小的數(shù),結(jié)果的符號是絕對值大的數(shù)的符號?!纠?.3】設X=+10101,Y=-01010,求Z=X+Y。解:先比較X與Y的絕對值,本題|X|>|Y|,所以做減法|X|-|Y|,即有10101- 0101001011結(jié)果是Z=+01011?!纠?.4】設X=+01010,Y=-10111,求Z=X+Y。解:先比較X與Y的絕對值,本題|Y|>|X|,所以做減法|Y|-|X|,即有10111- 0101001101結(jié)果是Z=-01101。用原碼進行符號不同的兩個數(shù)相加時有以下三步運算:①比較兩個數(shù)的絕對值的大小。②絕對值大的數(shù)的絕對值減去絕對值小的數(shù)的絕對值。③結(jié)果賦以絕對值大的那個數(shù)的符號。由上述各例可以看出,用原碼進行加法運算是很麻煩的,實際上計算機中不用原碼進行運算,而是用補碼來進行運算。1.定點補碼運算性質(zhì)性質(zhì)1 兩數(shù)之和的補碼等于兩數(shù)補碼之和。[X+Y]補=[X]補+[Y]補4.1.2
補碼加法【例4.5】設X=+11010,Y=-10101,用補碼的加法求Z=X+Y。解:加數(shù)和被加數(shù)的數(shù)值位都是5位,在數(shù)值位之前加1位符號位。這樣,[X]補=011010,[Y]補=101011[X+Y]補=[X]補+[Y]補=011010+101011=000101所以,X+Y=+00101。注意:在運算中,數(shù)值位和符號位有進位,本例采用單符號位,以2為模,進位的1就丟掉了?!纠?.6】設X=+10101,Y=-11010,用補碼的加法求Z=X+Y。解:[X]補=010101,[Y]補=100110[X+Y]補=[X]補+[Y]補=010101+100110=111011所以,X+Y=-00101。性質(zhì)2 一個負數(shù)的補碼的補碼就是這個負數(shù)的原碼。[[X]補]補=[X]原【例4.7】設有兩個定點小數(shù)X=-0.10011,Y=-0.11001求這兩個負數(shù)補碼的補碼。解:[X]原=1.10011[Y]原=1.11001[X]補=1.01101[Y]補=1.00111[[X]補]補=1.10011=[X]原[[Y]補]補=1.11001=[Y]原補碼的這一性質(zhì),為計算機處理運算結(jié)果提供了方便,計算機中計算結(jié)果的補碼均可化成該數(shù)的原碼?!纠?.8】設有兩個定點小數(shù)X=-0.1101,Y=0.0111(-1<X+Y<0),求這兩數(shù)之和。解:[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結(jié)果相同??梢姡醚a碼做加法是數(shù)值位連同符號位一起參加運算的。但是在有溢出的情況下,用一般的補碼加法就得不到正確的結(jié)果,再看下面的例子。【例4.9】設有兩個定點小數(shù)X=+0.10111,Y=+0.10001,用補碼的加法求Z=X+Y。解: [X]補=0.10111,[Y]補=0.10001[X+Y]補=[X]補+[Y]補=0.10111+0.10001=1.01000Z=X+Y=-0.11000兩個大于0.5的正數(shù)相加,結(jié)果就為負值,結(jié)果顯然是錯誤的?!纠?.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的負數(shù)相加,結(jié)果為正值,這顯然也是錯誤的。為什么在上面的兩個例子中用一般的補碼加法運算得不出正確的結(jié)果呢?原因是它們的和超出了機器數(shù)所能表示的最大范圍,即產(chǎn)生了溢出,在有溢出的情況下,用一般補碼加法就無法得到正確結(jié)果。從上面的兩個例子也可以看到,溢出都是發(fā)生在同符號兩數(shù)相加時,而兩個異符號數(shù)相加是不會發(fā)生溢出的。【例4.11】設有兩個定點小數(shù)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,沒有發(fā)生溢出,結(jié)果是正確的。【例4.12】設有兩個定點小數(shù)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,沒有發(fā)生溢出,結(jié)果也是正確的。溢出的問題可用變形補碼來解決。下面介紹變形補碼。2.變形補碼加法變形補碼是符號位用兩位來表示的補碼。變形補碼的定義為:對于變形補碼,補碼的加法性質(zhì)公式同樣適用,即:[X+Y]變形補=[X]變形補+[Y]變形補[[X]變形補]變形補=[X]原用該公式進行加法運算就能及時判斷出溢出。用雙符號位進行判斷,若和的兩個符號位相同(00或11),不發(fā)生溢出;若和的兩個符號位相異(01或10)就說明發(fā)生了溢出。遇到溢出,就要停機進行如下處理:選取一個合理的比例因子H=2i,對每個加數(shù)都除以H,然后相加,其結(jié)果再乘以H,即得所求。下面對例4.9和例4.10用變形補碼加法來求結(jié)果?!纠?.13】設X=+10111,Y=+10001,用變形補碼的加法求Z=X+Y。解:設比例因子H=2,則有[1/2X]變形補=00.01011,[1/2Y]變形補=00.01001[1/2(X+Y)]變形補=[1/2X]變形補+[1/2Y]變形補=00.01011+00.01001=00.10100所以,1/2(X+Y)=+10100,X+Y=+101000。【例4.14】設X=-10111,Y=-10001,用變形補碼的加法求Z=X+Y。解:設比例因子H=2,則有[1/2X]變形補=11.10101,[1/2Y]變形補=11.10111[1/2(X+Y)]變形補=[1/2X]變形補+[1/2Y]變形補=11.10101+11.10111=11.01100所以,[1/2(X+Y)]=-10100,X+Y=-101000。說明:(1) 舍入處理。在變形補碼運算中,加數(shù)除以H=2i,是通過把[X]補右移1位得到的。在移位時,末幾位可能超出機器的最末位而丟失,造成誤差。為了減少誤差,通常要進行舍入處理,一般有兩種方法。①恒置1。即移位后機器末位總是1。上面的例子就是用的恒置1的方法。②0舍1入。即移出去的數(shù)是0則抹去,移出去的數(shù)是1則進1到末位。(2) 符號位擴展。補碼在右移時,要注意符號位要一起移,且最左邊一位要補上原符號位的值,這就叫做符號位擴展,即把符號位擴展到為3位。總結(jié)以上內(nèi)容,得出補碼相加的規(guī)則:①若兩數(shù)符號不同,相加的結(jié)果即為和的補碼。②若兩數(shù)符號相同,相加后若其和的符號不變,則結(jié)果是和的補碼。③若兩數(shù)符號相同,相加后若其和的符號改變,則表示發(fā)生了溢出。兩個正數(shù)相加,結(jié)果的符號為“01”,表示發(fā)生正溢出;兩個負數(shù)相加,結(jié)果的符號為“10”,表示發(fā)生負溢出。兩數(shù)相減的減法運算仍可用補碼的加法進行。性質(zhì)3 兩數(shù)之差的補碼等于被減數(shù)的補碼與負的減數(shù)補碼之和。[X-Y]補=[X]補+[-Y]補這可由性質(zhì)1推導而得:[X-Y]補=[X+(-Y)]補=[X]補+[-Y]補4.1.3
減法運算【例4.15】兩個正數(shù)相減,被減數(shù)大于減數(shù)的例子。設X=+11001,Y=+10001,求Z=X-Y。解: [X]補=00.11001,[-Y]補=11.01111[X-Y]補=[X]補+[-Y]補=00.11001+11.01111=00.01000X-Y=+01000所以,Z=+01000。【例4.16】兩個正數(shù)相減,被減數(shù)小于減數(shù)的例子。設X=+10011,Y=+11001,求Z=X-Y。解: [X]補=00.10011,[-Y]補=11.00111[X-Y]補=[X]補+[-Y]補=00.10011+11.00111=11.11010X-Y=-00110所以,Z=-00110?!纠?.17】兩負數(shù)相減,被減數(shù)大于減數(shù)的例子。設X=-10011,Y=-11001,求Z=X-Y。解:[X]補=11.01101,[-Y]補=00.11001[X-Y]補=[X]補+[-Y]補=11.01101+00.11001=00.00110X-Y=+00110所以,Z=+00110。【例4.18】兩負數(shù)相減,被減數(shù)小于減數(shù)的例子。設X=-11001,Y=-10011,求Z=X-Y。解:[X]補=11.00111,[-Y]補=00.10011[X-Y]補=[X]補+[-Y]補=11.00111+00.10011=11.11010X-Y=-00110所以,Z=-00110。在線路實現(xiàn)上,若已有[Y]補,求[-Y]補可用把[Y]補每一位(包括符號位和數(shù)值位)取反,再在最低位加1來實現(xiàn)。實現(xiàn)補碼加減運算的邏輯電路如圖4.1所示。4.1.4
補碼加減法運算線路的實現(xiàn)圖4.1實現(xiàn)補碼加減運算的邏輯電路圖中各個部件的名稱和功能是:F 表示多位并行加法器,它的功能是接收參加運算的兩個數(shù)X和Y,實現(xiàn)加法運算,并在輸出端給出本次運算結(jié)果。加法器的最低一位可以接收一個進位信號1→F。X和Y 臨時存放參加運算數(shù)據(jù)的兩個寄存器,X還用來保存運算的結(jié)果。A “與”門,功能是控制寄存器X輸出的內(nèi)容是否送到加法器F的左輸入端,用X→F信號控制。C “與”門,功能是控制加法器F的運算結(jié)果是否寫回寄存器X,用F→X信號控制。B“與或”門,功能是通過控制信號Y→F和→F分別把Y寄存器中的內(nèi)容是原數(shù)據(jù)送加法器F還是各位取反后送加法器F。加法器和寄存器由若干二進制位組成,位數(shù)就是定點運算器的字長,一般可為16.32或64位等。它們的最高一位一般用作符號位,其余各位是數(shù)值位。4.2
定點乘法及其實現(xiàn)4.2.1 原碼一位乘法及其實現(xiàn)用原碼進行乘法運算比較方便。在定點計算機中,用兩個原碼表示的數(shù)相乘,其乘積的符號由兩數(shù)的符號位異或得到,乘積的數(shù)值部分是兩數(shù)的絕對值相乘之積??梢?原碼的乘法的實質(zhì)是兩個正數(shù)相乘。在計算機中實現(xiàn)乘法運算的方法是移位相加,采用部分積右移的方法。其運算規(guī)則是:根據(jù)乘數(shù)Y絕對值每個數(shù)位上的值Yi是“1”還是“0”(從最低位Y0開始),決定本次部分積是加上被乘數(shù)X的絕對值,還是加上全“0”,得到的新部分積右移一位,再重復上面的動作,直到乘法做完為止?!纠?.19】X=+11010,Y=+10110,求Z=X*Y。解: [X]原=0.11010,[Y]原=0.10110乘積的符號位Z0=0 0=0。乘積的數(shù)值部分是兩數(shù)的絕對值相乘。開始時,部分積為全“0”。所得結(jié)果Z=+0.1000111100。在上述算式中,是兩數(shù)的絕對值相乘,但有時部分積的符號位出現(xiàn)“1”,并不是出現(xiàn)了負數(shù),而是部分積的值超出了“1”,右移時符號位應補“0”部分積每次右移一位,最低位進入了乘數(shù)寄存器中,這一位下次不需要參加運算,運算只在高位進行。乘數(shù)和部分積連在一起進行右移,乘數(shù)最低一位自動丟失。部分積的低位就依次進入乘數(shù)寄存器中。用這種形式計算乘法,兩個n位數(shù)相乘,只需要n+1位全加器就夠了。運算結(jié)果為2n位。要實現(xiàn)原碼一位乘法,乘積的符號可以用異或門實現(xiàn),異或門的兩個輸入為相乘兩數(shù)的符號,輸出即為乘積的符號。圖4.2給出了實現(xiàn)原碼一位乘法的邏輯電路框圖,以實現(xiàn)對相乘兩數(shù)的數(shù)值位相乘。現(xiàn)對該圖說明如下。圖4.2實現(xiàn)原碼一位乘法的邏輯電路框圖主要組成部件有:寄存器A,存放計算的部分積Z,具有自動移位功能;寄存器B,存放被乘數(shù)X;寄存器C,存放乘數(shù)Y,具有自動移位功能;加法器F,進行部分積和被乘數(shù)相加;計數(shù)器i,用來控制逐位相乘的次數(shù)。控制信號A→F、B→F分別通過與門控制部分積、被乘數(shù)送入加法器F進行相加;控制信號A/2→A.C/2→C分別控制寄存器A.C自行右移一位。乘法開始時,寄存器A被清零,作為初始部分積。通過控制命令A→F和B→F把部分積和被乘數(shù)送入加法器,實現(xiàn)部分積和被乘數(shù)相加,得到新的部分積,部分積的右移是通過控制信號A/2→A實現(xiàn)的。乘法運算開始時,發(fā)“啟動”信號,使控制觸發(fā)器Cx置“1”,于是開啟時序脈沖T。當乘數(shù)寄存器C最末位為“1”時,部分積Z和被乘數(shù)X在加法器中相加,其結(jié)果輸出到寄存器A中,只要控制脈沖T到來,控制信號A/2→A就使部分積右移一位;與此同時,乘數(shù)寄存器C也在控制信號C/2→C的作用下,實現(xiàn)右移一位,其最低位的值Yn可用作B→F控制命令。圖中,寄存器A與寄存器C是連接起來的,右移時寄存器A的最低位將移入寄存器C的最高數(shù)值位,乘法結(jié)束時,乘積的高位部分保留在寄存器A中,而積的低位部分保存在寄存器C中,原來的乘數(shù)在逐位右移過程中全部移出丟失。所得乘積為2n+1位,其中符號位1位,數(shù)值位2n位。計數(shù)器中的初值是乘數(shù)位數(shù)的補碼值,完成一位運算,就計數(shù)一次(實際上是減一次),直至計數(shù)器值為0,給出結(jié)束乘法運算的控制信號。很多計算機是直接用補碼相乘的。兩個補碼數(shù)相乘,其結(jié)果應直接得到乘積的補碼:[X]補*[Y]補=[X*Y]補但由于乘數(shù)可能為正,也可能為負,情況就不相同。4.2.2
定點補碼一位乘法及其實現(xiàn)(1) 當被乘數(shù)X的符號為任意,乘數(shù)Y的符號為正。因為Y≥0,[Y]補=Y,則[X]補*[Y]補=[X]補*Y=[X*Y]補這種情況,可以由兩個補碼數(shù)直接相乘得到正確的結(jié)果。運算過程中的加、移位等操作均按補碼規(guī)則進行。(2) 當被乘數(shù)X的符號為任意,乘數(shù)Y的符號為負。因為Y<0,[Y]補=2n+Y,則[X]補*[Y]補=[X]補*[2n+Y]=[X]補*2n+[X]補*Y而正確的乘積應為[X]補*Y,上面結(jié)果顯然多了一項[X]補*2n。這種情況,結(jié)果應該進行修正,把[X]補*2n作為修正值,這就是修正法補碼乘法??偨Y(jié)修正法補碼乘法的運算規(guī)則是:①符號位參加運算,結(jié)果的符號由運算結(jié)果得出,重復執(zhí)行n步右移操作進行相加。②當乘數(shù)為負時,需進行n+1步操作,進行修正。(3) 當被乘數(shù)X和乘數(shù)Y的符號都任意時。當被乘數(shù)X和乘數(shù)Y的符號都任意時,應該用比較法補碼乘法。比較法又叫BOOTH法,是由修正法導出的用兩個補碼直接相乘后就得到正確結(jié)果的方法。這種方法有更大的適應性。由此,可以總結(jié)出比較法補碼乘法的規(guī)則。在作補碼一位乘法時,要用兩位判別位判別本次部分積作什么運算。因此在乘數(shù)的最末位后面再加一位附加位Yn。開始時,Yn=0,第一步運算是根據(jù)Yn-1Yn這兩位的值判斷后決定,然后再根據(jù)Yn-2Yn-1這兩位的值判斷第二步該作什么運算,再根據(jù)Yn-3Yn-2這兩位的值判斷第三步該作什么運算,如此等等。因為每進行一步,乘數(shù)都要右移一位,Yn-2Yn-1就移到Y(jié)n-1Yn位置上。作第三步時,原來的Yn-3Yn-2移到了Yn-2Yn-1位置上。所以每次只要判斷Yn-1Yn這兩位的值就行。判斷規(guī)則如表4.1(見書100頁)所示。比較法計算用流程圖表示,如圖4.3所示。在做補碼一位乘法時,開始時部分積為0,然后根據(jù)上述規(guī)則決定本次做什么運算,共作n+1步,最后一步不移位。圖4.3比較法計算的流程圖【例4.20】利用補碼一位乘法計算Z=X*Y,其中X=-0.1101,Y=0.1011。解:[X]補=11.0011,[Y]補=0.1011,[-X]補=00.1101乘積的數(shù)值部分是兩數(shù)的絕對值相乘。開始時,部分積為全“0”。所以[X*Y]補=11.01110001,結(jié)果Z=X*Y=-0.10001111。實現(xiàn)一位補碼乘法的邏輯原理圖如圖4.4所示。它與一位原碼乘法的邏輯原理圖有些相似,不同的地方有以下幾點:圖4.4補碼一位乘法邏輯原理圖被乘數(shù)和乘數(shù)的符號位參加運算。乘數(shù)寄存器C有附加位Yn,其初始狀態(tài)為“0”。當乘數(shù)和部分積每次右移時,部分積最低位移入寄存器C的首位位置,所以寄存器C必須是具有右移功能的寄存器。被乘數(shù)寄存器B的每一位用原碼或反碼(可用觸發(fā)器的Q端或Q端輸出)經(jīng)多路開關傳送到加法器對應位的一個輸入端,而多路開關的控制信號由Yn-1.Yn的輸出譯碼器產(chǎn)生。當Yn-1Yn=01時,送[X]補;當Yn-1Yn=10時,送[-X]補,即送寄存器B內(nèi)容的反碼且在加法器末位加1。寄存器A用來保存部分積,該寄存器也應具有右移的功能,其符號位與加法器的符號位始終一致。當計數(shù)器i=n+1時,封鎖A/2→A.C/2→C控制信號,使最后一步不移位。定點原碼兩位乘法是根據(jù)乘數(shù)中相鄰兩位數(shù)碼的值來確定乘法的每一步作什么運算。兩位乘法的判別位是2位,即YnYn+1,共有4種可能,即00、01.10、11,其操作方法如表4.2(見書102頁)所列。4.2.3
原碼兩位乘法【例4.21】設X=1101,Y=1001,用原碼兩位乘法求Z=X*Y。解:以X為被乘數(shù),Y為乘數(shù),其判別位Y1Y0=01,Y3Y2=10,其兩位乘法的運算過程如下:所得結(jié)果Z=1110101。【例4.22】用原碼兩位乘法求Z=X*Y,其中X=101011,Y=001001。解:以X為被乘數(shù),Y為乘數(shù),其判別位Y1Y0=01,Y3Y2=10,Y5Y4=00,其兩位乘法的運算過程如下:所得結(jié)果Z=110000011。說明:①部分積減去被乘數(shù)X,是用補碼進行運算,即用+[-X]補的方法實現(xiàn)。②部分積減去被乘數(shù)所得結(jié)果一般為負數(shù),這是因為部分積要右移2位,所以總是小于被乘數(shù)的緣故。③當判別位為11時,要用上次部分積減被乘數(shù),右移2位,再在下一個判別位上加1。其原因是判別位為11(即3),應加上3倍的被乘數(shù)。兩種方法是等效的。④符號位擴展的實質(zhì)是采用幾位加法器的問題。若采用n+2位加法器,符號位擴展2位;若采用n+3位加法器,則符號位應擴展3位。進行定點補碼兩位乘法,要有3位判別位,3位判別位的組合關系為:-2Yi+Yi-1+Yi-2它們的組合值與相應的加法操作,如表4.3(見書104頁)所示。進行定點補碼兩位乘法運算需注意如下問題:4.2.4
補碼兩位乘法(1) 判別位。乘數(shù)的判別位涉及其附加位和符號位。在乘數(shù)的最低位后,一定要增加一位附加位。定點補碼兩位乘法是從判別乘數(shù)的最低兩位與附加位的組合值開始的。而乘數(shù)的符號位要視數(shù)值部分的位數(shù)來決定。若數(shù)值部分的位數(shù)為偶數(shù),則必須采用2位符號位;否則,就采用1位符號位。這就是說,乘數(shù)的數(shù)值部分連同符號位要保證為偶數(shù)。實際上,我們所使用的計算機,一般地說,其字長均為偶數(shù),因此,若乘數(shù)的位數(shù)(包括1位符號位)為計算機的字長,符號位取1位即可。加法操作的次數(shù)。定點補碼兩位乘法運算所做加法操作的次數(shù)為乘數(shù)的位數(shù)(包括符號位)除以2的值。被乘數(shù)的符號位??刹捎?位符號位或3位符號位,視情況而定。符號位擴展。在進行定點補碼兩位乘法運算中,在進行右移2位操作時,要注意符號位的擴展,即右移時符號要一起移,空出的符號位以符號的原值填充。最后一步的移位。視乘數(shù)的符號位而定。若符號位為2位,則不用移位;若符號位為1位,則要進行右移1位的操作?!纠?.23】設X=-1101,Y=-0101,用補碼的兩位乘法求Z=X*Y。解:[X]補=11.0011,[-X]補=00.1101,[Y]補=11.1011采用2位符號位,[X*Y]補的補碼兩位乘法運算過程如下:最后一步組合值為0,應加0,沒有在運算步驟中列出,也不用移位,故運算結(jié)果為:[X*Y]補=00.01000001所以Z=X*Y=+10000014.3
定點除法及其實現(xiàn)4.3.1 定點原碼除法與乘法運算類似,原碼除法的結(jié)果是兩個正數(shù)相除的結(jié)果,結(jié)果的符號是兩個數(shù)的符號位的異或值。在進行定點數(shù)除法時,只考慮被除數(shù)小于除數(shù)的情況,因為在這種情況下,商的小數(shù)點就在最左邊1位有效數(shù)字的前面,操作規(guī)范。本小節(jié)介紹除法的兩種方法。1.恢復余數(shù)法我們先從手算除法的例子說起。設被除數(shù)X=1011,除數(shù)Y=1101,求Z=X÷Y。其運算過程為:X除以Y的結(jié)果,商為0.1101,余數(shù)為0.0111×2-4,商的符號位為0。可以看出,手算除法的過程,就是不斷地比較除數(shù)和被除數(shù)(第一次是被除數(shù)X,以后是上次余數(shù)Ri的兩倍2Ri)的過程。若2Ri>Y,則夠減,商1;若2Ri<Y,則不夠減,商0(若X<Y,則第一次就比較2X與Y),直至除盡(余數(shù)為0)或除到符合要求的商的位數(shù)為止(有余數(shù))。計算機如何判斷夠減不夠減呢?它是先做減法,即2X或2Ri+(-Y)補,如果余數(shù)為正,說明夠減,就商1;如果余數(shù)為負,說明不夠減,就商0。這時本來不夠減而減了,所以要把除數(shù)再加回去,恢復成原來的余數(shù),因此本方法稱為“恢復余數(shù)法”?;謴陀鄶?shù)法的運算規(guī)則如下:(1) 從被除數(shù)減去2n-1倍除數(shù),如果第一次余數(shù)為正,則除法溢出,停止運算;如果第一次余數(shù)為負,表示除法不溢出。當余數(shù)為負時,將2n-1倍除數(shù)加到余數(shù)上,以恢復原來余數(shù),然后減去2n-2倍的除數(shù)。如果余數(shù)為正,表示夠減,商為“1”;如果余數(shù)為負,表示不夠減,商為“0”。并需要恢復余數(shù)。重復第(2)步,一直做到余數(shù)減去20為止,計算結(jié)束。下面用具體例子進行運算來說明?!纠?.24】設X=1011,Y=1101,用恢復余數(shù)法求Z=X÷Y。解:[-Y]補=110011,除法過程如下:所以,結(jié)果是:商D=0.1101,余數(shù)R=0.0111。2.加減交替法恢復余數(shù)法進行除法運算的缺點是不能預先知道商0還是商1,因而運算步驟不能預先確定,這樣會使控制設備復雜化。加減交替法就克服了這一缺點,加減交替法是在恢復余數(shù)法的基礎上發(fā)展而來的,是對恢復余數(shù)法的一種改進,應用很廣。加減交替法的運算步驟是固定的,它的運算規(guī)則如下:商的符號位單獨處理,由ZS=XS YS求得。被除數(shù)與除數(shù)同符號,被除數(shù)減去除數(shù);被除數(shù)與除數(shù)異號,被除數(shù)加上除數(shù)。余數(shù)與除數(shù)同符號,上商“1”,余數(shù)左移一位,下次減除數(shù),得到新的余數(shù);余數(shù)與除數(shù)異號,上商“0”,余數(shù)左移一位,下次加除數(shù),得到新的余數(shù)。重復第(3)步,共做n次(n為除數(shù)的位數(shù)),除法結(jié)束。下面舉兩個例子,說明用加減交替法求兩定點原碼數(shù)的除法。【例4.25】設X=1011,Y=1101,用加減交替法求Z=X÷Y。解:加減交替法中經(jīng)常要加除數(shù),減除數(shù)。減除數(shù)Y,就是加[-Y]補,[-Y]補=110011。運算過程如下可見,得到同樣結(jié)果:D=0.1101,余數(shù)R=0.0111。說明:如果最末一位商為0,則要在負余數(shù)上加上除數(shù)才是真正的余數(shù)。本題中,商到第3位時,商為0,此時真正的余數(shù)應為111101+1101,即1.010。【例4.26】設X=00101011,Y=0110,用加減交替法求Z=X÷Y。解:[-Y]補=11010,運算過程如下:結(jié)果是:商D=0.0111,余數(shù)R=0.0001。實現(xiàn)原碼加減交替除法的邏輯結(jié)構(gòu)框圖表示于圖4.5中。圖4.5原碼加減交替除法邏輯結(jié)構(gòu)框圖與補碼乘法類似,也可以用補碼完成除法操作,即用[X]補÷[Y]補直接求得[X/Y]補。補碼除法的規(guī)則要比原碼除法的規(guī)則復雜一些。由于加減交替法運算除法其操作步驟整齊劃一,因此定點補碼除法經(jīng)常使用加減交替法。4.3.2
定點補碼除法當除數(shù)和被除數(shù)用補碼表示時,判別是否夠除,就不再是簡單地用被除數(shù)(余數(shù))減去除數(shù),而是要比較它們的絕對值的大小。因此,若兩數(shù)同符號,要用減法;若兩數(shù)符號相異,則要用加法。對于判斷是否夠減,及確定本次上商1還是上商0的規(guī)則,都要區(qū)分是正除以正、負除以負、正除以負以及負除以正等不同情況進行處理。第三,結(jié)果商的符號,與數(shù)值位上商過程有關,商為正時,商的每一位上的值與原碼表示一致,而當商為負時,商的各位應是補碼形式的值,很難直接判斷。在計算機中,往往是先按各位的反碼值上商,除完后,再用在最低位上加1的辦法求出正確的補碼值。補碼除法的運算規(guī)則如下:如果被除數(shù)與除數(shù)同號,求商時,用被除數(shù)減去除數(shù);若兩數(shù)異號,則用被除數(shù)加上除數(shù)的辦法處理。若余數(shù)與除數(shù)同號,上商1,左移一位后下次作余數(shù)減除數(shù)操作;若余數(shù)與除數(shù)異號,上商0,左移一位后下次作余數(shù)加除數(shù)操作。商的符號是在第一次試算時求出的,若定點除不溢出,得到的就是正確的符號位的值。(4) 商的修正問題。在對精度要求不高時,將商的最低一位恒置1。此時最大誤差為|2-n|。若對商的精度要求較高時,可對n位數(shù)求商n+1次,按得到的不同結(jié)果對商進行修正。當商為負時,要在商的最低一位加1,從反碼的結(jié)果得到商的正確的補碼值。下面給出一個補碼除法運算的實例?!纠?.27】設X=-1001,Y=+1101,用補碼除法求Z=X÷Y。解:[X]補=110111,[Y]補=001101,[-Y]補=110011,運算過程如下:運算結(jié)果: 商的補碼[q]補=110101,余數(shù)的補碼[r]補=110010;商q=-1011,余數(shù)為r=-1110。【例4.28】設X=+1011,Y=+1101,用補碼加減交替除法求Z=X÷Y。解:[X]補=001011,[Y]補=001101,[-Y]補=110011,運算過程如下:運算結(jié)果:商的補碼[q]補=001101,余數(shù)的補碼[r]補=000111;商q=+1101,余數(shù)為r=+0111。4.4
浮點數(shù)的算術(shù)運算4.4.1 浮點數(shù)的補碼加法運算運算在浮點數(shù)中,階碼和尾數(shù)有時都用補碼表示。兩浮點數(shù)進行加減,首先要看兩數(shù)的階碼是否相同,也就是小數(shù)點位置是否對齊。若兩數(shù)的階碼是相等的,表示小數(shù)點是對齊的,就可進行尾數(shù)的加減。反之,若兩數(shù)的階碼不等,表示兩數(shù)小數(shù)點的位置沒有對齊,此時必須使兩數(shù)的階碼相等,這個工作稱為“對階”。對階完后,才能進行兩尾數(shù)的加減運算。運算結(jié)果可能不是規(guī)格化的數(shù),為了保證運算精度,需要對運算結(jié)果進行規(guī)格化處理。而在對階和規(guī)格化的過程中,可能有數(shù)碼丟掉,為了減少誤差,還需要進行舍入處理??傊?,要完成浮點數(shù)的加減運算,應按如下三步進行:對階。方法是,小階向大階看齊,階碼較小的數(shù)的尾數(shù)每向右移1位,該數(shù)階碼便加1,直到兩數(shù)的階碼相同為止。對階時要進行舍入處理。尾數(shù)求和。尾數(shù)連同符號相加。規(guī)格化。若進行右規(guī),還需要進行舍入處理。下面以具體例子說明。【例4.29】有兩個浮點數(shù)A=210(-0.110100),B=2100(+0.101011),求A+B=?解:(1) 對階先把A.B兩數(shù)用補碼表示:[A]補=00.010;11.001100[B]補=00.100;00.101011可以看出,[A]補的階碼小,應向[B]補階碼看齊,[A]補階碼增2,尾數(shù)向右移2位。尾數(shù)求和11110011+ 00101011100.011110規(guī)格化上述結(jié)果為: A+B=2100×(+0.011110)這是一個非規(guī)格化的數(shù),對上述結(jié)果規(guī)格化,即進行左規(guī):尾數(shù)向左移1位,階碼減1。得到最后結(jié)果:A+B=2011×(+0.111100)(4) 舍入處理舍入處理不是對每一個題目都是必須的,主要看在對階和右規(guī)格化尾數(shù)向右移位時,尾數(shù)的低位部分有否被丟掉。常用的舍入方法有兩種:一種是“0舍1入”法,即如果右移時被丟掉的數(shù)位的最高位為0,則舍去;反之則將尾數(shù)的末位加“1”。另一種是“恒置1”法,即只要有數(shù)位被移掉,就在尾數(shù)的末位恒置“1”。浮點數(shù)乘法的運算規(guī)則是:乘積的尾數(shù)是相乘兩數(shù)的尾數(shù)之積,乘積的階碼是相乘兩數(shù)的階碼之和。結(jié)果也要進行規(guī)格化和舍入處理。如有兩個浮點數(shù)X和Y:X=2ex·SxY=2ey·Sy則Z=X×Y=2(ex+ey)·(Sx×Sy)在具體實現(xiàn)中,兩數(shù)階碼的求和運算可在階碼加法器中進行,兩個尾數(shù)的乘法運算就是定點數(shù)的乘法運算。4.4.2
浮點數(shù)的乘法運算浮點數(shù)除法的運算規(guī)則是:商的尾數(shù)是相除兩數(shù)的尾數(shù)之商,商的階碼是相除兩數(shù)的階碼之差。結(jié)果也要進行規(guī)格化和舍入處理。如有兩個浮點數(shù)X和Y:X=2ex·SxY=2ey·Sy則Z=X÷Y=2(ex-ey)·(Sx÷Sy)在具體實現(xiàn)中,兩數(shù)階碼的相減運算可在階碼加法器中進行,兩個尾數(shù)的除法運算則與定點數(shù)的除法運算相同。4.4.3
浮點數(shù)的除法運算綜上所述,浮點數(shù)的算術(shù)運算比定點數(shù)的算術(shù)運算要復雜許多,從運算器的結(jié)構(gòu)來說,不但要有尾數(shù)運算器,而且還要有階碼運算器。階碼運算器用來求階差、修改階碼等,一般只進行加減運算。而尾數(shù)運算器不但要有加法器用以求和,還應有左移和右移的功能,以實現(xiàn)對階操作和規(guī)格化操作。關于浮點運算器的一般結(jié)構(gòu),將在本章的最后小節(jié)進行介紹。前面已經(jīng)介紹,中央處理器由運算器、控制器、總線和時鐘等部件組成。圖4.6表示了中央處理器CPU的簡圖,該圖的右半部分為運算器,左半部分為控制器。運算器是計算機對數(shù)據(jù)進行加工處理的中心,它主要由算術(shù)邏輯單元ALU、通用寄存器組、狀態(tài)寄存器、數(shù)據(jù)多路選擇器MUX等組成。4.5
運算器的組成和結(jié)構(gòu)圖4.6中央處理器CPU簡圖ALU的主要功能是對二進制數(shù)據(jù)進行算術(shù)運算、
邏輯運算和各種移位操作。算術(shù)運算包括定點加、減、乘和除的運算;邏輯運算主要有邏輯與、邏輯或、邏輯異或和邏輯非操作;移位操作主要完成邏輯左移、邏輯右移、算術(shù)左移、算術(shù)右移及其他一些移位操作。在某些機器上ALU還要完成數(shù)值比較、變更數(shù)值符號、計算操作數(shù)在存儲器中的地址等工作。4.5.1
算術(shù)邏輯單元ALUALU能夠處理數(shù)據(jù)的位數(shù)和機器的字長有關,如Z80微處理器的ALU是8位;286以前的PC機,ALU是16位;386.486和奔騰微機,ALU是32位。通常字長越長,運算的速度就越快。現(xiàn)在市場上提供一種型號為AM29332的32位ALU,其操作數(shù)從輸入到結(jié)果輸出,只需要幾十納秒(ns)時間。圖4.6右半部分運算器中的ALU就是算術(shù)邏輯部件。從圖中可以看出,它有兩個數(shù)據(jù)輸入端A和B,一個數(shù)據(jù)輸出端Y。輸入輸出數(shù)據(jù)的寬度與ALU處理的數(shù)據(jù)寬度相同。ALU一般具有A+B.A-B.B-A等算術(shù)運算功能,A.OR.B.A.AND.B.A.XOR.B等幾種邏輯運算功能,還有左移、右移的功能。74181是一種典型的4位ALU器件。圖4.7是74181的電路圖,圖4.8示出了用正邏輯和負邏輯表示的4位ALU74181的方框圖。表4.4(見書114頁)是74181的運算功能表。圖4.7
74181的電路圖圖4.8
74181
ALU的方框圖近代計算機的運算器中都有一組通用寄存器,它的主要用途是保存參加運算的操作數(shù)和運算的結(jié)果。寄存器是計算機中存取速度最快的存儲器件,寄存器的存取周期一般是十幾個納秒,遠遠快于內(nèi)存儲器的存取周期,如果ALU的兩個操作數(shù)都來自于寄存器,可以極大地提高運算速度。這也就是為什么近代計算機都有一組相當數(shù)目的通用寄存器的道理。4.5.2
通用寄存器組通用寄存器同時還可以兼作某些指令的專用寄存器。例如,IBMPC系列微型計算機中,其CPU有8個16位的通用寄存器,其結(jié)構(gòu)如圖4.9所示。這8個16位寄存器,除作通用寄存器使用外,有的還有各自專門的用途,如BX寄存器,在作變址運算時,又可作為基地址寄存器使用;CX寄存器又作為計數(shù)器使用。例如MOVS指令,它就是把存儲器的某一段中的內(nèi)容傳送到存儲器的另一段中去,源地址指針由SI寄存器指出,目的地址指針由DI寄存器指出,傳送的字節(jié)數(shù)由CX寄存器指出。圖4.9
IBM
PC系列微型計算機的通用寄存器組在運算器中,都有一個記錄運算結(jié)果狀態(tài)的狀態(tài)寄存器(有的稱標志寄存器或狀態(tài)標志寄存器、條件碼寄存器),一般設置下面幾種標志狀態(tài)位:Z(零標志位)。當運算結(jié)果為零時,Z位置1;結(jié)果非零時,Z位清0。N(符號標志位)。當運算結(jié)果為負時,N位置1;結(jié)果為正時,N位清0。V(溢出標志位)。當運算結(jié)果有溢出發(fā)生時,V位置1;無溢出時,V位清0。4.5.3
狀態(tài)寄存器C(進位或借位標志位)。當作加法時,如果運算中最高有效位向前有進位,C位置1;否則C位清0。當作減法運算時,如果不夠減,最高位向前有借位時,C位置1;否則C位清0。有的機器還有其他一些標志位,視不同的機器不同功能而有不同的規(guī)定。在程序設計中,狀態(tài)標志位通常作為轉(zhuǎn)移指令的判斷條件。一臺計算機的各個功能部件要互相連接,信號要能夠順利傳送,被傳送的信號包括數(shù)據(jù)和控制信號兩大類。圖4.6所示的CPU的各功能部件之間的連接方法是原理性的,僅簡單地表示了數(shù)據(jù)信號的發(fā)送與接收的關系,而且省略了控制信號,實際上,控制器部件中的由操作命令產(chǎn)生部件產(chǎn)生的所有命令都必須連接到被操作部件。我們通常把從一個功能部件向另一個功能部件傳送數(shù)據(jù)所經(jīng)過的功能部件、總線等稱為數(shù)據(jù)通路。數(shù)據(jù)通路是個很重要的概念,正確理解數(shù)據(jù)通路,能幫助我們理解指令執(zhí)行過程,也就是計算機總體運行過程。4.5.4
數(shù)據(jù)通路下面以圖4.6所示的右半部分運算器為例,解釋其數(shù)據(jù)通路,進而說明運算器的工作過程。圖中,MUX1.MUX2分別是兩個多路數(shù)據(jù)選擇器,用它們來選擇當前哪兩組數(shù)據(jù)送到ALU中。MUX1數(shù)據(jù)有三個來源:通用寄存器的輸出、指令中的相對位移量和常數(shù)“0”;MUX2數(shù)據(jù)也有三個來源:通用寄存器的輸出、程序計數(shù)器的輸出和數(shù)據(jù)寄存器的輸出。ALU的輸出信息通過內(nèi)部數(shù)據(jù)總線送到通用寄存器中。假設這個通用寄存器組有兩個輸出端口RA和RB,有一個輸入端口RI。寄存器中的數(shù)據(jù)以補碼表示。并假設寄存器組中的寄存器1用R1表示,寄存器2用R2表示,寄存器3用R3表示。運算之前,R1=0110,R2=1100,Z、N、C.V標志位全為0。進行下面的操作后,標志位Z、N、C.V和R3的值如何?(1) 第一種操作:R1加R2,結(jié)果送R3。其操作過程如下:R1的內(nèi)容通過端口RA輸出,MUX1選擇RA的內(nèi)容送到ALU的A輸入端;R2的內(nèi)容通過端口RB輸出,MUX2選擇RB的內(nèi)容送入ALU的B輸入端。令ALU作A+B算術(shù)加法操作,從Y輸出端輸出加的結(jié)果,并存入R3寄存器中。運算結(jié)果R3=0010,標志位C由0變?yōu)?,其他標志位不變。(2) 第二種操作:0減R1,結(jié)果送R3,即求與R1相補的數(shù)。其操作過程如下:R1的內(nèi)容從RB輸出,經(jīng)過MUX2選擇,送到ALU的B輸入端,在MUX1處選擇常數(shù)“0”送入ALU的A輸入端,在ALU中選擇A-B的算術(shù)運算功能。由于運算器要進行的是補碼運算,A-B功能是通過[A]補+[-B]補來完成的。結(jié)果1010從ALU的Y輸出送入R3。由于結(jié)果為負,N標志位由0變1,其他標志位不變。(3)第三種操作:利用運算器計算操作數(shù)地址或轉(zhuǎn)移地址。假設當前執(zhí)行轉(zhuǎn)移指令,轉(zhuǎn)移地址由程序計數(shù)器的值加上相對位移量得出。運算器計算轉(zhuǎn)移地址的過程是:MUX2選擇程序計數(shù)器PC的內(nèi)容送往ALU的B輸入端,MUX1選擇指令字中的相對位移量到ALU的A輸入端,令ALU做A+B算術(shù)加運算,從Y輸出的內(nèi)容送往程序計數(shù)器PC中,這時PC中就為轉(zhuǎn)移地址了。下次執(zhí)行指令就從轉(zhuǎn)移地址開始執(zhí)行。(4) 第四種操作:關于移位操作。①算術(shù)右移所有的位向右移一位,最低位被移出,最高位保持不變。移位后的結(jié)果是原數(shù)的1/2。如果右移n位,則移位后的結(jié)果是原數(shù)的(1/2)n。②算術(shù)左移所有的位向左移一位,最高位被移出,最低位由0填充。移位后的結(jié)果(如果沒有溢出發(fā)生)是原數(shù)的2倍。如果左移n位,又沒有溢出發(fā)生,則移位后的結(jié)果是原數(shù)的2n倍;若有溢出發(fā)生,則移位后的結(jié)果數(shù)據(jù)不定。③邏輯右移所有的位順序向右移一位,最低位被移出,最高位由0填充。結(jié)果與算術(shù)右移不同。④邏輯左移所有的位順序向左移一位,最高位被移出,最低位由0填充。邏輯移位沒有溢出問題。⑤循環(huán)右移所有的位順序向右移一位,最高位由最低位循環(huán)移入。⑥循環(huán)左移所有的位順序向左移一位,最低位由最高位循環(huán)移入。循環(huán)移位是頭尾相連接的移位,有的機器還有帶狀態(tài)標志位的循環(huán)移位,如帶進位位的循環(huán)右移和循環(huán)左移的示意圖如下?!纠?.30】把R2的內(nèi)容1100算術(shù)右移一位后放入R3中。操作過程是:R2的內(nèi)容從RA輸出,通過MUX1進入ALU的A輸入端,ALU選擇向右移一位的操作,ALU的輸出端Y就是R2右移1位后的內(nèi)容,為1110。因為R2原來的數(shù)是負數(shù),右移后應保持符號位不變。最后把1110送入R3中。運算器包括算術(shù)邏輯部件ALU、通用寄存器組、累加器、狀態(tài)寄存器、多路開關、數(shù)據(jù)總線等。運算器的設計主要圍繞ALU和寄存器同數(shù)據(jù)總線之間如何傳送操作數(shù)和運算結(jié)果而進行的。在決定方案時,需要考慮數(shù)據(jù)傳送的方便性和操作速度。在微型機中還要考慮總線在硅片上的制作工藝?,F(xiàn)代計算機的運算器大體上有三種結(jié)構(gòu)形式。簡述如下。4.5.5
運算器的基本結(jié)構(gòu)1.單總線結(jié)構(gòu)的運算器運算器所有部件都接到同一條總線上的運算器結(jié)構(gòu)是單總線結(jié)構(gòu)的運算器,如圖4.10所示。這種結(jié)構(gòu)的運算器,數(shù)據(jù)可以在任何兩個寄存器之間,或者在任一個寄存器和ALU之間傳送。在同一時間內(nèi),只能有一個操作數(shù)放在總線上。為了把兩個操作數(shù)輸入到ALU,需要分兩次傳送,而且還需要兩個數(shù)據(jù)緩沖寄存器A.B。圖4.10單總線結(jié)構(gòu)的運算器例如要執(zhí)行一次加法操作,需要先把第一個操作數(shù)放入A緩沖器,然后再把第二個操作數(shù)放入B緩沖器,只有當這兩個操作數(shù)同時出現(xiàn)在ALU的兩個輸入端,ALU才能執(zhí)行加法操作。當加法結(jié)果出現(xiàn)在單總線上時,由于輸入數(shù)已保存在緩沖寄存器中,它并不會對輸入數(shù)據(jù)產(chǎn)生影響。當再來一個傳送命令后,單總線上的加法結(jié)果便送到目的寄存器中。由此可見,這種結(jié)構(gòu)的運算器主要缺點是操作速度較慢。雖然在這種結(jié)構(gòu)中輸入數(shù)據(jù)和操作結(jié)果需要三次串行的選通操作,但它并不會對每種指令都增加很多執(zhí)行時間。例如,有一個輸入數(shù)是從存儲器來的,且運算結(jié)果又送回存儲器,那么限制數(shù)據(jù)傳送速度的主要因素是存儲器的訪問時間。只有在對全都是CPU寄存器中的兩個操作數(shù)進行操作時,單總線結(jié)構(gòu)的運算器才會造成一定的時間損失。但是由于它只控制一條總線,故控制電路比較簡單。2.雙總線結(jié)構(gòu)的運算器雙總線結(jié)構(gòu)的運算器如圖4.11所示。在這種結(jié)構(gòu)中,兩個操作數(shù)同時加到ALU進行運算,只需要一次操作控制,而且馬上可以得到運算結(jié)果。從圖中可以看出,兩條總線各自把其數(shù)據(jù)送到ALU的輸入端。特殊寄存器分成兩組,它們分別與一條總線交換數(shù)據(jù),這樣,通用寄存器中的數(shù)就可以進入到任一組特殊寄存器中去,從而使數(shù)據(jù)傳送更靈活。ALU的輸出不能直接加到總線上,必須在ALU的輸出端設置一個緩沖寄存器。整個操作分兩步完成:第一步,在ALU的兩個輸入端輸入操作數(shù),形成結(jié)果并送入緩沖寄存器;第二步,把結(jié)果送入目的寄存器。圖4.11雙總線結(jié)構(gòu)的運算器3.三總線結(jié)構(gòu)的運算器三總線結(jié)構(gòu)的運算器如圖4.12所示。在三總線結(jié)構(gòu)運算器中,ALU的兩個輸入端分別由兩條總線供給,而ALU的輸出則與第三條總線相連。這樣,算術(shù)邏輯操作就可以在一步的控制之內(nèi)完成。由于ALU本身有時間延遲,所以,打入輸出結(jié)果的選通脈沖必須考慮到包括這個延遲。另外設置了一個總線旁路器。如果一個操作數(shù)不需要修改,而直接從總線2傳送到總線3,那么可以通過控制總線旁路器把數(shù)據(jù)傳出;如果一個操作數(shù)傳送時需要修改,那么就借助于ALU。很顯然,三總線結(jié)構(gòu)的運算器的特點是操作時間快。圖4.12三總線結(jié)構(gòu)的運算器1.最簡單的運算器圖4.13示出了一個最簡單的運算器的組成結(jié)構(gòu)圖。這個運算器只有三個邏輯部件:算術(shù)邏輯運算單元ALU、累加寄存器AC和數(shù)據(jù)緩沖寄存器DR。4.5.6
運算器組成實例圖4.13最簡單的運算器運算器和存儲器之間通過一條雙向數(shù)據(jù)總線進行聯(lián)系。我們舉一個兩個數(shù)相加的例子來說明。兩個數(shù)相加進行加法操作,首先從存儲器中取出第一個數(shù),經(jīng)數(shù)據(jù)緩沖器DR送至累加器AC;然后再從存儲器取出第二個數(shù),放在數(shù)據(jù)緩沖器中。兩個數(shù)同時送算術(shù)邏輯運算單元ALU進行相加,相加后的結(jié)果又送回到累加寄存器AC中。此時,AC中的原先放入的第一個數(shù)隨即被沖掉。如果要把求和結(jié)果存入存儲器,那么數(shù)據(jù)就由AC送至緩沖寄存器DR,再由DR發(fā)送至雙向數(shù)據(jù)總線,然后寫入存儲器。2.一臺小型機的運算器圖4.14示出了一臺小型機的運算器邏輯框圖。該運算器的基本功能包括:兩數(shù)的加減運算,一個數(shù)的加1運算,兩數(shù)的邏輯加運算,一個數(shù)的變補、變反傳送以及數(shù)碼的左移、右移、直送和字節(jié)交換等操作。圖4.14某小型機的運算器框圖該運算器由以下幾部分組成:算術(shù)邏輯運算單元ALU由4片74181ALU芯片和1片74182CLA(CarryLookaheadAdder,先行進位加法器)芯片組成16位字長的運算部件,因而具有兩級先行進位。鎖存器在ALU的兩個輸入端上有兩個鎖存器A和B,用來暫存來自外部設備或存儲器(經(jīng)數(shù)據(jù)總線)的數(shù)據(jù),或者暫存來自通用寄存器(R0~R7)和源寄存器、暫存寄存器中的數(shù)據(jù)。一旦數(shù)據(jù)放入鎖存器,不管其外部的數(shù)據(jù)如何變化,ALU將依據(jù)鎖存器A和B中的數(shù)據(jù)進行運算。(3)移位寄存器將ALU的輸出進行左移、右移、直送、半字交換。因此這里的移位寄存器也是一個4選1的多路開關,每次只能從4路輸入中選擇1路進行輸出。(4) 寄存器組寄存器組包括8個可由程序編址的通用寄存器(R0~R7)和兩個程序不能訪問的工作寄存器(源寄存器SR和暫存寄存器DR)。通用寄存器可作為累加器使用,它們的數(shù)據(jù)經(jīng)鎖存器A和B進入ALU,再經(jīng)移位寄存器輸出可以送至通用寄存器;也可以經(jīng)三態(tài)發(fā)送門送至數(shù)據(jù)總線,再由數(shù)據(jù)總線送至存儲器或外部設備,從而實現(xiàn)數(shù)據(jù)的輸出操作。反之,來自外部設備或存儲器的數(shù)據(jù),經(jīng)過總線接收門送至鎖存器,再經(jīng)ALU和移位器,送到通用寄存器,從而實現(xiàn)數(shù)據(jù)的輸入操作。由于有雙操作數(shù)指令,即一條指令中同時有源操作數(shù)和終點操作數(shù),因此在執(zhí)行指令時,必須兩次計算操作數(shù)地址和兩次從存儲器取操作數(shù)。源操作數(shù)從內(nèi)存經(jīng)數(shù)據(jù)總線取出來后,不能放到鎖存器A或B中,因為可能馬上要使用數(shù)據(jù)通路(包括鎖存器A和B)進行第二個操作數(shù)地址的尋址計算,故必須設置一個程序上看不見的“源寄存器”以暫存源操作數(shù)。只有終點操作數(shù)取出來后,才能從源寄存器中讀出源操作數(shù),送至鎖存器和ALU進行運算。暫存寄存器用來暫存ALU計算出來的計算結(jié)果數(shù)據(jù),以等待數(shù)據(jù)總線傳送出去。計算結(jié)果出來后,CPU就申請總線的控制權(quán),當取得總線控制權(quán)后,才能把暫存寄存器中的數(shù)據(jù)經(jīng)數(shù)據(jù)通路和發(fā)送門,發(fā)送至數(shù)據(jù)總線上。應注意,在某一時刻,寄存器組的10個寄存器中只有一個寄存器可與數(shù)據(jù)通路發(fā)生聯(lián)系。至于是哪個寄存器被連接到數(shù)據(jù)通路,則由控制器發(fā)出的寄存器地址加以確定。(5)狀態(tài)寄存器運算器中設有一個狀態(tài)寄存器,運算過程中產(chǎn)生的“進位”、“溢出”、“零”、“負”等狀態(tài)標志可以保存在這個寄存器中,以供程序判斷之用。狀態(tài)寄存器的狀態(tài)數(shù)據(jù)也可經(jīng)由數(shù)據(jù)總線送到存儲器加以保存。典型的浮點運算器有Intel公司在1980年研制出的8087,1983年推出的80287,1987年推出的80387等。由于這些浮點運算器必須和主處理器配對使用,故常常稱它們?yōu)閰f(xié)處理器。8087是與微處理器8086/8088配對使用的協(xié)處理器,80287是與微處理器80286/80386配對使用的協(xié)處理器,80387則是與微處理器80386配對使用的協(xié)處理器。本節(jié)主要介紹功能較強的80387協(xié)處理器。4.6
浮點運算器80387是在80287的基礎上擴展了三角函數(shù)的功能而制成的高性能的協(xié)處理器。它的主要特性如下:具有高性能的80位的體系結(jié)構(gòu)。時鐘頻率較高,一般工作頻率為16MHz,改進后可達20MHz??蓤?zhí)行IEEE754標準的浮點運算。能處理7種數(shù)據(jù)類型,這7種數(shù)據(jù)類型如表4.5(見書124頁)所示。4.6.1
80387的主要性能(5) 可在386/486微機系統(tǒng)的兩種模式下工作。①實模式。是把80386微處理器當作高速的8086來使用,即使用24位地址中的低20位,可用的存儲空間是1MB。②保護模式??墒褂?6MB的主存空間,支持虛擬存儲器的管理與運行,充分發(fā)揮80386的效能。(6)擴展了80386/80486的硬件指令。80387的主要指令包括數(shù)據(jù)傳送類指令的取數(shù)、存數(shù)、交換指令,算術(shù)運算類指令的加、減、乘、除、反減、反除、換算、求余、取整、變符號、取絕對值、開平方、分解實數(shù)等指令,比較類指令的比較、檢測、測試指令,超越函數(shù)(正切、反正切、2x-1、Y·log2(X+1)、Y·log2(X)),常數(shù)(0、1、π、lg2.log210、log2e),處理器控制類指令的取控制字、存控制字、存狀態(tài)字、取環(huán)境、存環(huán)境、保護、恢復、允許中斷、禁止中斷、消除事故、初始化等指令,以及三角函數(shù)指令等。(7) 能檢測出數(shù)據(jù)運算的6種錯誤:非法處理、非法操作數(shù)、零作除數(shù)、上溢、下溢和精度下降。80387的內(nèi)部結(jié)構(gòu)與80287、8087基本相同,都含有8個80位的寄存器堆棧、3個16位的寄存器(用作控制字寄存器、狀態(tài)字寄存器和特征字寄存器)和2個32位寄存器(用作指令指針和數(shù)據(jù)指針)。分別簡述于下。1.寄存器堆棧寄存器堆棧中有8個80位的寄存器,這8個寄存器是一個整體,頭尾相接,組成一個能容納8個臨時浮點數(shù)的先進后出的堆棧。4.6.2
80387的內(nèi)部結(jié)構(gòu)8個寄存器的編號為0~7,處于棧頂?shù)募拇嫫鞣Q為棧頂寄存器,其編號由狀態(tài)寄存器的TOP字段給出。在協(xié)處理器的指令中,用ST表示棧頂寄存器,而用ST(i)訪問相對于棧頂寄存器的偏移量為i的寄存器。應注意i是相對于棧頂?shù)钠屏?,而不?個寄存器中的實際編號。例如,當棧頂為0號寄存器時,寄存器正好用ST(1)~ST(7)表示;而當棧頂為5號寄存器時,則ST(1)~ST(7)分別表示寄存器6.7、0、1、2、3、4,如圖4.15所示。圖4.15寄存器棧頂?shù)谋硎痉椒?.特征字寄存器特征字寄存器是個16位的寄存器,每兩位表示寄存器棧的一個寄存器狀態(tài)。共有8個特征字段,每個字段占2位,可有4種取值。00——表示相應寄存器中有正確的數(shù)據(jù)。01——表示相應寄存器中的值為0。10——表示相應寄存器中的數(shù)據(jù)非法或無限大。11——表示相應寄存器處于空狀態(tài)。特征字寄存器的內(nèi)容允許用戶讀寫。3.控制字寄存器控制字寄存器也是個16位的寄存器,用于控制協(xié)處理器的內(nèi)部操作。各位的含義是:IM——該位為1,屏蔽非法處理中斷。DM——該位為1,屏蔽非法操作數(shù)中斷。ZM——該位為1,屏蔽0作除數(shù)中斷。OM——該位為1,屏蔽上溢中斷。UM——該位為1,屏蔽下溢中斷。PM——該位為1,屏蔽精度下降中斷。PC——2位,用于表示寄存器棧運算結(jié)果的精度,該2位的取值00表示24位尾數(shù);01未用;10表示53位尾數(shù);11表示64位尾數(shù)。RC——2位,用于浮點數(shù)轉(zhuǎn)換為整數(shù)時的舍入控制,該2位的取值00表示轉(zhuǎn)換為最接近的值,若無奇偶限制,則轉(zhuǎn)換為偶數(shù);01舍掉小數(shù)部分;10表示小數(shù)部分按整數(shù)1處理;11表示靠近0值方向舍入。IC——1位,用于對無限大的數(shù)值的處理,該位為0時,把+∞和-∞作同值處理;該位為1時,把+∞和-∞作不同值處理。4.狀態(tài)字寄存器狀態(tài)字寄存器也是個16位的寄存器,用于表示協(xié)處理器的處理情況。各位的含義是:IE——該位為1,表示非法處理。DE——該位為1,表示非法操作數(shù)。ZE——該位為1,表示0作除數(shù)。OE——該位為1,表示發(fā)生了上溢。UE——該位為1,表示發(fā)生了下溢。PE——該位為1,表示精度下降。以上6位統(tǒng)稱為異常中斷允許標志位,當某位為1,且控制字的對應位又為0時,協(xié)處理器將產(chǎn)生相應的中斷信號。ES——用來反映上述6種異常中斷允許標志位的情況。該位為1,表示發(fā)生了某種異常中斷;為0,表示未發(fā)生異常中斷。C3C2C1C0——該4位用來保存數(shù)據(jù)比較等指令的結(jié)果,用于條件轉(zhuǎn)移。TOP——3位,用來表示寄存器棧頂?shù)募拇嫫骶幪枴——為忙標志位,該位為1時,表示協(xié)處理器正在執(zhí)行一條指令;為0時,表示其空閑。1.80387的硬件特性80387的硬件特性可歸納為如下幾點:80387采用1.5μm的高速CHMOS工藝制作,有68個引腳,采用PGA封裝,速度快,功耗低。具有84位寬度的內(nèi)部數(shù)據(jù)通路
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 水泥基礎施工方案
- 橋梁排水施工方案
- 管道拆除施工方案
- 1994年赴美考察散記
- 2025年村委會林地承包與木材加工銷售合同
- 二零二五年度實習生實習期間實習成果轉(zhuǎn)化與應用協(xié)議
- 二零二五年度測繪成果應用安全保護協(xié)議
- 二零二五年度風投優(yōu)先股投資合作中的知識產(chǎn)權(quán)保護合同
- 二零二五年度股權(quán)投資顧問服務創(chuàng)新條款
- 2025股東股權(quán)協(xié)議:新能源汽車動力電池研發(fā)與生產(chǎn)
- 勘察工作內(nèi)容及方案
- 螺旋箍筋長度計算公式excel(自動版)
- 八年級數(shù)學(上冊)整式計算題練習100道無答案_新人教版
- 國際標準ISO13920
- OOS、OOT調(diào)查SOP參考模板
- 托管中心學生家長接送登記表
- 橋梁施工危險源辨識與防控措施
- YD 5062-1998 通信電纜配線管道圖集_(高清版)
- CFG樁施工記錄表范本
- 在生產(chǎn)過程中物料流轉(zhuǎn)交接管理規(guī)定(清風出品)
- 第1章操作系統(tǒng)引論
評論
0/150
提交評論