計(jì)算機(jī)組成原理 (3)_第1頁
計(jì)算機(jī)組成原理 (3)_第2頁
計(jì)算機(jī)組成原理 (3)_第3頁
計(jì)算機(jī)組成原理 (3)_第4頁
計(jì)算機(jī)組成原理 (3)_第5頁
已閱讀5頁,還剩127頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1第三章第三章 運(yùn)算方法與運(yùn)算器運(yùn)算方法與運(yùn)算器31運(yùn)算器的設(shè)計(jì)方法運(yùn)算器的設(shè)計(jì)方法 運(yùn)算器的邏輯組織結(jié)構(gòu)設(shè)計(jì)通常運(yùn)算器的邏輯組織結(jié)構(gòu)設(shè)計(jì)通??梢苑譃橐韵聦哟危嚎梢苑譃橐韵聦哟危?(1)根據(jù)機(jī)器的字長,將根據(jù)機(jī)器的字長,將N個(gè)一位個(gè)一位全加器通過加法進(jìn)位鏈連接構(gòu)成全加器通過加法進(jìn)位鏈連接構(gòu)成N位并行加法器。位并行加法器。 (2)利用多路選擇邏輯在加法器的利用多路選擇邏輯在加法器的輸入端實(shí)現(xiàn)多種輸入組合,將加法輸入端實(shí)現(xiàn)多種輸入組合,將加法器擴(kuò)展為多功能的算術(shù)邏輯運(yùn)算部器擴(kuò)展為多功能的算術(shù)邏輯運(yùn)算部件。件。 (3)根據(jù)乘除運(yùn)算的算法,將加法根據(jù)乘除運(yùn)算的算法,將加法器與移位器組合,構(gòu)成定點(diǎn)乘法器

2、器與移位器組合,構(gòu)成定點(diǎn)乘法器與除法器。將計(jì)算定點(diǎn)整數(shù)的階碼與除法器。將計(jì)算定點(diǎn)整數(shù)的階碼運(yùn)算器和計(jì)算定點(diǎn)小數(shù)的尾數(shù)運(yùn)算運(yùn)算器和計(jì)算定點(diǎn)小數(shù)的尾數(shù)運(yùn)算器組合構(gòu)成浮點(diǎn)運(yùn)算器。器組合構(gòu)成浮點(diǎn)運(yùn)算器。 (4)在算術(shù)邏輯運(yùn)算部件的基在算術(shù)邏輯運(yùn)算部件的基礎(chǔ)上,配合各類相關(guān)的寄存器礎(chǔ)上,配合各類相關(guān)的寄存器,構(gòu)成計(jì)算,構(gòu)成計(jì)算機(jī)中的運(yùn)算器。機(jī)中的運(yùn)算器。 23.2 定點(diǎn)補(bǔ)碼加減運(yùn)算定點(diǎn)補(bǔ)碼加減運(yùn)算 3.2.1 補(bǔ)碼加減運(yùn)算的基礎(chǔ)補(bǔ)碼加減運(yùn)算的基礎(chǔ) 1補(bǔ)碼加法補(bǔ)碼加法 補(bǔ)碼加法所依據(jù)的基本關(guān)系是:補(bǔ)碼加法所依據(jù)的基本關(guān)系是: x+y補(bǔ)補(bǔ)=x補(bǔ)補(bǔ)+y補(bǔ)補(bǔ) (mod M) (3- -1) x- -y補(bǔ)補(bǔ)=x補(bǔ)

3、補(bǔ)+- -y補(bǔ)補(bǔ) 現(xiàn)現(xiàn)以定點(diǎn)小數(shù)為例,以定點(diǎn)小數(shù)為例,證明證明x+y補(bǔ)補(bǔ)=x補(bǔ)補(bǔ)+y補(bǔ)補(bǔ) 設(shè)設(shè)x0 ,y0則則 (x+y)0根據(jù)補(bǔ)碼定義有根據(jù)補(bǔ)碼定義有 x補(bǔ)補(bǔ)=x, y補(bǔ)補(bǔ)=y故有故有x補(bǔ)補(bǔ)+y補(bǔ)補(bǔ)=x+y= x+y補(bǔ)補(bǔ) 設(shè)設(shè)x0,y0則則 (x+y)0,y0根據(jù)補(bǔ)碼定義有根據(jù)補(bǔ)碼定義有 x補(bǔ)補(bǔ)=x, y補(bǔ)補(bǔ)=M+y故有故有x補(bǔ)補(bǔ)+y補(bǔ)補(bǔ)=M+(x+y) (MOD M) = x+y補(bǔ)補(bǔ) 補(bǔ)碼減法補(bǔ)碼減法 x- -y補(bǔ)補(bǔ)= x+(- -y)補(bǔ)補(bǔ)= x補(bǔ)補(bǔ)- -y補(bǔ)補(bǔ) (3-2) 證明:證明: x補(bǔ)補(bǔ)+y補(bǔ)補(bǔ)=x+y補(bǔ)補(bǔ) y補(bǔ)補(bǔ)=x+y補(bǔ)補(bǔ)- -x樸樸 又又x- -y補(bǔ)補(bǔ)=x+(- -y)補(bǔ)補(bǔ)=

4、x補(bǔ)補(bǔ)+- -y補(bǔ)補(bǔ) - -y補(bǔ)補(bǔ)=x- -y補(bǔ)補(bǔ)- -x補(bǔ)補(bǔ) 因此因此 y補(bǔ)補(bǔ)+- -y補(bǔ)補(bǔ)=(x+y補(bǔ)補(bǔ)- -x補(bǔ)補(bǔ))+(x- -y補(bǔ)補(bǔ)- -x補(bǔ)補(bǔ)) =x+y補(bǔ)補(bǔ)+x- -y補(bǔ)補(bǔ)- -x補(bǔ)補(bǔ)- -x補(bǔ)補(bǔ) =x+y+x- -y補(bǔ)補(bǔ)- -x補(bǔ)補(bǔ)- -x補(bǔ)補(bǔ) =x 補(bǔ)補(bǔ)+x 補(bǔ)補(bǔ)- - x 補(bǔ)補(bǔ)-x 補(bǔ)補(bǔ)=0=0 由此證明了由此證明了- -y補(bǔ)補(bǔ)=- -y補(bǔ)補(bǔ),即證明了式,即證明了式(3-2)成立。成立。 根據(jù)第二章由根據(jù)第二章由y補(bǔ)補(bǔ)求求- -y補(bǔ)補(bǔ)的規(guī)則:的規(guī)則:連符號位一起各位取反,末位連符號位一起各位取反,末位加加1。 - -y補(bǔ)補(bǔ)稱為稱為y補(bǔ)補(bǔ)的的機(jī)器負(fù)數(shù)機(jī)器負(fù)數(shù)。 4 補(bǔ)碼加減法運(yùn)

5、算規(guī)則補(bǔ)碼加減法運(yùn)算規(guī)則 參加者運(yùn)算的兩操作數(shù)均用補(bǔ)碼表示。參加者運(yùn)算的兩操作數(shù)均用補(bǔ)碼表示。 按二進(jìn)制數(shù)按二進(jìn)制數(shù)“逢二進(jìn)逢二進(jìn)- -”的運(yùn)算規(guī)則進(jìn)行運(yùn)算。的運(yùn)算規(guī)則進(jìn)行運(yùn)算。 符號位作為數(shù)的一部分參加運(yùn)算,符號位作為數(shù)的一部分參加運(yùn)算,結(jié)果的符號位由運(yùn)算得出。結(jié)果的符號位由運(yùn)算得出。 若做加法,則兩數(shù)直接相加;若做減法,則被減數(shù)與減數(shù)的若做加法,則兩數(shù)直接相加;若做減法,則被減數(shù)與減數(shù)的機(jī)機(jī)器負(fù)數(shù)器負(fù)數(shù)相加。運(yùn)算結(jié)果仍是補(bǔ)碼表示。相加。運(yùn)算結(jié)果仍是補(bǔ)碼表示。 (5)補(bǔ)碼總是對確定的模而言,如果運(yùn)算結(jié)果超過了模補(bǔ)碼總是對確定的模而言,如果運(yùn)算結(jié)果超過了模(即符號位即符號位運(yùn)算產(chǎn)生了進(jìn)位運(yùn)算產(chǎn)

6、生了進(jìn)位),則將模自動(dòng)丟掉。則將模自動(dòng)丟掉。 例例3.1 x =+0.1001,y=+0.0101,求,求xy=? 解:解: x補(bǔ)補(bǔ)=0.1001, y補(bǔ)補(bǔ)=0.0101,-y補(bǔ)補(bǔ)= 1.1011 x+y補(bǔ)補(bǔ)=x補(bǔ)補(bǔ)+y補(bǔ)補(bǔ)=0.1001+0.0101 x- -y補(bǔ)補(bǔ)=x補(bǔ)補(bǔ)+- -y補(bǔ)補(bǔ)=0.1001+1.1011 x補(bǔ)補(bǔ) 0.1001+ +y補(bǔ)補(bǔ) 0.0101 0.1110 x補(bǔ)補(bǔ) 0.1001+ +- -y補(bǔ)補(bǔ) 1.101110.0100 x+y補(bǔ)補(bǔ)=0.1110 x- -y補(bǔ)補(bǔ)=0.01005 例例3.2 x =- -0.0110,y=- -0.0011,求,求xy=? 解:解: x補(bǔ)

