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