7、補(bǔ)=1.1010, y補(bǔ)補(bǔ)=1.1101,- -y補(bǔ)補(bǔ)=0.0011 x+y補(bǔ)補(bǔ)=x補(bǔ)補(bǔ)+y補(bǔ)補(bǔ)=1.1010+1.1101 x- -y補(bǔ)補(bǔ)=x補(bǔ)補(bǔ)+- -y補(bǔ)補(bǔ)=1.1010+0.0011 x補(bǔ)補(bǔ) 1.1010+ +y補(bǔ)補(bǔ) 1.1101 11.0111 x補(bǔ)補(bǔ) 1.1010+ +- -y補(bǔ)補(bǔ) 0.0011 1.1101 x+y補(bǔ)補(bǔ)=1.0111 x- -y補(bǔ)補(bǔ)=1.1101 例例3.3 x =- -0.1000,y=+ +0.0110,求,求xy=? 解:解: x補(bǔ)補(bǔ)=1.1000, y補(bǔ)補(bǔ)=0.0110 ,- -y補(bǔ)補(bǔ)=1.1010 x+y補(bǔ)補(bǔ)=x補(bǔ)補(bǔ)+y補(bǔ)補(bǔ)=1.1000+0.0110

8、x- -y補(bǔ)補(bǔ)=x補(bǔ)補(bǔ)+- -y補(bǔ)補(bǔ)=1.1000+1.1010 x補(bǔ)補(bǔ) 1.1000+ +y補(bǔ)補(bǔ) 0.0110 1.1110 x補(bǔ)補(bǔ) 1.1000+ +- -y補(bǔ)補(bǔ) 1.101011.0010 x+y補(bǔ)補(bǔ)=1.1110 x- -y補(bǔ)補(bǔ)=1.00106 例例3.4 x =+ +0.1010,y=+ +0.1001,求,求x+y=? 解:解: x補(bǔ)補(bǔ)=0.1010, y補(bǔ)補(bǔ)= 0.1001, x+y補(bǔ)補(bǔ)=x補(bǔ)補(bǔ)+y補(bǔ)補(bǔ)=0.1010+0.1001 x補(bǔ)補(bǔ) 0.1010+ +y補(bǔ)補(bǔ) 0.1001 1.0011 兩個(gè)正數(shù)相加,得到的結(jié)果的符號卻為負(fù)兩個(gè)正數(shù)相加,得到的結(jié)果的符號卻為負(fù),顯然結(jié)果出錯(cuò),

9、顯然結(jié)果出錯(cuò)- -超出超出了計(jì)算機(jī)所能表示的最大正數(shù)了計(jì)算機(jī)所能表示的最大正數(shù)。 例例3.5 x =- -0.110l,y=- -0.1011,求,求x+y=? 解:解: x補(bǔ)補(bǔ)=1.0011, y補(bǔ)補(bǔ)=1.0101 x+y補(bǔ)補(bǔ)=x補(bǔ)補(bǔ)+y補(bǔ)補(bǔ)= 1.0011+1.0101 兩個(gè)負(fù)數(shù)相加,得到的結(jié)果的符號卻為正,顯然結(jié)果出錯(cuò)兩個(gè)負(fù)數(shù)相加,得到的結(jié)果的符號卻為正,顯然結(jié)果出錯(cuò)- -超出超出了計(jì)算機(jī)所能表示的最小負(fù)數(shù)了計(jì)算機(jī)所能表示的最小負(fù)數(shù)。 x補(bǔ)補(bǔ) 1.0011+ +y補(bǔ)補(bǔ) 1.010110.1000 73.2.2溢出判斷與變形補(bǔ)碼溢出判斷與變形補(bǔ)碼 設(shè)參加運(yùn)算的操作數(shù)為:設(shè)參加運(yùn)算的操作數(shù)為

10、:x補(bǔ)補(bǔ)=xf.x1x2 xn,y補(bǔ)補(bǔ)=yf.y1y2 yn x補(bǔ)補(bǔ)+ y補(bǔ)補(bǔ)的和為:的和為: s補(bǔ)補(bǔ)= sf.s1s2 sn 。 發(fā)生溢出時(shí)判別信號為:發(fā)生溢出時(shí)判別信號為:OVR=1。 常用的溢出判別方法有以下三種。常用的溢出判別方法有以下三種。 1根據(jù)兩個(gè)操作數(shù)的符號與結(jié)果的符號判別溢出根據(jù)兩個(gè)操作數(shù)的符號與結(jié)果的符號判別溢出 判斷的條件為:判斷的條件為: 2)-(3 )(OVRfffffffffsysxsyxsyxf 即如果即如果xf和和yf均與均與sf 不同,則產(chǎn)生溢出,不同,則產(chǎn)生溢出,OVR=1。 例例3.4中中xf=0,yf=0, sf=1,OVR=(xf sf)(yf sf)

11、= (01)(0 1)=l, 因此可以判定運(yùn)算結(jié)果產(chǎn)生了溢出。又因?yàn)椴僮鲾?shù)因此可以判定運(yùn)算結(jié)果產(chǎn)生了溢出。又因?yàn)椴僮鲾?shù)x、y均為正數(shù)均為正數(shù),所以產(chǎn)生的是,所以產(chǎn)生的是正溢正溢。8圖圖3- -1根據(jù)符號判別根據(jù)符號判別 溢出的電路溢出的電路 2. 根據(jù)兩數(shù)相加時(shí)產(chǎn)生的進(jìn)位判別溢出根據(jù)兩數(shù)相加時(shí)產(chǎn)生的進(jìn)位判別溢出 兩個(gè)補(bǔ)碼實(shí)現(xiàn)加減運(yùn)算時(shí),若最高數(shù)值位向符號位的進(jìn)位值兩個(gè)補(bǔ)碼實(shí)現(xiàn)加減運(yùn)算時(shí),若最高數(shù)值位向符號位的進(jìn)位值Cn- -1與符號位產(chǎn)生的進(jìn)位值與符號位產(chǎn)生的進(jìn)位值Cn不同時(shí),表明產(chǎn)生了溢出不同時(shí),表明產(chǎn)生了溢出OVE,即,即OVE=Cn- -1 Cn OVE=1時(shí),表明結(jié)果有溢出,時(shí),表明結(jié)

12、果有溢出, OVE=0時(shí),表明結(jié)果正常。時(shí),表明結(jié)果正常。 設(shè)有兩數(shù)運(yùn)算時(shí)產(chǎn)生的進(jìn)位位為設(shè)有兩數(shù)運(yùn)算時(shí)產(chǎn)生的進(jìn)位位為 Cn,Cn- -1Cn- -2C1。Cn為符號位產(chǎn)生的進(jìn)位,為符號位產(chǎn)生的進(jìn)位,Cn- -1為最高數(shù)值位產(chǎn)生的進(jìn)位,則為最高數(shù)值位產(chǎn)生的進(jìn)位,則9 x補(bǔ)補(bǔ) 0.1011 + y補(bǔ)補(bǔ) 0.0111 1.0010 x補(bǔ)補(bǔ) 1.0101 + y補(bǔ)補(bǔ) 1.1001 10.0010正溢正溢Cn-1Cn負(fù)溢負(fù)溢Cn-1Cn 左邊的例子中左邊的例子中Cn=0,Cn- -1=1,OVE=Cn- -1 Cn=0 1=1,故溢出。,故溢出。 3采用變形補(bǔ)碼進(jìn)行運(yùn)算采用變形補(bǔ)碼進(jìn)行運(yùn)算 采用兩個(gè)符號

13、位表示的補(bǔ)碼稱為采用兩個(gè)符號位表示的補(bǔ)碼稱為。 定點(diǎn)小數(shù)的變形補(bǔ)碼定義為:定點(diǎn)小數(shù)的變形補(bǔ)碼定義為: 5)-(3 4) (mod 01- 410 xxxxx補(bǔ)補(bǔ) 定點(diǎn)小數(shù)的變形補(bǔ)碼是以定點(diǎn)小數(shù)的變形補(bǔ)碼是以4 4為模的,所以也稱其為模為模的,所以也稱其為模4 4補(bǔ)碼。補(bǔ)碼。 定點(diǎn)整數(shù)的變形補(bǔ)碼定義為:定點(diǎn)整數(shù)的變形補(bǔ)碼定義為: 6)-(3 )2 (mod 02- 220 22 nnnnxxxxx補(bǔ)補(bǔ)10 例例3.6 已知已知x的真值,求的真值,求x對應(yīng)的變形補(bǔ)碼。對應(yīng)的變形補(bǔ)碼。 x=+0.1101 x=- -0.1011 x=+1101 x=- -1011 解:解: x=+0.11010 x

14、變形補(bǔ)變形補(bǔ)=00.1101 x=- -0.10110 x變形補(bǔ)變形補(bǔ)=4+(- -0.1011)=11.0101 x=+11010 x變形補(bǔ)變形補(bǔ)=00 1101 x=- -10110 x變形補(bǔ)變形補(bǔ)=24+2+(- -1011)=11 0101 例例3.7利用變形補(bǔ)碼求利用變形補(bǔ)碼求x +y。 x=+0.1001,y=+0.0101 x=- -0.0110,y=- -0.0011 x=+0.1010,y=+0.1001 x=- -0.1101, y =- -0.1011 解:解: x補(bǔ)補(bǔ) 00.1001 + y補(bǔ)補(bǔ) 00.0101 00.1110 x補(bǔ)補(bǔ) 11.1010 + y補(bǔ)補(bǔ) 11.

15、1101 111.0111 x+y變形補(bǔ)變形補(bǔ)= x變形補(bǔ)變形補(bǔ)+y變形補(bǔ)變形補(bǔ)=00.1001+00.0101=00.1110 x+y變形補(bǔ)變形補(bǔ)= x變形補(bǔ)變形補(bǔ)+y變形補(bǔ)變形補(bǔ)=00.1010+00.1101=11.011111 x+y變形補(bǔ)變形補(bǔ)= x變形補(bǔ)變形補(bǔ)+y變形補(bǔ)變形補(bǔ)=00.1010+00.1001=01.0011 x+y變形補(bǔ)變形補(bǔ)= x變形補(bǔ)變形補(bǔ)+y變形補(bǔ)變形補(bǔ)=00.0011+00.0101=10.1000 當(dāng)雙符號當(dāng)雙符號 sf1sf2=00或或sf1sf2=11 結(jié)果正確。結(jié)果正確。 sf1sf2=01 正溢正溢, sf1sf2=10 負(fù)溢負(fù)溢。 一般說來,兩個(gè)

16、同號數(shù)據(jù)相加,或兩個(gè)異號數(shù)據(jù)相減要注意溢出。一般說來,兩個(gè)同號數(shù)據(jù)相加,或兩個(gè)異號數(shù)據(jù)相減要注意溢出。式式3.17給出了補(bǔ)碼加減法的判定溢出條件給出了補(bǔ)碼加減法的判定溢出條件:OVE=sf1 sf2 x補(bǔ)補(bǔ) 00.1010 + y補(bǔ)補(bǔ) 00.1001 01.0011 正溢正溢 x補(bǔ)補(bǔ) 11.0011 + y補(bǔ)補(bǔ) 11.0101 1 10.1000 負(fù)溢負(fù)溢123.2.3算術(shù)邏輯運(yùn)算部件算術(shù)邏輯運(yùn)算部件 是進(jìn)行算術(shù)邏輯運(yùn)算,其是進(jìn)行算術(shù)邏輯運(yùn)算,其。 半加器半加器 不考慮低位進(jìn)位影響的兩個(gè)一位二進(jìn)制數(shù)的相加。稱為半加。實(shí)不考慮低位進(jìn)位影響的兩個(gè)一位二進(jìn)制數(shù)的相加。稱為半加。實(shí)現(xiàn)半加操作的電路稱為

17、現(xiàn)半加操作的電路稱為半加器半加器。 下表給出了兩下表給出了兩 個(gè)一位二進(jìn)制數(shù)的個(gè)一位二進(jìn)制數(shù)的xi、yi相加的真值表。表中相加的真值表。表中Hi是半是半加,加,Ci是向高位的進(jìn)位。是向高位的進(jìn)位。半加器運(yùn)算真表半加器運(yùn)算真表xiyiHiCi0000011010101101iiiiiiiiiiyxCyxyxyxH 半加器的邏輯圖和符號如下圖所示。半加器的邏輯圖和符號如下圖所示。13 全加器全加器 在多位二進(jìn)制數(shù)相加時(shí)要考慮位與位之間進(jìn)位的影響。在多位二進(jìn)制數(shù)相加時(shí)要考慮位與位之間進(jìn)位的影響。全加運(yùn)算的真值表見表所示。全加運(yùn)算的真值表見表所示。進(jìn)位進(jìn)位 和和(3.1)11111 iiiiiiiii

18、iiiiiCyxCyxCyxCyxCyxFii1111)(1 iiiiiiiiiiiiiiiiiCyxyxCyxCyxCyxCyxCi全加器運(yùn)算真值表全加器運(yùn)算真值表xiyiCi-1FiCi000000011001010011011001010101110011111114全加器的邏輯圖和符號表示全加器的邏輯圖和符號表示 圖圖3.4是實(shí)現(xiàn)上述表達(dá)式的全加器邏輯圖和全加器的符號表示。從是實(shí)現(xiàn)上述表達(dá)式的全加器邏輯圖和全加器的符號表示。從圖中可以看出全加器的圖中可以看出全加器的進(jìn)位進(jìn)位及及全加和全加和的形成時(shí)間分別有的形成時(shí)間分別有3級門級門的延的延遲和遲和2級門級門的延遲。的延遲。3.2.2 串

19、行進(jìn)位與并行進(jìn)位串行進(jìn)位與并行進(jìn)位 將將n個(gè)全加器相連便可得到個(gè)全加器相連便可得到n位的加法器,如下圖所示。位的加法器,如下圖所示。15 上圖的進(jìn)位方式叫做上圖的進(jìn)位方式叫做串行進(jìn)位或行波進(jìn)位串行進(jìn)位或行波進(jìn)位。 這種進(jìn)位的加法運(yùn)行時(shí)間隨著兩個(gè)相加的二進(jìn)制數(shù)的位數(shù)的增加這種進(jìn)位的加法運(yùn)行時(shí)間隨著兩個(gè)相加的二進(jìn)制數(shù)的位數(shù)的增加而增加而增加。 為此應(yīng)設(shè)法預(yù)先形成各位進(jìn)位,將進(jìn)位信號同時(shí)送到各位全加器為此應(yīng)設(shè)法預(yù)先形成各位進(jìn)位,將進(jìn)位信號同時(shí)送到各位全加器的進(jìn)位輸入端,這種進(jìn)位方法稱為的進(jìn)位輸入端,這種進(jìn)位方法稱為先行進(jìn)位或并行進(jìn)位先行進(jìn)位或并行進(jìn)位。采用先行。采用先行進(jìn)位的加法器稱為進(jìn)位的加法器稱

20、為先行進(jìn)位加法器先行進(jìn)位加法器。 設(shè)有一個(gè)設(shè)有一個(gè)4位加法器,現(xiàn)討論其進(jìn)位位加法器,現(xiàn)討論其進(jìn)位C1、C2、C3和和C4產(chǎn)產(chǎn)生的條件。生的條件。根據(jù)式根據(jù)式(3- -1)有有Ci= xiyi+(xi yi)Ci- -1。 式中式中xiyi稱為稱為進(jìn)位產(chǎn)生函數(shù)進(jìn)位產(chǎn)生函數(shù)(又稱又稱本地進(jìn)位本地進(jìn)位),用,用Gi表示,它與低位表示,它與低位進(jìn)位無關(guān)。進(jìn)位無關(guān)。16 (xi yi)Ci-1不但與本地兩個(gè)數(shù)有關(guān),還與低位進(jìn)位有關(guān),因此稱不但與本地兩個(gè)數(shù)有關(guān),還與低位進(jìn)位有關(guān),因此稱xi yi進(jìn)位傳送函數(shù)進(jìn)位傳送函數(shù)(又稱又稱低位傳遞進(jìn)位低位傳遞進(jìn)位),用,用Pi表示。表示。即即 根據(jù)式根據(jù)式(3- -

21、1)可得可得 C1=G1+P1C0 C2=G2+P2C1 C3=G3+P3C2 C4=G4+P4C3那么有那么有 (3-2) Gi = xiyi Pi = xi yi(3-3) C1=G1+P1C0 C2=G2+P2C1= G2+P2G1+P2P1C0 C3=G3+P3C2= G3+P3G2+P3P2G1+P3P2P1C0 C4=G4+P4C3= G4+P4G3+P4P3G2+P4P3P2G1 +P4P3P2P1C0 根據(jù)上述表達(dá)式構(gòu)成根據(jù)上述表達(dá)式構(gòu)成C1C4電路。下圖給出了電路。下圖給出了“先行進(jìn)位產(chǎn)生電先行進(jìn)位產(chǎn)生電路路”及及“4位先行進(jìn)位加法器位先行進(jìn)位加法器”的邏輯圖。的邏輯圖。17

22、4位并行加法器位并行加法器18 自然,為了提高自然,為了提高16位加法器的運(yùn)算速度,用上述方法將各進(jìn)位位加法器的運(yùn)算速度,用上述方法將各進(jìn)位Ci用用xi、yi和和C0來表示。并設(shè)來表示。并設(shè) G1*= G4+P4G3+P4P3G2+P4P3P2G1 P1*=P4P3P2P1則式則式(3- -3)中中C4可改寫為可改寫為C4=G1*+P1*C0 (3- -4)將將C4看著第二組的看著第二組的C0,則,則 C5=G5+P5C4 C8=G8+P8C7= G8+P8G7+P8P7G6+P8P7P6G5 +P8P7P6P5C4 以此類推,對以此類推,對16 位加法器,可得位加法器,可得 C16=G16+

23、P16C15 = G16+P16G15+P16P15G14+ +P16P15P2G1+ P16P15P1C019令令 G2*= G8+P8G7+P8P7G6+P8P7P6G5 P2*= P8P7P6P5則則 C8 =G2*+P2*C4同樣可得同樣可得 C12=G3*+P3*C8 C16=G4*+P4*C12按前方式推理,可得按前方式推理,可得 為了要產(chǎn)生為了要產(chǎn)生組進(jìn)位函數(shù)組進(jìn)位函數(shù),須要對原來的,須要對原來的CLA電路進(jìn)行改進(jìn):電路進(jìn)行改進(jìn): 第一組內(nèi)產(chǎn)生第一組內(nèi)產(chǎn)生G1*、P1*、C3、C2、C1不產(chǎn)生不產(chǎn)生C4。 第二組內(nèi)產(chǎn)生第二組內(nèi)產(chǎn)生G2*、P2*、C7、C6、C5不產(chǎn)生不產(chǎn)生C8。

24、 第三組內(nèi)產(chǎn)生第三組內(nèi)產(chǎn)生G3*、P3*、C11、C10、C9不產(chǎn)生不產(chǎn)生C12。 第四組內(nèi)產(chǎn)生第四組內(nèi)產(chǎn)生G4*、P4*、C15、C14、C13不產(chǎn)生不產(chǎn)生C16。(3- -5) C4 =G1*+P1*C0 C8 =G2*+P2*G1*+ P2*P1*C0 C12=G3*+P3*G2*+P3*P2*G1*+ P3*P2*P1*C0 C16=G4*+P4*G3*+P4*P3*G2*+ P4*P3*P2*G1*+ P4*P3*P2*P1*C020 將將CLA電路及進(jìn)位電路及進(jìn)位/傳遞產(chǎn)生電路和求和電路構(gòu)成一個(gè)四位傳遞產(chǎn)生電路和求和電路構(gòu)成一個(gè)四位BCLA加法器。見下圖。加法器。見下圖。 這種電路

25、稱為這種電路稱為成組先行進(jìn)位電路成組先行進(jìn)位電路(BCLA- -Block Carry Look Ahead)。 3.2.3 ALU部件部件 1.補(bǔ)碼加減運(yùn)算的邏輯實(shí)現(xiàn)補(bǔ)碼加減運(yùn)算的邏輯實(shí)現(xiàn) 設(shè)參加運(yùn)算的操作數(shù)為設(shè)參加運(yùn)算的操作數(shù)為A、B,根據(jù)補(bǔ)碼加減運(yùn)算的規(guī)則,可知:,根據(jù)補(bǔ)碼加減運(yùn)算的規(guī)則,可知: A補(bǔ)補(bǔ)+B補(bǔ)補(bǔ)=A+B補(bǔ)補(bǔ) A補(bǔ)補(bǔ)- -B補(bǔ)補(bǔ)=A- -B補(bǔ)補(bǔ) (3-8)21 圖圖3- -2 采用串行進(jìn)位的補(bǔ)碼加減運(yùn)算邏輯電路采用串行進(jìn)位的補(bǔ)碼加減運(yùn)算邏輯電路 當(dāng)當(dāng)M=0時(shí)時(shí),操作數(shù),操作數(shù)B與與M異或后得到的仍是異或后得到的仍是B的原變量,因此加法的原變量,因此加法器的運(yùn)算結(jié)果為:器的運(yùn)

26、算結(jié)果為:F=A補(bǔ)補(bǔ)+B補(bǔ)補(bǔ)=A+B補(bǔ)補(bǔ); 當(dāng)當(dāng)M=1時(shí)時(shí),操作數(shù)操作數(shù)B與與M異或后得到的是異或后得到的是B連符號一起取反的值連符號一起取反的值(B M=B 1),由于由于M=1,又使,又使C0=1,實(shí)現(xiàn)了最低位加,實(shí)現(xiàn)了最低位加1的功能即求的功能即求(- -B)補(bǔ)補(bǔ),所以加法器的運(yùn)算結(jié)果為:,所以加法器的運(yùn)算結(jié)果為:F= A補(bǔ)補(bǔ)+(- -B反反+1)=A補(bǔ)補(bǔ)- -B補(bǔ)補(bǔ)=A- -B補(bǔ)補(bǔ)。 運(yùn)運(yùn)算控制信號邏輯如下:算控制信號邏輯如下:符號位符號位22圖圖3-3 3-3 實(shí)現(xiàn)補(bǔ)碼加減運(yùn)算的邏輯電路實(shí)現(xiàn)補(bǔ)碼加減運(yùn)算的邏輯電路 FA=ADD+SUB,F(xiàn)A信號控制將寄存器信號控制將寄存器A的正向信號

27、輸入加的正向信號輸入加法器法器F的輸入端。的輸入端。 FB=ADD,F(xiàn)B信號控制將操作數(shù)信號控制將操作數(shù)B的正向信號輸入加法器的正向信號輸入加法器F的輸入端。的輸入端。 F =SUB,F(xiàn)B信號控制將操作數(shù)信號控制將操作數(shù)B的反向信號輸入加法器的反向信號輸入加法器F的輸入端。的輸入端。 B23 C01=SUB,C01信號控制使加法器信號控制使加法器F的最低位進(jìn)位的最低位進(jìn)位C01。 AF=ADD+SUB,AF信號控制使加法器信號控制使加法器F的運(yùn)算結(jié)果寫入寄的運(yùn)算結(jié)果寫入寄存器存器A。 其中其中ADD和和SUB分別為控制器根據(jù)加法指令和減法指令譯碼后分別為控制器根據(jù)加法指令和減法指令譯碼后得到的

28、控制電位信號。得到的控制電位信號。 2算術(shù)邏輯運(yùn)算部件舉例算術(shù)邏輯運(yùn)算部件舉例 下面以中規(guī)模集成電路芯片下面以中規(guī)模集成電路芯片SN74181為例,說明為例,說明ALU組件的工作組件的工作原理。原理。圖圖3- -4 SN74181的外部特性圖的外部特性圖 24 其中其中 A30、B30為參加運(yùn)算的兩組為參加運(yùn)算的兩組4位操作數(shù);位操作數(shù); C0為低位來的進(jìn)位;為低位來的進(jìn)位; F30為輸出的運(yùn)算結(jié)果;為輸出的運(yùn)算結(jié)果; Cn+4為向高位的進(jìn)位;為向高位的進(jìn)位; G為小組本地進(jìn)位;為小組本地進(jìn)位;P為小組傳遞函數(shù);為小組傳遞函數(shù); A=B用于輸出兩個(gè)操作數(shù)的相等情況。用于輸出兩個(gè)操作數(shù)的相等情況

29、。 如果將多個(gè)如果將多個(gè)SN74181的的“A=B”端按端按“與與”邏輯連就可以檢測兩個(gè)邏輯連就可以檢測兩個(gè)字長超過字長超過4位的操作數(shù)的相等情況。位的操作數(shù)的相等情況。 在控制信號中:在控制信號中: S3S2S1S0用于控制產(chǎn)生用于控制產(chǎn)生16種不同的邏輯函數(shù)。種不同的邏輯函數(shù)。 M=0,則允許位間進(jìn)位,執(zhí)行算術(shù)運(yùn)算;若,則允許位間進(jìn)位,執(zhí)行算術(shù)運(yùn)算;若M=1,則封鎖,則封鎖位間進(jìn)位間進(jìn)位,執(zhí)行邏輯運(yùn)算。位,執(zhí)行邏輯運(yùn)算。 表表3- -1列出了采用負(fù)邏輯方式時(shí)列出了采用負(fù)邏輯方式時(shí)SN74181 ALU完成的功能。完成的功能。 在表中,在表中,“加加”是指算術(shù)加;是指算術(shù)加; “+”是指邏輯

30、加,即是指邏輯加,即“或或”運(yùn)算運(yùn)算。 進(jìn)行算術(shù)加運(yùn)算時(shí),最低位的進(jìn)位為進(jìn)行算術(shù)加運(yùn)算時(shí),最低位的進(jìn)位為0。25 注:注:*表示表示A+A=2A ,即,即A算術(shù)左移算術(shù)左移1位位表表3- -1 SN74181 ALU的功能表的功能表 26 圖圖3- -5給出了利用給出了利用4片片SN74181和和1片片sN74182構(gòu)成構(gòu)成16位快速并行加位快速并行加法器的例子。法器的例子。 圖圖3-5 16位快速并行加法器位快速并行加法器用兩個(gè)用兩個(gè)16位全先行進(jìn)位邏輯級聯(lián)組成的位全先行進(jìn)位邏輯級聯(lián)組成的32位位ALU 273.3 定點(diǎn)乘法運(yùn)算定點(diǎn)乘法運(yùn)算 計(jì)算機(jī)中實(shí)現(xiàn)乘除運(yùn)算通常采用以下三種方式:計(jì)算機(jī)中

31、實(shí)現(xiàn)乘除運(yùn)算通常采用以下三種方式: (1)利用乘除運(yùn)算子程序利用乘除運(yùn)算子程序 這種方式的基本思想是采用軟件實(shí)現(xiàn)乘除運(yùn)算這種方式的基本思想是采用軟件實(shí)現(xiàn)乘除運(yùn)算。 (2)在加法器的基礎(chǔ)上增加左、右移位及計(jì)數(shù)器等邏輯線路構(gòu)成乘在加法器的基礎(chǔ)上增加左、右移位及計(jì)數(shù)器等邏輯線路構(gòu)成乘除運(yùn)算部件除運(yùn)算部件 這種方式的基本思想是采用硬件實(shí)現(xiàn)乘除運(yùn)算這種方式的基本思想是采用硬件實(shí)現(xiàn)乘除運(yùn)算。 (3)設(shè)置專用的陣列乘除運(yùn)算器設(shè)置專用的陣列乘除運(yùn)算器 陣列乘除運(yùn)算器將多個(gè)加減運(yùn)算部件排成乘除運(yùn)算陣列,依靠硬陣列乘除運(yùn)算器將多個(gè)加減運(yùn)算部件排成乘除運(yùn)算陣列,依靠硬件資源的重復(fù)設(shè)置,同時(shí)進(jìn)行多位乘除運(yùn)算,贏得了乘

32、除運(yùn)算的高件資源的重復(fù)設(shè)置,同時(shí)進(jìn)行多位乘除運(yùn)算,贏得了乘除運(yùn)算的高速度速度。 3.3.1 原碼乘法運(yùn)算原碼乘法運(yùn)算 用原碼實(shí)現(xiàn)乘法運(yùn)算時(shí),符號位與數(shù)值位分開計(jì)算,因此原碼乘用原碼實(shí)現(xiàn)乘法運(yùn)算時(shí),符號位與數(shù)值位分開計(jì)算,因此原碼乘法分兩步:法分兩步: 計(jì)算乘積的符號位,它等于兩個(gè)相乘數(shù)符號的異或值。計(jì)算乘積的符號位,它等于兩個(gè)相乘數(shù)符號的異或值。 計(jì)算乘積的數(shù)值位,它等于兩個(gè)相乘數(shù)的絕對值之積。計(jì)算乘積的數(shù)值位,它等于兩個(gè)相乘數(shù)的絕對值之積。28 1101 x y4 2- -4 1101 x y3 2- -3 0000 x y2 2- -2 1101 x y1 2- -1 乘積的數(shù)值乘積的數(shù)值

33、z1z2zn =|x| |y|= x1x2xn y1y2yn 乘積的符號乘積的符號zf = xf yf 例例3.8 x=0.1101,y=- -0.1011,手算過程是,手算過程是 0.1101 被乘數(shù)被乘數(shù)x=0. x1x2x3x4 0.1011 乘數(shù)乘數(shù)y=0.y1y2 y3y4 0.10001111 412iiiyx表表3-2 乘積符號真值表乘積符號真值表xf yfzf0 000 111 011 1029 1原碼一位乘法原碼一位乘法 在計(jì)算機(jī)的原碼一位乘法中,參加運(yùn)算的被乘數(shù)和乘數(shù)均用原碼在計(jì)算機(jī)的原碼一位乘法中,參加運(yùn)算的被乘數(shù)和乘數(shù)均用原碼表示;運(yùn)算時(shí)符號位單獨(dú)處表示;運(yùn)算時(shí)符號位單

34、獨(dú)處理,被乘數(shù)與乘數(shù)的絕對值相乘;所得理,被乘數(shù)與乘數(shù)的絕對值相乘;所得的積也采用原碼表示。的積也采用原碼表示。 乘法過程采用右移的方法乘法過程采用右移的方法。 用乘數(shù)用乘數(shù)y的一位的一位yi去乘以被乘數(shù)去乘以被乘數(shù)x,得,得x yi與前面所得的結(jié)果相加與前面所得的結(jié)果相加得到得到zi,稱為部分積。,稱為部分積。 將前面所得部分積將前面所得部分積zi右移一位后與本次求得的結(jié)果右移一位后與本次求得的結(jié)果x yi相加。而相加。而不是采用左移最后求總和的方法。不是采用左移最后求總和的方法。 對乘數(shù)中為對乘數(shù)中為“1”的位執(zhí)行加的位執(zhí)行加x和右移運(yùn)算,對乘數(shù)中為和右移運(yùn)算,對乘數(shù)中為 “0”的的位只執(zhí)

35、行前面部分積位只執(zhí)行前面部分積zi右移操作,節(jié)省本次部分積的生成時(shí)間。右移操作,節(jié)省本次部分積的生成時(shí)間。 上述基本思想可以推導(dǎo)如下:上述基本思想可以推導(dǎo)如下: 設(shè)設(shè)x原原=xf .x1x2xn y原原=yf .y1y2yn則乘積則乘積z原原= x原原 y原原= (xf yf)|x| |y|10001111. 02 41 iiiyxyx30 |x| |y|=x (0.y1y2yn) = x (y1 2- -1+y2 2- -2+ +yn 2- -n) =2- -1 (xy1+2- -1 (xy2+ 2- -1 (xyn+0) 得其原碼一位乘法遞推公式得其原碼一位乘法遞推公式 z0 =0 初值初

36、值 z1 =2- -1 (xyn+z0) z2 =2- -1 (xyn- -1+z1) zn- -1=2- -1 (xy2+zn- -2) zn =2- -1 (xy1+zn- -1)z1zn-1znz031 例例3.9:設(shè):設(shè) x=0.1101,y=- -0.1011,按原碼一位乘法規(guī)則計(jì)算,按原碼一位乘法規(guī)則計(jì)算z原原= x原原 y原原=x y原原,即求,即求z=x y zf=xf yf=1,所以所以z原原=1.10001111,即,即x y=- -0.10001111 被乘數(shù)被乘數(shù)x原原1 1 0 1yiyi=1,故,故+)1 1 0 1z0=0 1 1 0 1yi=1,故,故+)1 1

37、 0 1 10 1 1 0 1 1 0 1部分積部分積y原原c 0 0 0 0 1 0 1 1 1 0 0 1 1 11 0 0 1 1 1 1 0yi=0,故,故+)0 0 0 0 1 0 0 1 10 1 0 0 1 1 1 1yi=1,故,故+)1 1 0 1 1 0 0 0 1 1 0 1 0 0 0 1 1 1 132 實(shí)現(xiàn)原碼一位乘法的算法的硬件邏輯電路如圖實(shí)現(xiàn)原碼一位乘法的算法的硬件邏輯電路如圖3- -6所示。所示。圖圖3-6 原碼一位乘法邏輯原理圖原碼一位乘法邏輯原理圖 33圖圖3-7 原碼一位乘法的流程原碼一位乘法的流程 34圖圖3- -8 實(shí)現(xiàn)移位功能的邏輯電路實(shí)現(xiàn)移位功能

38、的邏輯電路 35 2. 原碼兩位乘法原碼兩位乘法 在兩位乘法中,乘數(shù)相鄰兩位有在兩位乘法中,乘數(shù)相鄰兩位有4種可能性的組合,每種組合對種可能性的組合,每種組合對應(yīng)以下操作:應(yīng)以下操作: ynyn- -1 操作操作 00 zi+1=2- -2zi 01 zi+1=2- -2(zi+x) 10 zi+1=2- -2(zi+2x) 11 zi+1=2- -2(zi+3x) 對于對于+3x操作有兩種實(shí)現(xiàn)方法操作有兩種實(shí)現(xiàn)方法: 分分+x和和+2x兩次進(jìn)行,這種實(shí)現(xiàn)方法速度較低。兩次進(jìn)行,這種實(shí)現(xiàn)方法速度較低。 以以4x- -x來實(shí)現(xiàn),即本次只執(zhí)行來實(shí)現(xiàn),即本次只執(zhí)行- -x(即即+- -x補(bǔ)補(bǔ))操作,

39、操作,+4x操作歸并操作歸并在下一步執(zhí)行。即在下一步執(zhí)行。即zi+1=2- -2(zi+3x) =2- -2(zi+ 4x- -x)=2- -2(zi- -x)+x。欠下的。欠下的4x變?yōu)樵谙乱徊綀?zhí)行中變?yōu)樽優(yōu)樵谙乱徊綀?zhí)行中變?yōu)?x, 設(shè)置一個(gè)設(shè)置一個(gè)欠賬觸發(fā)器欠賬觸發(fā)器T記錄是否欠記錄是否欠+x。 若有欠賬,則若有欠賬,則1T。否則,。否則, 0T。36 由于在迭代過程中,存在右移送入加數(shù)操作,因此,加法的溢出由于在迭代過程中,存在右移送入加數(shù)操作,因此,加法的溢出會(huì)侵占兩位符號位。會(huì)侵占兩位符號位。為保證右移為保證右移2 位的操作正確實(shí)現(xiàn),并且在右移位的操作正確實(shí)現(xiàn),并且在右移中又能自動(dòng)糾

40、正這種溢出錯(cuò)誤,在原碼兩位乘法運(yùn)算中,數(shù)據(jù)都以中又能自動(dòng)糾正這種溢出錯(cuò)誤,在原碼兩位乘法運(yùn)算中,數(shù)據(jù)都以模模8補(bǔ)碼形式補(bǔ)碼形式(3 位符號位符號 位位,最高位符號才是真正的符號最高位符號才是真正的符號)操作。此時(shí),操作。此時(shí),也不需要進(jìn)位標(biāo)志。也不需要進(jìn)位標(biāo)志。表表3- -3 原碼兩位乘法的運(yùn)算規(guī)則原碼兩位乘法的運(yùn)算規(guī)則 yn- -1 yn T操操 作作迭代公式迭代公式0 0 00 Tzi+1=2- -2zi0 1 0+x0 Tzi+1=2- -2( (zi+ x) )0 0 1+x0 Tzi+1=2- -2( (zi+ x) )0 1 1+2x0 Tzi+1=2- -2( (zi+ 2x)

41、)1 0 0+2x0 Tzi+1=2- -2( (zi+ 2x) )1 0 1-x1 Tzi+1=2- -2( (zi- -x) )1 1 0-x1 Tzi+1=2- -2( (zi- -x) )1 1 11 Tzi+1=2- -2zi37 1001.100011 2 000.011000 111110 0 z和和y同時(shí)右移同時(shí)右移2位,得位,得z2。 例例3.10 設(shè)設(shè) x=0.111001,y=- -0.100111,用原碼兩位乘法規(guī)則計(jì)算,用原碼兩位乘法規(guī)則計(jì)算Z原原= x原原 y原原, 即求即求Z=x y。 解:解:x原原=0.111001,y原原=1.100111 |x|補(bǔ)補(bǔ)=0.1

42、11001, - -|x|補(bǔ)補(bǔ)=1.000111。 z y T 說明說明 000.000000 100111 0 初始初始z=0,T=0+ -|x|補(bǔ)補(bǔ) 111.000111 y5y6T=110,- -x,1T 111.000111 2 111.110001 111001 1 z和和y同時(shí)右移同時(shí)右移2位,得位,得z1。 010.001010 2 000.100010 101111 0 z和和y同時(shí)右移同時(shí)右移2位,得位,得z3。+2x 001.110010 y3y4T=011,+ +2x,0T+2x 001.110010 y1y2T=100,+ +2x,0T38 zf=xf yf=0 1=1

43、 z原原= x原原 y原原= 1.100010101111。 在例在例3.8中,若采用模中,若采用模4補(bǔ)碼計(jì)算,會(huì)發(fā)現(xiàn):在計(jì)算補(bǔ)碼計(jì)算,會(huì)發(fā)現(xiàn):在計(jì)算z3的過程,加的過程,加法溢出侵占了兩位符號位,如法溢出侵占了兩位符號位,如“”所指處。那么,在進(jìn)行所指處。那么,在進(jìn)行z和和y同同時(shí)右移時(shí)右移2位操作時(shí),按照補(bǔ)碼右移規(guī)則,將得到位操作時(shí),按照補(bǔ)碼右移規(guī)則,將得到z是負(fù)數(shù),而兩個(gè)正是負(fù)數(shù),而兩個(gè)正數(shù)相乘是不可能得負(fù)數(shù)乘積的。就象加法運(yùn)算要用模數(shù)相乘是不可能得負(fù)數(shù)乘積的。就象加法運(yùn)算要用模4加補(bǔ)榪來防加補(bǔ)榪來防止溢出一樣,止溢出一樣,加加2|x|可能侵占最高符號位,故用??赡芮终甲罡叻栁唬视媚?/p>

44、8補(bǔ)碼防止溢出,補(bǔ)碼防止溢出,最高符號位是真正符號位最高符號位是真正符號位。 原碼兩位乘法運(yùn)算次數(shù)的控制方法為:原碼兩位乘法運(yùn)算次數(shù)的控制方法為: 若操作數(shù)字長為奇數(shù),則去掉一位符號位后,數(shù)值部分長度若操作數(shù)字長為奇數(shù),則去掉一位符號位后,數(shù)值部分長度n為偶數(shù),因此共需做為偶數(shù),因此共需做n/ /2次運(yùn)算。次運(yùn)算。 若操作數(shù)字長為偶數(shù),則去掉一位符號位后,數(shù)值部分長度若操作數(shù)字長為偶數(shù),則去掉一位符號位后,數(shù)值部分長度n為奇數(shù),因此需將乘數(shù)再加上一個(gè)符號位并使之為為奇數(shù),因此需將乘數(shù)再加上一個(gè)符號位并使之為0,以便形成偶,以便形成偶數(shù)位,此時(shí)共需做數(shù)位,此時(shí)共需做(n+1)/2次運(yùn)算,但最后一

45、次移位僅移一位。次運(yùn)算,但最后一次移位僅移一位。 若最后一次運(yùn)算后若最后一次運(yùn)算后T仍為仍為1,則需再做一次加,則需再做一次加x操作,最高符號操作,最高符號位作為真正的符位作為真正的符號位,才能保證運(yùn)算過程正確無誤,以便還清欠賬。號位,才能保證運(yùn)算過程正確無誤,以便還清欠賬。 例例3.11 x原原=0.1011,y原原=1.1101,分別用原碼一位和兩位乘法計(jì),分別用原碼一位和兩位乘法計(jì)算算x y原原39 解:解:積積z原原=x y原原,符號部分單獨(dú)處理,符號部分單獨(dú)處理,zf =0 1=1 用原碼一位乘法計(jì)算用原碼一位乘法計(jì)算=x y原原。 |x|=1011,|y|=1101,數(shù)值部分為,數(shù)

46、值部分為4位,共需運(yùn)算位,共需運(yùn)算4次。運(yùn)算過程如次。運(yùn)算過程如下:下:被乘數(shù)被乘數(shù)x原原1 0 1 1yiyi=1,故,故+)1 0 1 1z0=0 1 0 1 1yi=0,故,故+)0 0 0 0 10 1 0 1 1 1 1 0部分積部分積y原原c 0 0 0 0 1 1 0 1 0 1 0 1 10 0 1 0 1 1 1 1yi=1,故,故+)1 0 1 1 1 1 0 1 10 1 1 0 1 1 1 1yi=1,故,故+)1 0 1 1 1 0 0 0 1 1 0 1 0 0 0 1 1 1 140 用原碼二位乘法計(jì)算用原碼二位乘法計(jì)算=x y原原。 |x|=000 1011,|

47、y|=1101,- -|x|=111 0101。 數(shù)值部分為數(shù)值部分為4位,共需運(yùn)算位,共需運(yùn)算4/2=2次。運(yùn)算過程如下:次。運(yùn)算過程如下:被乘數(shù)被乘數(shù)x原原0 0 0 1 0 1 1 yn-1ynCj +)0 0 0 1 0 1 1yn-1ynCj=010,+x,Cj0部分積部分積y原原c 0 0 0 0 0 0 0 1 1 0 1 00 0 0 1 0 1 1 20 0 0 0 0 1 0 1 1 1 1 0 +)1 1 1 0 1 0 1yn-1ynCj=110,- -x,Cj11 1 1 0 1 1 1 21 1 1 1 1 0 1 1 1 1 1 1 +)0 0 0 1 0 1 1

48、Cj=1,補(bǔ)補(bǔ)+x 1 0 0 0 1 0 0 0 1 1 1 1得:得:|x y|=10001111 加上符號部分得:加上符號部分得: z原原=x y原原=1 10001111,即,即x y=- -10001111 413.3.2 補(bǔ)碼乘法運(yùn)算補(bǔ)碼乘法運(yùn)算 1 1補(bǔ)碼一位乘法補(bǔ)碼一位乘法 例例 已知已知x=0.1011,y=0.0001 則則x補(bǔ)補(bǔ)=0.1011,y補(bǔ)補(bǔ)=0.0001 可以計(jì)算出可以計(jì)算出x y補(bǔ)補(bǔ)=0.00001011 x補(bǔ)補(bǔ) y補(bǔ)補(bǔ)=0.00001011 得得 x y補(bǔ)補(bǔ)= x補(bǔ)補(bǔ) y補(bǔ)補(bǔ) 例例 已知已知x=0.1011,y=- -0.0001 則則x補(bǔ)補(bǔ)=0.1011,

49、y補(bǔ)補(bǔ)=1.1111 可以計(jì)算出可以計(jì)算出x y補(bǔ)補(bǔ)=1.11110101 而而 x補(bǔ)補(bǔ) y補(bǔ)補(bǔ)=1.01010101 得得 x y補(bǔ)補(bǔ) x補(bǔ)補(bǔ) y補(bǔ)補(bǔ) 從上述兩例子看到,補(bǔ)碼乘法從上述兩例子看到,補(bǔ)碼乘法有時(shí)有正確結(jié)果有時(shí)有正確結(jié)果,而有時(shí)結(jié)果存在而有時(shí)結(jié)果存在問題問題,其原因從下面推導(dǎo)可以得出。以小數(shù)為例,其原因從下面推導(dǎo)可以得出。以小數(shù)為例 設(shè)設(shè)x補(bǔ)補(bǔ)=x0.x1x2xn y補(bǔ)補(bǔ)=y0.y1y2yn 根據(jù)補(bǔ)碼定義,根據(jù)補(bǔ)碼定義,y0時(shí),時(shí),y補(bǔ)補(bǔ)=y=y0.y1y2yn, y0=0。 對于負(fù)小數(shù),即對于負(fù)小數(shù),即y0時(shí),此時(shí),時(shí),此時(shí),y0=1。y補(bǔ)補(bǔ)=2+y (mod 2),42=y0

50、+0.y1y2yn 2=(2+ y0)+ 412iiiy niiiyy102即即 y=y補(bǔ)補(bǔ)- -2=- -1+ 412iiiy補(bǔ)補(bǔ)補(bǔ)補(bǔ)201yxyxniii 補(bǔ)補(bǔ)補(bǔ)補(bǔ)因因此此)2- ( 10 niiiyyxyx,補(bǔ)補(bǔ)201yxyxniii 乘數(shù)是正數(shù)乘數(shù)是正數(shù)時(shí),時(shí),y0=0, x y補(bǔ)補(bǔ)= x補(bǔ)補(bǔ) y補(bǔ)補(bǔ)。 當(dāng)乘數(shù)為負(fù)數(shù)時(shí),當(dāng)乘數(shù)為負(fù)數(shù)時(shí),y0=1,即即x y補(bǔ)補(bǔ)x補(bǔ)補(bǔ) y補(bǔ)補(bǔ)。需要再加上。需要再加上- -x補(bǔ)補(bǔ)進(jìn)行修正。這種方法稱為進(jìn)行修正。這種方法稱為加終端修正的補(bǔ)碼制乘法加終端修正的補(bǔ)碼制乘法。 在加終端修正的補(bǔ)碼制乘法中被乘數(shù)的符號參與乘法運(yùn)算,在加終端修正的補(bǔ)碼制乘法中被乘數(shù)的符

51、號參與乘法運(yùn)算,43 A.D.Booth提出了一種算法:相乘兩數(shù)用補(bǔ)碼表示,它提出了一種算法:相乘兩數(shù)用補(bǔ)碼表示,它們的符號們的符號位與數(shù)值位一起參與乘法運(yùn)算,直接得到用補(bǔ)碼表示的乘積,且正位與數(shù)值位一起參與乘法運(yùn)算,直接得到用補(bǔ)碼表示的乘積,且正數(shù)與負(fù)數(shù)同等對待。數(shù)與負(fù)數(shù)同等對待。稱為稱為 Booth算法算法。 設(shè)被乘數(shù)設(shè)被乘數(shù) x補(bǔ)補(bǔ)=x0.x1x2xn, 乘數(shù)乘數(shù) y補(bǔ)補(bǔ)=y0.y1y2yiyi+1 yn。 y=- -y0+y1 2- -1+y2 2- -2 +y3 2- -3+yn 2- -n =- -y0+(y1- -y1 2- -1)+(y2 2- -1 - -y2 2- -2)

52、+(y3 2- -2- -y3 2- -3 ) +(yn 2- -(n- -1)- - yn 2- -n ) =(y1- - y0)+(y2- -y1) 2- -1+(y3- -y2) 2- -2+ +(yn- -yn-1) 2- -(n- -1) +(0- - yn) 2-n =(y1- -y0)+(y2- -y1) 2- -1+(y3- - y2) 2- -2+ +(yn- -yn-1) 2- -(n- -1) +(yn+1- - yn) 2- -n niiiiyy012)( niiiyy102 根據(jù)補(bǔ)碼的定義可得出真值根據(jù)補(bǔ)碼的定義可得出真值y= 這里這里yn+1稱為輔助位稱為輔助位,實(shí)

53、初值設(shè)為,實(shí)初值設(shè)為0。因此。因此44 =(y1- - y0)x補(bǔ)補(bǔ)+ 2- -1(y2- - y1)x補(bǔ)補(bǔ)+ 2- -1(y3- - y2)x補(bǔ)補(bǔ)+ + 2- -1(yn- - yn-1)x+2- -1(yn+1- - yn)x) ) )補(bǔ)補(bǔ) 因此,得到如下遞推公式:因此,得到如下遞推公式: zi+1補(bǔ)補(bǔ)=2- -1(zi+(yn- -i+1- - yn- -i)x)補(bǔ)補(bǔ) (i=0,1,2,n- -1) zn+1補(bǔ)補(bǔ)=zn+(y1- - y0)x補(bǔ)補(bǔ) 式中式中zi為上次部分積,為上次部分積,zi+1為本次部分積。為本次部分積。令令 z0補(bǔ)補(bǔ)=0,則有:,則有: z1補(bǔ)補(bǔ)=2- -1(z0+(

54、yn+1- - yn)x)補(bǔ)補(bǔ)=2- -1(yn+1- - yn)x補(bǔ)補(bǔ) (i=0) z2補(bǔ)補(bǔ)=2- -1(z1+(yn- - yn- -1)x)補(bǔ)補(bǔ) (i=1) zn補(bǔ)補(bǔ)=2- -1(zn- -1+(y2- - y1)x)補(bǔ)補(bǔ) (i=n- -1) zn+1補(bǔ)補(bǔ)=zn+(y1- - y0)x補(bǔ)補(bǔ) 可以得知:可以得知: x y補(bǔ)補(bǔ)=zn+1補(bǔ)補(bǔ)=zn+(y1- - y0)x補(bǔ)補(bǔ)=zn 補(bǔ)補(bǔ)+(y1- - y0)x補(bǔ)補(bǔ) 2)()(1101iniiiyyxyyxyx 補(bǔ)補(bǔ)補(bǔ)補(bǔ)補(bǔ)補(bǔ)45 根據(jù)補(bǔ)碼編碼規(guī)則根據(jù)補(bǔ)碼編碼規(guī)則 ,補(bǔ)碼數(shù)據(jù)的右移是連同符號位一起右移,且,補(bǔ)碼數(shù)據(jù)的右移是連同符號位一起右移,且最

55、高位補(bǔ)充符號位的值。因此,最高位補(bǔ)充符號位的值。因此,2- -1 (zi x)補(bǔ)補(bǔ) 為為 zn 補(bǔ)補(bǔ)+x補(bǔ)補(bǔ)后右后右移一位;移一位;2- -1zn 補(bǔ)補(bǔ)為為zn補(bǔ)補(bǔ)右移一位。那么右移一位。那么Booth算法規(guī)則如下算法規(guī)則如下: 參加運(yùn)算的兩乘數(shù)均用補(bǔ)碼表示參加運(yùn)算的兩乘數(shù)均用補(bǔ)碼表示,并在乘數(shù)的最低位之后再增,并在乘數(shù)的最低位之后再增加一位輔助位加一位輔助位yn+1=0,并以乘數(shù)的最低兩位并以乘數(shù)的最低兩位ynyn+1作為判斷位作為判斷位,兩數(shù)兩數(shù)的符號位參加運(yùn)算的符號位參加運(yùn)算; 由于右移操作,對乘數(shù)的相鄰兩位由于右移操作,對乘數(shù)的相鄰兩位yn- -i和和 yn- -i +1的判斷,實(shí)際變

56、的判斷,實(shí)際變?yōu)槊看我猿藬?shù)的最低的兩位為每次以乘數(shù)的最低的兩位ynyn+1為判斷位,為判斷位, 以決定相應(yīng)操作是以決定相應(yīng)操作是+x或或- -x(- -x補(bǔ)補(bǔ)由由+- - x補(bǔ)補(bǔ)實(shí)現(xiàn)實(shí)現(xiàn)),或僅右移一位;得新的部分積,或僅右移一位;得新的部分積zi+1 補(bǔ)補(bǔ); yn- -i yn- -i +1 運(yùn)算運(yùn)算 0 0 zi+1 補(bǔ)補(bǔ)=2- -1 zi補(bǔ)補(bǔ) 0 1 zi +1補(bǔ)補(bǔ)=2- -1(zi +x)補(bǔ)補(bǔ) 1 0 zi +1補(bǔ)補(bǔ)=2- -1(zi - -x)補(bǔ)補(bǔ) 1 1 zi +1補(bǔ)補(bǔ)=2- -1 zi補(bǔ)補(bǔ) 移位按補(bǔ)碼右移規(guī)則進(jìn)行移位按補(bǔ)碼右移規(guī)則進(jìn)行; 循環(huán)做循環(huán)做n+1次判斷次判斷- -累加,

57、累加,n次移位次移位。即第即第n+1次判斷次判斷(y1- - y0)后,后,僅做僅做 (y1- - y0)x+ zn操作,但不作移位操作,但不作移位,本次是對乘數(shù)的符號位進(jìn)行處,本次是對乘數(shù)的符號位進(jìn)行處理,得結(jié)果理,得結(jié)果x y補(bǔ)補(bǔ)。46 判斷與相應(yīng)的操作見下表判斷與相應(yīng)的操作見下表 注注:由于符號位參加運(yùn)算,故:由于符號位參加運(yùn)算,故被乘數(shù)采用雙符號位被乘數(shù)采用雙符號位,而乘數(shù)仍采而乘數(shù)仍采用單符號位用單符號位。 例例3.12 設(shè)設(shè)x=- -0.1101,y=0.1011,按補(bǔ)碼一位乘法規(guī)則計(jì)算,按補(bǔ)碼一位乘法規(guī)則計(jì)算Z補(bǔ)補(bǔ)= x補(bǔ)補(bǔ) y補(bǔ)補(bǔ), 即求即求Z=x y。 解:解: x補(bǔ)補(bǔ)=1.

58、0011,- -x補(bǔ)補(bǔ)=0.1101,y補(bǔ)補(bǔ)=0.1011,0z。表表3- -4 補(bǔ)碼一位乘法的操作補(bǔ)碼一位乘法的操作判斷位判斷位ynyn+1操作操作判斷位判斷位ynyn+1操作操作0 00 1原部分積右移原部分積右移1位位原部分積加原部分積加x補(bǔ)補(bǔ)右移右移1位位1 01 1原部分積加原部分積加- -x補(bǔ)補(bǔ)右移右移1位位原部分積右移原部分積右移1位位47部分積部分積z補(bǔ)補(bǔ):00.0000 0.1011 0 y yn+1 說明說明+ +- -x補(bǔ)補(bǔ) +00.1101ynyn+1=10,故,故+ +- -x補(bǔ)補(bǔ)00.110111 00.0110 1 0101 1 ynyn+1=11,故,故+0+0

59、0.000000.011011 00.0011 0 1010 1 ynyn+1=01,故,故+ +x補(bǔ)補(bǔ)+ +x補(bǔ)補(bǔ) +11.001111.011011 11.1011 0 0101 0 ynyn+1=10,故,故+ +- -x補(bǔ)補(bǔ)+ +- -x補(bǔ)補(bǔ) +00.110100.100011 00.0100 0 0010 1 ynyn+1=01,故,故+ +x補(bǔ)補(bǔ)+ +- -x補(bǔ)補(bǔ) +11.001111.0111 0 001 得:得:x y補(bǔ)補(bǔ)=1.01110001,則,則x y原原=1.10001111,48 所以所以 x y=- -0.10001111 補(bǔ)碼一位乘法的硬件邏輯結(jié)構(gòu)如圖補(bǔ)碼一位乘法

60、的硬件邏輯結(jié)構(gòu)如圖3-9所示。所示。 圖圖3-9 補(bǔ)碼一位乘法的邏輯結(jié)構(gòu)圖補(bǔ)碼一位乘法的邏輯結(jié)構(gòu)圖 補(bǔ)碼一位乘法的算法流程如圖補(bǔ)碼一位乘法的算法流程如圖3- -10所示。所示。49圖圖3-10 補(bǔ)碼一位乘法的算法流程補(bǔ)碼一位乘法的算法流程 50 2. 補(bǔ)碼兩位乘法補(bǔ)碼兩位乘法 補(bǔ)碼數(shù)的乘法也可以采用兩位一乘的方法。補(bǔ)碼數(shù)的乘法也可以采用兩位一乘的方法。 設(shè)已經(jīng)求得部分積設(shè)已經(jīng)求得部分積 zi補(bǔ)補(bǔ),則,則 zi+1補(bǔ)補(bǔ)可以寫為:可以寫為: zi+1補(bǔ)補(bǔ)=2- -1zi補(bǔ)補(bǔ)+(yn- -i+1- - yn- -i) x補(bǔ)補(bǔ) zi+2補(bǔ)補(bǔ)=2- -1zi+1補(bǔ)補(bǔ)+(yn- -i- - yn- -i-

溫馨提示

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

最新文檔

評論

0/150

提交評論