浮點數(shù)計算方法_第1頁
浮點數(shù)計算方法_第2頁
浮點數(shù)計算方法_第3頁
浮點數(shù)計算方法_第4頁
浮點數(shù)計算方法_第5頁
已閱讀5頁,還剩159頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第二章 運算方法和運算器2.1 數(shù)據(jù)與文字的表示方法2.2 定點加法、減法運算2.3 定點乘法運算2.4 定點除法運算2.5 定點運算器的組成2.6 浮點運算方法和浮點運算器2.1 數(shù)據(jù)與文字的表示方法 2.1.1 2.1.1 數(shù)據(jù)格式數(shù)據(jù)格式計算機中常用的數(shù)據(jù)表示格式有兩種: 1 1 定點格式定點格式 2 2 浮點格式浮點格式 一般來說,定點格式容許的數(shù)值范圍有限,但要求的處理硬件比較簡單。而浮點格式容許的數(shù)值范圍很大,但要求的處理硬件比較復(fù)雜。1. 定點數(shù)的表示方法定點數(shù)的表示方法定點表示定點表示:約定機器中所有數(shù)據(jù)的小數(shù)點位置是固定不變的。由于約定在固定的位置,小數(shù)點就不再使用記號“.”

2、來表示。通常將數(shù)據(jù)表示成純小數(shù)純小數(shù)或純整數(shù)純整數(shù)。 定點數(shù)012n 在定點機中表示如下(0:符號位,0代表正號,1代表負(fù)號):純小數(shù)純小數(shù)的表示范圍為(012n 各位均為0時最小;各位均為1時最大) 0|12n (2.1) 純整數(shù)純整數(shù)的表示范圍為0|2n1 (2.2)目前計算機中多采用定點純整數(shù)表示,因此將定點數(shù)表示的運算簡稱為整數(shù)運算整數(shù)運算。電子的質(zhì)量(91028克)和太陽的質(zhì)量(21033克)相差甚遠(yuǎn),在定點計算機中無法直接來表示這個數(shù)值范圍.要使它們送入定點計算機進(jìn)行某種運算,必須對它們分別取不同的比例因子,使其數(shù)值部分絕對值小于1,即: 9 10280.9 1027 2 1033

3、0.2 1034 這里的比例因子1027 和 1034要分別存放在機器的某個存儲單元中,以便以后對計算結(jié)果按這個比例增大。顯然這要占用一定的存儲空間和運算時間。因此得到浮點表示法如下:2. 浮點數(shù)的表示方法浮點數(shù)的表示方法浮點表示法浮點表示法:把一個數(shù)的有效數(shù)字和數(shù)的范圍在計算機的一個存儲單元中分別予以表示,這種把數(shù)的范圍和精度分別表示的方法,相當(dāng)于數(shù)的小數(shù)點位置隨比例因子的不同而在一定范圍內(nèi)自由浮動,稱為浮點表示法。 任意一個十進(jìn)制數(shù) 可以寫成 10E. (2.3)同樣在計算機中一個任意進(jìn)制數(shù) 可以寫成 e. (2.4) :尾數(shù)尾數(shù),是一個純小數(shù)。 e :比例因子的指數(shù),稱為浮點數(shù)的指數(shù)指數(shù)

4、,是一個整數(shù)。 R :比例因子的基數(shù)基數(shù),對于二進(jìn)計數(shù)值的機器是一個常數(shù),一般規(guī)定 為2,8或16。 一個機器浮點數(shù)由階碼和尾數(shù)及其符號位組成(尾數(shù)尾數(shù):用定點小數(shù)表示,給出有效數(shù)字的位數(shù)決定了浮點數(shù)的表示精度;階碼階碼:用整數(shù)形式表示,指明小數(shù)點在數(shù)據(jù)中的位置,決定了浮點數(shù)的表示范圍。): 32位浮點數(shù)的IEEE754標(biāo)準(zhǔn)格式為:64位浮點數(shù)的IEEE754標(biāo)準(zhǔn)格式為:在IEEE754標(biāo)準(zhǔn)格式表示的32位浮點數(shù)中, :浮點數(shù)的符號位,1 位, 0表示正數(shù),1表示負(fù)數(shù)。 :尾數(shù),23位,用小數(shù)表示, 小數(shù)點放在尾數(shù)域的最前面。 :階碼,8 位階符采用隱含方式, 即采用移碼方式來表示正負(fù)指數(shù)。

5、移碼方法對兩個指數(shù)大小的比較和對階操作都比較方便,因為階碼域值大者其指數(shù)值也大。采用這種方式時,將浮點數(shù)的指數(shù)真值e 變成階碼 時,應(yīng)將指數(shù) e 加上一個固定的偏移值127(01111111),即 e127. IEEE754 標(biāo)準(zhǔn)中,一個規(guī)格化規(guī)格化的32位浮點數(shù)的真值可表示為 (1)s(1.)2127 e127 一個規(guī)格化的64位浮點數(shù)的真值為 (1)s(1.)21023 e1023 為提高數(shù)據(jù)的表示精度,當(dāng)尾數(shù)的值不為 0 時,尾數(shù)域的最高有效位應(yīng)為1,否則以修改階碼同時左右移小數(shù)點的辦法,使其變成這一表示形式,這稱為浮點數(shù)的規(guī)格化表示規(guī)格化表示。 當(dāng)浮點數(shù)的尾數(shù)為 0,不論其階碼為何值,

6、或者當(dāng)階碼階碼的值遇到比它能表示的最小值還小時,不管其尾數(shù)為何值,計算機都把該浮點數(shù)看成零值,稱為機器零機器零。 當(dāng)階碼E 為全0且尾數(shù)M 也為全0時,表示的真值x 為零,結(jié)合符號位S 為0或1,有正零和負(fù)零之分。當(dāng)階碼E 為全1且尾數(shù)M 為全0時,表示的真值x 為無窮大,結(jié)合符號位S 為0或1,也有+和-之分。這樣在32位浮點數(shù)表示中,要除去E 用全0和全1(255)10表示零和無窮大的特殊情況,指數(shù)的偏移值不選128(10000000),而選127(01111111)。對于規(guī)格化浮點數(shù),E 的范圍變?yōu)?到254,真正的指數(shù)值e 則為-126到+127。因此32位浮點數(shù)表示的絕對值的范圍是1

7、0-381038(以10的冪表示)。 浮點數(shù)所表示的范圍遠(yuǎn)比定點數(shù)大。一臺計算機中究竟采用定點表示還是浮點表示,要根據(jù)計算機的使用條件來確定。一般在高檔微機以上的計算機中同時采用定點、浮點表示,由使用者進(jìn)行選擇,而單片機中多采用定點表示。 例例1 若浮點數(shù)的754標(biāo)準(zhǔn)存儲格式為 (41360000)16,求其浮點數(shù)的十進(jìn)制數(shù)值。例例2 將(20.59375)10轉(zhuǎn)換成754標(biāo)準(zhǔn)的32位浮點 數(shù)的二進(jìn)制存儲格式。 例例1 若浮點數(shù)的754標(biāo)準(zhǔn)存儲格式為 (41360000)16,求其浮點數(shù)的十進(jìn)制數(shù)值。解解: 將十六進(jìn)制數(shù)展開后,可得二進(jìn)制數(shù)格式為 指數(shù)e階碼127100000100111111

8、100000011=(3)10包括隱藏位1的尾數(shù) 1.M1.011 0110 0000 0000 0000 00001.011011 于是有 (1)s1.M2e (1.011011)231011.011(11.375)10 例例2 將(20.59375)10轉(zhuǎn)換成754標(biāo)準(zhǔn)的32位浮點 數(shù)的二進(jìn)制存儲格式。 解解: 首先分別將整數(shù)和分?jǐn)?shù)部分轉(zhuǎn)換成二進(jìn)制數(shù): 20.5937510100.10011 然后移動小數(shù)點,使其在第1,2位之間 10100.100111.01001001124e4于是得到: S0, E4127131, M010010011最后得到32位浮點數(shù)的二進(jìn)制存儲格式為: 0100

9、 0001 1010 0100 1100 0000 0000 0000(41A4C000)16 3. 十進(jìn)制數(shù)十進(jìn)制數(shù)串串的表示方法的表示方法 目前,大多數(shù)通用性較強的計算機都能直接處理十進(jìn)制形式表示的數(shù)據(jù)。十進(jìn)制數(shù)串在計算機內(nèi)主要有兩種表示形式: (1) 字符串形式字符串形式:一個字節(jié)存放一個十進(jìn)制的數(shù)位或符號位。為了指明這樣一個數(shù),需要給出該數(shù)在主存中的起始地址和位數(shù)(串的長度)。 (2) 壓縮的十進(jìn)制數(shù)串形式壓縮的十進(jìn)制數(shù)串形式:一個字節(jié)存放兩個十進(jìn)制的數(shù)位。它比前一種形式節(jié)省存儲空間,又便于直接完成十進(jìn)制數(shù)的算術(shù)運算,是廣泛采用的較為理想的方法。4. 自定義數(shù)據(jù)表示自定義數(shù)據(jù)表示 在傳

10、統(tǒng)的計算機體系結(jié)構(gòu)中,用指令本身來說明操作數(shù)據(jù)的類型。如定點加法表示操作數(shù)是純小數(shù)或純整數(shù);浮點加法表示操作數(shù)是浮點數(shù);十進(jìn)制加法表示操作數(shù)是BCD數(shù)。由于操作數(shù)據(jù)類型不同,要設(shè)三種不同的指令(操作碼)來加以區(qū)分。 自定義數(shù)據(jù)表示則用數(shù)據(jù)本身來說明數(shù)據(jù)類型。表示形式有兩種,即標(biāo)志符數(shù)據(jù)表示標(biāo)志符數(shù)據(jù)表示和描述符數(shù)據(jù)表示描述符數(shù)據(jù)表示。描述符數(shù)據(jù)表示主要用來描述多維結(jié)構(gòu)的數(shù)據(jù)類型,如向量、矩陣、記錄等。描述符標(biāo)志位部分指明這是一個數(shù)據(jù)描述符;特征標(biāo)記部分指明數(shù)據(jù)的各種特征;長度部分指明數(shù)組中元素個數(shù);起始地址部分指明數(shù)據(jù)塊的首地址。其格式為:標(biāo)志符數(shù)據(jù)表示要求對每一個數(shù)據(jù)都附加標(biāo)志符。其指明后面

11、的數(shù)據(jù)所具有的類型,如整數(shù)、浮點數(shù)、BCD數(shù)、字符串等,其格式如下: 標(biāo)識符 數(shù)據(jù)描述符標(biāo)志位 特征標(biāo)記 數(shù)據(jù)塊長度 數(shù)據(jù)塊起始地址2.1.2 數(shù)的機器碼表示數(shù)的機器碼表示 在計算機中對數(shù)據(jù)進(jìn)行運算操作時,為了妥善的處理好符號位問題,就產(chǎn)生了把符號位和數(shù)字位一起編碼來表示相應(yīng)的數(shù)的各種表示方法,如原碼、補碼、反碼、移碼等。為了區(qū)別一般書寫表示的數(shù)和機器中這些編碼表示的數(shù),通常將前者稱為真值,后者稱為機器數(shù)或機器碼。 常用的機器碼表示法: 1. 原碼表示法 2. 補碼表示法 3. 反碼表示法 4. 移碼表示法1. 原碼表示法原碼表示法 若定點小數(shù)的原碼形式為0 .12n ,則原碼表示的定義是:

12、10 原 11| 01 式中原是機器數(shù),是真值 若定點整數(shù)的原碼形式為0 12n ,則原碼表示的定義是 2n0 原 2n2n| 02n 對于0,原碼機器中往往有“+0”、“-0”之分,故有兩種形式: +0原 = 0.000.0 -0原 = 1.000.0 采用原碼表示法簡單易懂,但它的最大缺點是加法運算復(fù)雜。這是因為,當(dāng)兩數(shù)相加時,如果是同號則數(shù)值相加;如果是異號,則要進(jìn)行減法。而在進(jìn)行減法時還要比較絕對值的大小,然后大數(shù)減去小數(shù),最后還要給結(jié)果選擇符號。為了解決這些矛盾,人們找到了補碼表示法。 2. 補碼表示法補碼表示法 我們先以鐘表對時為例說明補碼的概念。假設(shè)現(xiàn)在的標(biāo)準(zhǔn)時間為4點正; 而有

13、一只表已經(jīng)7點了,為了校準(zhǔn)時間,可以采用兩種方法:一是將時針退 7-4=3 格;一是將時針向前撥12-3=9格。這兩種方法都能對準(zhǔn)到4點,由此可以看出,減3和加9是等價的,就是說9是(-3)對12的補碼,可以用數(shù)學(xué)公式表示: -3+9 (mod12)mod12的意思就是12模數(shù),這個“?!北硎颈粊G掉的數(shù)值。上式在數(shù)學(xué)上稱為同余式。上例中其所以7-3和7+9(mod12)等價,原因就是表指針超過12時,將12自動丟掉,最后得到16-12=4。從這里可以得到一個啟示,就是負(fù)數(shù)用補碼表示時,可以把減法轉(zhuǎn)化為加法。這樣,在計算機中實現(xiàn)起來就比較方便。 7 3 = 4 7 + 9 = 4 以12取模數(shù)(

14、mod12) -3 = +9 (mod12) 采用補碼表示法進(jìn)行減法運算就比原碼方便得多了。因為不論數(shù)是正還是負(fù),機器總是做加法,減法運算可變?yōu)榧臃ㄟ\算。關(guān)鍵是我們需要換算出兩個操作數(shù)的補碼表示。 若定點小數(shù)補碼形式為0 .12n ,則補碼表示的定義是: 10 補 22| 01 (mod 2) 若定點整數(shù)補碼形式為0 12n ,則補碼表示的定義是: 2n0 補 2n+1+2n+1| 02n (mod 2n1) 根據(jù)補碼定義,求負(fù)數(shù)的補碼要從2減去|x|。為了用加法代替減法,結(jié)果還得在求補碼時作一次減法,這顯然是不方便的。下面介紹的反碼表示法可以解決負(fù)數(shù)的求補問題。3. 反碼表示法反碼表示法 所

15、謂反碼,就是二進(jìn)制的各位數(shù)碼0變?yōu)?,1變?yōu)?。也就是說,若Xi=1,則反碼為xi=0;若xi=0,則反碼xi=1。數(shù)值上面的一橫表示反碼的意思。在計算機中用觸發(fā)器寄存數(shù)碼,若觸發(fā)器Q端輸出表示原碼,則其Q端輸出就是反碼。由此可知,反碼是容易得到的。 若定點小數(shù)反碼形式為0 .12n ,則反碼表示的定義是: 10 反 (22-n) 01一般情況下,對正數(shù)和負(fù)數(shù)的值,0.12n,則反0.12n0.12n,則反1.12n 若定點整數(shù)反碼形式為0 12n ,則反碼表示的定義是: 2n0 反 (2n+11) 02n我們比較反碼與補碼的公式,對于負(fù)數(shù)有: 定點小數(shù) 反(22n) 補2 可得到 補反2n

16、定點整數(shù) 反 (2n+11) 補 2n+1+ 可得到 補反1 這就是通過反碼求補碼的重要公式。這個公式告訴我們,若要一個負(fù)數(shù)變補碼,其方法是符號位置1,其余各位0變1,1變0,然后在最末位(2-n)上加1。4. 移碼表示法移碼表示法移碼通常用于表示浮點數(shù)的階碼。由于階碼是個n位的整數(shù),假定定點整數(shù)移碼形式為 012n時,對定點整數(shù)移碼的傳統(tǒng)定義是: 移2n 2n2n 若階碼數(shù)值部分為5位,以表示真值,則: 移25 25 25 小結(jié):小結(jié):上面的數(shù)據(jù)四種機器表示法中,移碼表示法主要用于表示浮點數(shù)的階碼。由于補碼表示對加減法運算十分方便,因此目前機器中廣泛采用補碼表示法。在這類機器中,數(shù)用補碼表示

17、,補碼存儲,補碼運算。也有些機器,數(shù)用原碼進(jìn)行存儲和傳送,運算時改用補碼。還有些機器在做加減法時用補碼運算,在做乘除法時用原碼運算。 例例5設(shè)機器字長16位,定點表示,尾數(shù)15位,數(shù)符1位,問: (1)定點原碼整數(shù)表示時,最大正數(shù)是多少?最小負(fù)數(shù)是多少? (2)定點原碼小數(shù)表示時,最大正數(shù)是多少?最小負(fù)數(shù)是多少?; 解解: (1)定點原碼整數(shù)表示 最大正數(shù)值(2151)10(32767)10 最小負(fù)數(shù)值(2151)10(32767)10 (2)定點原碼小數(shù)表示 最大正數(shù)值(1215)10(0.111.11)2 最小負(fù)數(shù)值(1215)10(0.111.11)2 0 111 111 111 111

18、 1111 111 111 111 111 111例例6假設(shè)由S,E,M三個域組成的一個32位二進(jìn)制數(shù)所表示的非零規(guī)格化浮點數(shù),真值表示為: (1)s(1.M)2E128問:它所表示的規(guī)格化的最大正數(shù)、最小正數(shù)、最大負(fù)數(shù)、最小負(fù)數(shù)是多少? 解解: (1)最大正數(shù) 1(12-23)2127 (2)最小正數(shù) 1.02128 (3)最小負(fù)數(shù) 1(1223)2127 (4)最大負(fù)數(shù) 1.02128 0 11 111 111111 111 111 111 111 111 111 110 00 000 000000 000 000 000 000 000 000 001 11 111 111111 111

19、 111 111 111 111 111 111 00 000 000000 000 000 000 000 000 000 00例例7 若機器使用8位表示定點數(shù),將數(shù) x100/100,y0.59375/0.59375分別轉(zhuǎn)換為各種機器碼形式。 解解:已知數(shù)據(jù)位數(shù)為8位,最高位為符號位,數(shù)據(jù)表示范圍可用7位,那么定點整數(shù)的范圍是: 0|127 ( 271)定點小數(shù)的范圍是: 0|0.9921875 (127 ) (100)10 = (1100100)2 (0.59375)10 = (0.10011)2+1100100原 = 01100100 -1100100原 = 11100100 +110

20、0100反 = 01100100 -1100100反 = 10011011+1100100補 = 01100100 -1100100補 = 10011100+ 0.10011原 = 01001100 - 0.10011原 = 11001100+ 0.10011反 = 01001100 - 0.10011反 = 10110011+ 0.10011補 = 01001100 - 0.10011補 = 101101002.1.3 字符與字符串的表示方法字符與字符串的表示方法1. 字符的表示方法字符的表示方法現(xiàn)代計算機不僅處理數(shù)值領(lǐng)域的問題,而且處理大量非數(shù)值領(lǐng)域的問題。這樣一來,必然要引入文字、字母以

21、及某些專用符號,以便表示文字語言、邏輯語言等信息。目前國際上普遍采用的字符系統(tǒng)是七單位的ASCII碼(美國國家信息交換標(biāo)準(zhǔn)字符碼),它包括10個十進(jìn)制數(shù)碼,26個英文字母和一定數(shù)量的專用符號,如$, %, , 等,共128個元素,因此二進(jìn)制編碼需7位,加一位偶校驗位,共8位一個字節(jié)。參見書中表2.1的ASCII碼字符編碼表。 2. 字符串字符串 字符串字符串是指連續(xù)的一串字符,通常方式下,它們占用主存中連續(xù)的多個字節(jié),每個字節(jié)存一個字符。當(dāng)主存字由2個或4個字節(jié)組成時,在同一個主存字中,既可按從低位字節(jié)向高位字節(jié)的順序存放字符串的內(nèi)容,也可按從高位字節(jié)向低位字節(jié)的次序順序存放字符串的內(nèi)容。例例

22、 將下面字符串從高位字節(jié)到低位字節(jié)依次存在主存中。 IFABTHENREAD(C)2.1.4 漢字的表示方法漢字的表示方法1. 漢字的輸入編碼漢字的輸入編碼 當(dāng)前采用的方法主要有以下三類: 數(shù)字編碼數(shù)字編碼 常用的是國標(biāo)區(qū)位碼,用數(shù)字串代表一個漢字輸入。區(qū)位碼是將國家標(biāo)準(zhǔn)局公布的6763個兩級漢字分為94個區(qū),每個區(qū)分94位,實際上把漢字表示成二維數(shù)組,每個漢字在數(shù)組中的下標(biāo)就是區(qū)位碼。區(qū)碼和位碼各兩位十進(jìn)制數(shù)字,因此輸入一個漢字需按鍵四次。數(shù)字編碼輸入的優(yōu)點是無重碼,且輸入碼與內(nèi)部編碼的轉(zhuǎn)換比較方便,缺點是代碼難以記憶。 拼音碼拼音碼 拼音碼是以漢字拼音為基礎(chǔ)的輸入方法。使用簡單方便,但漢字

23、同音字太多,輸入重碼率很高,同音字選擇影響了輸入速度。 字形編碼字形編碼 字形編碼是用漢字的形狀來進(jìn)行的編碼。把漢字的筆劃部件用字母或數(shù)字進(jìn)行編碼,按筆劃的順序依次輸入,就能表示一個漢字。2.漢字內(nèi)碼漢字內(nèi)碼漢字內(nèi)碼漢字內(nèi)碼是用于漢字信息的存儲、交換、檢索等操作的機內(nèi)代碼,一般采用兩個字節(jié)表示。英文字符的機內(nèi)代碼是七位的ASCII碼,當(dāng)用一個字節(jié)表示時,最高位為“0”。為了與英文字符能相互區(qū)別,漢字機內(nèi)代碼中兩個字節(jié)的最高位均規(guī)定為“1”。注意:注意:有些系統(tǒng)中字節(jié)的最高位用于奇偶校驗位,這種情況下用三個字節(jié)表示漢字內(nèi)碼。 3. 漢字字模碼漢字字模碼字模碼字模碼是用點陣表示的漢字字形代碼,它是

24、漢字的輸出形式。字模點陣只能用來構(gòu)成漢字庫漢字庫,用于漢字的顯示輸出或打印輸出。 注意,漢字的輸入編碼、漢字內(nèi)碼、字模碼是計算機中用于輸入、內(nèi)部處理、輸出三種不同 用途的編碼,不要混為一談。 圖2.1漢字的字模點陣及編碼 2.1.5 校驗碼校驗碼 元件故障/噪聲干擾等各種因素常導(dǎo)致計算機在處理信息過程中出現(xiàn)錯誤。為了防止錯誤 可將信號采用專門的邏輯線路進(jìn)行編碼以檢測錯誤,甚至校正錯誤。通常的方法是在每個字上添加一些校驗位,用來確定字中出現(xiàn)錯誤的位置。最簡單且應(yīng)用廣泛的檢錯碼是采用一位校驗位的奇校驗奇校驗或偶校驗偶校驗。 設(shè)(01n-1)是一個n位字, 則奇校驗位奇校驗位定義為 C01 n-1

25、同理偶校驗位偶校驗位定義為 C01 n-12.2 定點加法、減法運算2.2.1 補碼加法補碼加法 負(fù)數(shù)用補碼表示后,可以和正數(shù)一樣來處理。這樣,運算器里只需要一個加法器就可以了,不必為了負(fù)數(shù)的加法運算,再配一個減法器。補碼加法的公式是 補補補 (mod 2) 現(xiàn)分四種情況來證明。假設(shè)采用定點小數(shù)表示,因此證明的先決條件是 1, 1, 1。(1)0,0,則0。 相加兩數(shù)都是正數(shù),故其和也一定是正數(shù)。正數(shù)的補碼和原碼是一樣的,可得: 補補補 (mod 2) (2)0,0,則0或0時,2 () 2,進(jìn)位2必丟失,又因()0,故補補補 (mod 2)當(dāng)0時,2 () 2,又因()0,故補補2()補 (

26、mod 2)(3)0,則0或 0。這種情況等同于第2種情況。 (4)0,0,則0。 相加兩數(shù)都是負(fù)數(shù),則其和也一定是負(fù)數(shù)。補2,補2補補222(2)上式右邊分為”2”和(2)兩部分.既然()是負(fù)數(shù),而其絕對值又小于1,那么(2)就一定是小于2而大于1的數(shù),進(jìn)位”2”必丟失.又因()0, 所以補補2()補(mod 2)至此我們證明了,在模2意義下,任意兩數(shù)的補碼之和等于該兩數(shù)之和的補碼.這是補碼加法的理論基礎(chǔ),其結(jié)論也適用于定點整數(shù)。例例8 0.1001,0.0101, 用補碼求解解: 補0.1001, 補0.0101 補0.1001 補0.0101 補0.1110 所以0.1110 例例990

27、.1011,0.0101, 用補碼求。解解: 補0.1011,補1.1011 補0.1011 補1.1011 補 10.0110 所以0.0110 由以上兩例看到,補碼加法的特點,一是符號位要作為數(shù)的一部分一起參加運算,二是要在模2的意義下相加,即超過2的進(jìn)位要丟掉。 2.2.2 補碼減法補碼減法 負(fù)數(shù)的減法運算也要設(shè)法化為加法來做,其所以使用這種方法而不使用直接減法,是因為它可以和常規(guī)的加法運算使用同一加法器電路,從而簡化了計算機的設(shè)計。數(shù)用補碼表示時,減法運算的公式為 補補補補-補 只要證明補補,上式即得證。現(xiàn)證明如下:補補補 (mod 2)補補補 (2.19a)補()補補補補 補補 (2

28、.19a)將式(2.19a)與(2.19b)相加,得補補補補補補 補補補 補補補0故 補補 (mod 2) 從補求補的法則是:對補包括符號位“求反且最末位加1”,即可得到補。寫成運算表達(dá)式,則為補補2n(2.21) 其中符號表示對補作包括符號位在內(nèi)的求反操作,2n表示最末位的1例例10 已知10.1110,20.1101, 求:1補,1補,2補,2補。解解:1補 1.0010 1補 1補2-4 0.11010.00010.11102補 0.11012補 2補2-4 1.00100.00011.0011例例11 0.1101,0.0110,求。解解:補0.1101補0.0110 補1.1010

29、補 0.1101 補 1.1010 補 10.0111 所以0.01112.2.3 溢出概念與檢測方法溢出概念與檢測方法在定點小數(shù)機器中,數(shù)的表示范圍為|1. 在運算過程中如出現(xiàn)大于1的現(xiàn)象,稱為“溢出”。在定點機中,正常情況下溢出是不允許的。 兩個正數(shù)相加,結(jié)果大于機器所能表示的最大正數(shù),稱為上溢上溢。而兩個負(fù)數(shù)相加,結(jié)果小于機器所能表示的最小負(fù)數(shù),稱為下溢下溢。機器定點小數(shù)表示例例12 0.1011,0.1001,求。解解:補0.1011 補0.1001 補0.1011 補0.1001 補1.0100 兩個正數(shù)相加的結(jié)果成為負(fù)數(shù),這顯然是錯誤的。例例13 0.1101,0.1011,求。解

30、解:補1.0011 補1.0101 補 1.0011 補1.0101 補0.1000兩個負(fù)數(shù)相加的結(jié)果成為正數(shù),這同樣是錯誤的。 為了判斷“溢出”是否發(fā)生,可采用兩種檢測的方法。第一種方法是采用雙符號位法,這稱為“變形補碼”或“模4補碼”,從而可使模2補碼所能表示的數(shù)的范圍擴大一倍。 第二種溢出檢測方法是采用單符號位法。從上例中看到,當(dāng)最高有效位產(chǎn)生進(jìn)位而符號位無進(jìn)位時,產(chǎn)生上溢;當(dāng)最高有效位無進(jìn)位而符號位有進(jìn)位時,產(chǎn)生下溢。 在定點機中當(dāng)運算結(jié)果發(fā)生溢出時,機器通過邏輯電路自動檢查出溢出,并進(jìn)行中斷處理。2.2.4 基本的二進(jìn)制加法基本的二進(jìn)制加法/減法器減法器 首先我們來討論最簡單的一位全

31、加器的結(jié)構(gòu),設(shè)定兩個二進(jìn)制數(shù)字Ai,Bi和一個進(jìn)位輸入Ci 相加,產(chǎn)生一個和輸出Si ,以及一個進(jìn)位輸出Ci1。 Ai Bi Ci Ci1 Si 下表列出一位全加器進(jìn)行加法運算的輸入輸出真值表。 輸入 輸出Ai Bi CiSi Ci10000000110010100110110010101011100111111表表2.2 一位全加器真值表一位全加器真值表 根據(jù)表2.2所示的真值表,三個輸入端和兩個輸入端可按如下邏輯方程進(jìn)行聯(lián)系: Si Ai Bi Ci Ci1 AiBiBiCiCiAi 按此表達(dá)式組成的一位全加器下圖示2.2(a)。 由上圖看到,n個1位的全加器(FA)可級聯(lián)成一個n位的行波

32、進(jìn)位加減器。M為方式控制輸入線,當(dāng)M0時,作加法(AB)運算;當(dāng)M1時,作減法(AB)運算,在后一種情況下,AB運算轉(zhuǎn)化成A補B補運算,求補過程由B1來實現(xiàn)。因此圖中最右邊的全加器的起始進(jìn)位輸入端被連接到功能方式線M上,作減法時M1,相當(dāng)于在加法器的最低位上加1。另外圖中左邊還表示出單符號位法的溢出檢測邏輯;當(dāng)CnCn1時,運算無溢出;而當(dāng)CnCn1時,運算有溢出,經(jīng)異或門產(chǎn)生溢出信號。 對一位全加器(FA)來說,Si的時間延遲為6T(每級異或門延遲3T),Ci1的時間延遲為5T,其中T被定義為相應(yīng)于單級邏輯電路的單位門延遲。T通常采用一個“與非”門或一個“或非”門的時間延遲來作為度量單位。

33、現(xiàn)在我們計算一個n位的行波進(jìn)位加法器的時間延遲。假如采用圖2.2(a)所示的一位全加器并考慮溢出檢測,那么n位行波進(jìn)位加法器的延遲時間ta為 tan2T9T(2n9)T9T為最低位上的兩極“異或”門再加上溢出“異或”門的總時間,2T為每級進(jìn)位鏈的延遲時間。 當(dāng)不考慮溢出檢測時,有 ta(n-1)2T9Tta意味著加法器的輸入端輸入加數(shù)和被加數(shù)后,在最壞情況下加法器輸出端得到穩(wěn)定的求和輸出所需的最長時間。顯然這個時間越小越好。注意,加數(shù)、被加數(shù)、進(jìn)位與和數(shù)都是用電平來表示的,因此,所謂穩(wěn)定的求和輸出,就是指穩(wěn)定的電平輸出。 注意:第一種情況下,是最低的兩個異或門加上溢出的異或門共3*3T;第二種

34、情況下,是最低的兩個異或門加上最后一個FA的輸出異或門共3*3T。2.2.5 十進(jìn)制加法器十進(jìn)制加法器 十進(jìn)制加法器可由BCD碼(二十進(jìn)制碼)來設(shè)計,它可以在二進(jìn)制加法器的基礎(chǔ)上加上適當(dāng)?shù)?校正校正 邏輯來實現(xiàn),該校正邏輯可將二進(jìn)制的 和和 改變成所要求的十進(jìn)制格式。 n位BCD碼行波式進(jìn)位加法器的一般結(jié)構(gòu)如下圖2.3(a)所示,它由n級組成,每一級將一對4位的BCD數(shù)字相加,并通過一位進(jìn)位線與其相鄰級連接。而每一位十進(jìn)制數(shù)字的BCD加法器單元的邏輯結(jié)構(gòu)示于圖2.3(b)。 在十進(jìn)制運算時,當(dāng)相加二數(shù)之和大于9時,便產(chǎn)生進(jìn)位??墒怯肂CD碼完成十進(jìn)制數(shù)運算時,當(dāng)和數(shù)大于9時,必須對和數(shù)進(jìn)行加6

35、修正。這是因為,采用BCD碼后,在二數(shù)相加的和數(shù)小于等于9時,十進(jìn)制運算的結(jié)果是正確的;而當(dāng)相加的和數(shù)大于9時,結(jié)果不正確,必須加6修正后才能得出正確的結(jié)果。2.3 定點乘法運算 2.3.1 原碼乘法原碼乘法 1. 人工算法與機器算法的同異性人工算法與機器算法的同異性 設(shè)0.1101, 0.1011. 下面讓我們先用習(xí)慣方法求其乘積,其過程如下: 上述的運算過程與十進(jìn)制乘法相似:從乘數(shù)的最低位開始,若這一位為“1”,則將被乘數(shù)寫下;若這一位為“0”,則寫下全0。然后在對乘數(shù)的次高位進(jìn)行乘法運算,其規(guī)則同上,不過這一位乘數(shù)的權(quán)與最低位乘數(shù)的權(quán)不一樣,因此被乘數(shù)要左移一位。以此類推直到乘數(shù)個位乘完

36、為止,最后將它們統(tǒng)統(tǒng)加起來便得到最后乘積。同理,如果被乘數(shù)和乘數(shù)用定點整數(shù)表示,我們也會得到同樣的結(jié)果。 數(shù)值部分的運算方法與普通的十進(jìn)制小數(shù)乘法類似,不過對于用二進(jìn)制表達(dá)式的數(shù)來說,其乘法規(guī)則更為簡單一些。 在定點計算機中,兩個原碼表示的數(shù)相乘的運算規(guī)則是: 乘積的符號位由兩數(shù)的符號位按異或運算得到,而乘積的數(shù)值部分則是兩個正數(shù)相乘之積。 設(shè)n位被乘數(shù)和乘數(shù)用定點小數(shù)表示 被乘數(shù) 原f .n110 乘數(shù) 原f .n110則兩數(shù)的乘積 原(ff) (0.n110)(0.n110) 式中,f為被乘數(shù)符號,f為乘數(shù)符號。 人們習(xí)慣的算法對機器并不完全適用。原因之一,機器通常只有n位長,兩個n位數(shù)相

37、乘,乘積可能為2n位。原因之二,只有兩個操作數(shù)相加的加法器難以勝任將n各位積一次相加起來的運算。早期計算機中為了簡化硬件結(jié)構(gòu),采用串行的1位乘法方案,即多次執(zhí)行“加法移位”操作來實現(xiàn)。這種方法并不需要很多器件。然而串行方法畢竟太慢,自從大規(guī)模集成電路問世以來,出現(xiàn)了各種形式的流水式陣列乘法器,它們屬于并行乘法器。2. 不帶符號的陣列乘法器不帶符號的陣列乘法器設(shè)有兩個不帶符號的二進(jìn)制整數(shù): Aam1a1a0 Bbn1b1b0 它們的數(shù)值分別為a和b,即 m1n1 a ai2i b bj2j i0 j0 在二進(jìn)制乘法中,被乘數(shù)A與乘數(shù)B相乘,產(chǎn)生mn位乘積P: Ppmn1p1p0乘積P 的數(shù)值為

38、實現(xiàn)這個乘法過程所需要的操作和人們的習(xí)慣方法非常類似: 上述過程說明了在m位乘n位不帶符號整數(shù)的陣列乘法中“加法移位”操作的被加數(shù)矩陣。每一個部分乘積項(位積)aibj叫做一個被加數(shù)。這 mn 個被加數(shù) aibj| 0im1 和 0jn1 可以用mn個“與”門并行地產(chǎn)生。由此說明設(shè)計高速并行乘法器的基本問題,就在于縮短被加數(shù)矩陣中每列所包含的1的加法時間。 下圖是一個55 ( mn)不帶符號的陣列乘法器的邏輯電路圖: 這種乘法器要實現(xiàn)n位n位時,需要n(n1)個全加器和n2個“與”門。該乘法器的總的乘法時間可以估算如下:令Ta為“與門”的傳輸延遲時間,Tf為全加器(FA)的進(jìn)位傳輸延遲時間,假

39、定用2級“與非”邏輯來實現(xiàn)FA的進(jìn)位鏈功能,那么我們就有: Ta Tf 2T從上圖可知,最壞情況下延遲途徑,即是沿著矩陣最右邊的對角線和最下面的一行。因而得n位n位不帶符號的陣列乘法器總的乘法時間為: tmTa(n1)6T( n1)Tf 2T(n1)6T(n1)2T (8n6)T例例16 已知兩個不帶符號的二進(jìn)制整數(shù)A 11011,B 10101,求每一部分乘積項aibj的值與p9p8p0的值。解解:Pp9p8p7p6p5p4p3p2p1p01000110111 (56710)a4b01 a3b01 a2b00 a1b01 a0b01a4b10 a3b10 a2b10 a1b10 a0b10a

40、4b21 a3b21 a2b20 a1b21 a0b20a4b30 a3b30 a2b30 a1b30 a0b30a4b41 a3b41 a2b40 a1b41 a0b413. 帶符號的陣列乘法器帶符號的陣列乘法器(1) 對2求補器電路我們先來看看算術(shù)運算部件設(shè)計中經(jīng)常用到的求補電路。下圖示出一個具有使能控制的二進(jìn)制對2求補器電路,其邏輯表達(dá)式如下: C10, CiaiCi1 ai*aiECi1,0in 在對2求補時,要采用按位掃描技術(shù)來執(zhí)行所需要的求補操作。令A(yù)ana1a0是給定的(n1)為帶符號的數(shù),要求確定它的補碼形式。進(jìn)行求補的方法就是從數(shù)的最右端a0開始,由右向左,直到找出第一個“1

41、”,例如 ai1,0in。這樣,ai以左的每一個輸入位都求反,即1變0,0變1。最右端的起始鏈?zhǔn)捷斎隒1必須永遠(yuǎn)置成“0”。當(dāng)控制信號線E為“1”時,啟動對2求補的操作。當(dāng)控制信號線E為“0”時,輸出將和輸入相等。顯然,我們可以利用符號位來作為控制信號。例如,在一個4位的對2求補器中,如果輸入數(shù)為1010,那么輸出數(shù)應(yīng)是0110,其中從右算起的第2位,就是所遇到的第一個“1”的位置。 用這種對2求補器來轉(zhuǎn)換一個(n1)位帶符號的數(shù),所需的總時間延遲為 tTCn2T5T(2n5)T 其中每個掃描級需2T延遲,而5T則是由于“與”門和“異或”門引起的。(2) 帶符號的陣列乘法器下圖是(n1)(n1

42、)位帶求補器的陣列乘法器邏輯方框圖。通常,把包括這些求補級的乘法器又稱為符號求補的陣列乘法器。在這種邏輯結(jié)構(gòu)中,共使用三個求補器。其中兩個算前求補器的作用是:將兩個操作數(shù)A和B在被不帶符號的乘法陣列(核心部件)相乘以前,先變成正整數(shù)。而算后求補器的作用則是:當(dāng)兩個輸入操作數(shù)的符號不一致時,把運算結(jié)果變成帶符號的數(shù)。 上面所示的帶求補級的陣列乘法器既適用于原碼乘法,也適用于間接的補碼乘法。不過在原碼乘法中,算前求補和算后求補都不需要,因為輸入數(shù)據(jù)都是立即可用的。而間接的補碼陣列乘法卻需要增加三個硬件求補器。為了完成所必需的求與乘法操作,時間大約比原碼陣列乘法增加1倍。 實際上我們可以看到帶符號的

43、陣列乘法器其內(nèi)部仍是一個基本的源碼陣列乘法器,只是對輸入的補碼數(shù)據(jù)在乘前進(jìn)行了值還原,同時在乘后再次將乘積數(shù)轉(zhuǎn)換為補碼形式輸出。 例例17 設(shè)15,13,用帶求補器的原碼陣列乘法器求出乘積?解解: 設(shè)最高位為符號位,則輸入數(shù)據(jù)為 補 01111 補 10011 符號位單獨考慮,經(jīng)過算前求補級后 |1111, |1101算后經(jīng)求補級輸出并加上乘積符號位1, 乘積的補碼值為 100111101。 則原碼乘積值為 111000011。 換算成二進(jìn)制數(shù)真值是 ( 11000011)2=(-195)10 十進(jìn)制數(shù)驗證: 15 (13) 195相等。2.3.2 補碼乘法補碼乘法1. 補碼與真值的轉(zhuǎn)換公式補

44、碼與真值的轉(zhuǎn)換公式 補碼乘法因符號位參與運算,可以完成補碼數(shù)的“直接”乘法,而不需要求補級。這種直接的方法排除了較慢的對2求補操作,因而大大加速了乘法過程。首先說明與直接的補碼乘法相聯(lián)系數(shù)學(xué)特征。對于計算補碼數(shù)的數(shù)值來說,一種較好的表示方法是使補碼的位置數(shù)由一個帶負(fù)權(quán)的符號和帶正權(quán)的系數(shù)。今考慮一個定點補碼整數(shù)N補an1an2a1a0,這里an1是符號位。根據(jù)N補的符號,補碼數(shù)N補和真值N的關(guān)系可以表示成: n2 ai2i 當(dāng)an1 0 (N補為正) N i0 n2 1(1ai)2i 當(dāng)an1 1 (N補為負(fù)) i0 如果我們把負(fù)權(quán)因數(shù)2n1強加到符號位an1上,那么就可以把上述方程組中的兩個

45、位置表達(dá)式合并成下面的統(tǒng)一形式: n2 N an12n1ai2i i=0 n2 N (1an1)2n1(1ai)2i +1 i0 2. 一般化的全加器形式一般化的全加器形式常規(guī)的一位全加器可假定它的3個輸入和2個輸出都是正權(quán)。這種加法器通過把正權(quán)或負(fù)權(quán)加到輸入/輸出端,可以歸納出四類加法單元。如下表,0類全加器沒有負(fù)權(quán)輸入;1類全加器有1個負(fù)權(quán)輸入和2個正權(quán)輸入;依次類推。對0類、3類全加器而言有:XYZZYXZYXZYXZYXS對1類、2類全加器,則有ZXZYXYCXYZZYXZYXZYXZYXSXZYZXYC表2.3 四類一般化全加器的名稱和邏輯符號 注意,0類和3類全加器是用同一對邏輯方

46、程來表征的,它和普通的一位全加器(0類)是一致的。這是因為3類全加器可以簡單地把0類全加器的所有輸入輸出值全部反向來得到,反之亦然。1類和2類全加器之間也能建立類似的關(guān)系。由于邏輯表達(dá)式具有兩級與-或形式,可以用“與或非”門來實現(xiàn),延遲時間為2T。3. 直接補碼陣列乘法器直接補碼陣列乘法器 利用混合型的全加器就可以構(gòu)成直接補碼數(shù)陣列乘法器。設(shè)被乘數(shù)A和乘數(shù)B是兩個5位的二進(jìn)制補碼數(shù),即 A(a4)a3a2a1a0 B(b4)a3a2a1a0它們具有帶負(fù)權(quán)的符號位a4和b4,并用括號標(biāo)注。如果我們用括號來標(biāo)注負(fù)的被加項,例如(aibJ),那么A和B相乘過程中所包含的操作步驟如下面矩陣所示: A

47、(a4) a3 a2 a1 a0 B (b4) b3 b2 b1 b0 (a4b0)a3b0a1b0a1b0a0b0 (a4b1) a3b1 a2b1a1b1a0b1 (a4b2) a3b2 a2b2 a1b2a0b2 (a4b3)a3b3 a2b3 a1b3 a0b3) a4b4 (a3b4) (a2b4) (a1b4) (a0b4) P p9 p8 p7 p6 p5 p4 p3 p2 p1 p000010011011122222222a0b0a1b0a3b0a2b0a0b1a1b1a3b1a2b1(a4b1)a0b2a1b2a3b2a2b2a0b3a1b3a3b3a2b3(a4b2)(a4

48、b3)a4b4(a4b0)(a3b4)(a2b4)(a1b4)(a0b4)圖2.8 5位乘5位的直接補碼陣列乘法器邏輯原理圖00000p9p8p7p4p1p3p2p5p6p0 上圖所示是5位乘5位的直接補碼陣列乘法器邏輯原理,其中使用不同的邏輯符號來代表0類、1類、2類、3類全加器。2類和1類全加器具有同樣的結(jié)構(gòu),但是使用不同的邏輯符號可使乘法陣列的線路圖容易理解。該實現(xiàn)方式稱為三段陣列乘法器,其中右上角的三角形中只用0類全加器,左上角的三角形只用1類全加器,陣列的最后兩行只用2類全加器。其中使用不同的邏輯符號來代表0類、1類、2類、3類全加器。2類和1類全加器具有同樣的結(jié)構(gòu),但是使用不同的邏

49、輯符號可使乘法陣列的線路圖容易理解。在n位乘n位的一般情況下,該乘法器需要(n2)2個0類全加器,(n2)個1類全加器,(2n3)個2類全加器,1個3類全加器,總共是n(n1)個全加器。 故所需的總乘法時間是: tp=Ta+2(n-1)Tf=2T+(2n-2)2T=(4n-2)T (2.31)例例20 設(shè)A補(01101)2, B補(11011)2, 求AB補?解解: (0) 1 1 0 1 13 ) (1) 1 0 1 1 5 (0) 1 1 0 1 (0) 1 1 0 1 (0) 0 0 0 0 (0) 1 1 0 1 0 (1) (1) (0) (1) 0 (1) 0 1 1 1 1 1

50、 1 (1) 1 0 1 1 1 1 1 1 65 擴展符號位 符號位驗證: 127026125124123122121120 128(32168421) 65(13)(5)652.4 定點除法運算2.4.1 原碼除法運算原理原碼除法運算原理 兩個原碼表示的數(shù)相除時,商的符號由兩數(shù)的符號按位相加求得,商的數(shù)值部分由兩數(shù)的數(shù)值部分相除求得。設(shè)有n位定點小數(shù)(定點整數(shù)也同樣適用):被除數(shù), 其原碼為 原f .n110除數(shù), 其原碼為 原f .n110 則有商q/,其原碼為q原(ff)+(0.n110/0.n110) 商的符號運算qfff與原碼乘法一樣,用模2求和得到。商的數(shù)值部分的運算,實質(zhì)上是兩

51、個正數(shù)求商的運算。根據(jù)我們所熟知的十進(jìn)制除法運算方法,很容易得到二進(jìn)制數(shù)的除法運算方法,所不同的只是在二進(jìn)制中,商的每一位不是“1”就是“0”,其運算法則更簡單一些。下面僅討論數(shù)值部分的運算。設(shè)被除數(shù)0.1001,除數(shù)0.1011,模仿十進(jìn)制除法運算,以手算方法求的過程如下:得的商q0.1101,余數(shù)為r0.00000001。上面的筆算過程可敘述如下: 1. 判斷是否小于?現(xiàn)在21, 表示夠減, 小數(shù) 點后第一位商“1”, 作r021, 得余數(shù)r1。 3. 比較r1和22, 因r122, 表示夠減, 小 數(shù)點后第二位商“1”, 作r122, 得余數(shù)r2。 4. 比較r2和23, 因r224,

52、表示夠減, 小數(shù) 點后第四2位商“1”, 作r324, 得余數(shù)r4, 共求四位商, 至此除法完畢。 在計算機中小數(shù)點是固定的,不能簡單地采用手算的辦法。為便于機器操作,使“除數(shù)右移”和“右移上商”的操作統(tǒng)一起來。事實上機器與人運算過程不同,人會心算一看就知道夠不夠減。但機器卻必須先作減法,若余數(shù)為正才知道夠減;若余數(shù)為負(fù)才知道不夠減。不夠減時必須恢復(fù)原來的余數(shù)以便再繼續(xù)往下運算。這種方法稱為恢復(fù)余數(shù)法恢復(fù)余數(shù)法。要恢復(fù)原來的余數(shù),只要當(dāng)前的余數(shù)加上除數(shù)即可。但由于要恢復(fù)余數(shù),使除法進(jìn)行過程的步數(shù)不固定,因此控制比較復(fù)雜。實際中常用不恢復(fù)余數(shù)法又稱加減交替法加減交替法。其特點是運算過程中如出現(xiàn)不

53、夠減則不必恢復(fù)余數(shù),根據(jù)余數(shù)符號,可以繼續(xù)往下運算,因此步數(shù)固定,控制簡單。早期計算機中,為了簡化結(jié)構(gòu),硬件除法器的設(shè)計采用串行的1位除法方案。即多次執(zhí)行“減法移位”操作來實現(xiàn),并使用計數(shù)器來控制移位次數(shù)。由于串行除法器速度太慢,目前已被淘汰。不恢復(fù)余數(shù)除法即加減交替法的實現(xiàn)方式:設(shè)被除數(shù)為: 除數(shù)為: 1. x y補 = x 補 + -y補 若:x y 0 則商數(shù)為1,并進(jìn)行第二步減, 即: x y補 ( 21 y) 若:x y 0 則商數(shù)為0,還原減法操作,在進(jìn)行第二步減, 即: x ( 21 y) 補 x 補 + - ( 21 y) 補 上面過程也就是: x y y ( 21 y) 補

54、x y 補 y ( 21 y) 補 x y 補 ( 21 y) 補 步驟2同理,從而用加減交替法實現(xiàn)除法操作。2.4.2 并行除法器并行除法器1. 可控加法可控加法/減法減法(CAS)單元單元 和陣列乘法器非常相似,陣列式除法器也是一種并行運算部件,采用大規(guī)模集成電路制造。與早期的串行除法器相比,陣列除法器不僅所需的控制線路少,而且能提供令人滿意的高速運算速度。陣列除法器有多種多樣形式,如不恢復(fù)余數(shù)陣列除法器,補碼陣列除法器等等。 先介紹可控加法/減法(CAS)單元,它將用于并行除法流水邏輯陣列中,它有四個輸出端和四個輸入端。當(dāng)輸入線P0時,CAS作加法運算;當(dāng)P1時,CAS作減法運算。邏輯結(jié)

55、構(gòu)圖: CAS單元的輸入與輸出的關(guān)系可用如下一組邏輯方程來表示: SiAi(BiP)Ci Ci1(AiCi)(BiP)AiCi (2.32) 當(dāng)P0時,方程式(2.32)就等于我們前面學(xué)習(xí)的一位全加器(FA)的公式: SiAiBiCi Ci1AiBiBiCiAiCi 當(dāng)P1時,則得求差公式: SiAiBiCi Ci1AiBiBiCiAiCi (2.33) 其中BiBi1。在減法情況下,輸入Ci稱為借位輸入,而Ci1稱為借位輸出。 為說明CAS單元的實際內(nèi)部電路實現(xiàn),將方程式(2.32)加以變換,可得如下形式: Si Ai(BiP)Ci AiBiCiPAiBiCiPAiBiCiPAiBiCiP

56、AiBiCiPAiBiCiPAiBiCiPAiBiCiP Ci1 (AiCi)(BiP)AiCi AiBiPAiBiPBiCiPBiCiPAiCi 在這兩個表達(dá)式中,每一個都能用一個三級組合邏輯電路(包括反向器)來實現(xiàn)。因此每一個基本的CAS單元的延遲時間為3T單元。2. 不恢復(fù)余數(shù)的陣列除法器不恢復(fù)余數(shù)的陣列除法器先假定所有被處理的數(shù)都是正的小數(shù)。 不恢復(fù)余數(shù)的除法也就是加減交替法。在不恢復(fù)余數(shù)的除法陣列中,每一行所執(zhí)行的操作究竟是加法還是減法,取決于前一行輸出的符號與被除數(shù)的符號是否一致。當(dāng)出現(xiàn)不夠減時,部分余數(shù)相對于被除數(shù)來說要改變符號。這時應(yīng)該產(chǎn)生一個商位“0”,除數(shù)首先沿對角線右移,

57、然后加到下一行的部分余數(shù)上。當(dāng)部分余數(shù)不改變它的符號時,即產(chǎn)生商位“1”,下一行的操作應(yīng)該是減法。下圖是4位除4位的不恢復(fù)余數(shù)陣列除法器的邏輯原理圖。其中被除數(shù)0.123456 (雙倍長)除數(shù)0.123商數(shù)0.q1q2q3余數(shù)0.00r3r4r5r6字長 n14 由上圖看出,該陣列除法器是用一個可控加法/減法(CAS)單元所組成的流水陣列來實現(xiàn)的。推廣到一般情況,一個(n1)位除(n1)位的加減交替除法陣列由(n1)2個CAS單元組成,其中兩個操作數(shù)(被除數(shù)與除數(shù))都是正的。 最上面一行所執(zhí)行的初始操作經(jīng)常是減法。因此最上面一行的控制線P固定置成“1”。減法是用2的補碼運算來實現(xiàn)的,這時右端各

58、CAS單元上的反饋線用作初始的進(jìn)位輸入。每一行最左邊的單元的進(jìn)位輸出決定著商的數(shù)值。將當(dāng)前的商反饋到下一行,我們就能確定下一行的操作。由于進(jìn)位輸出信號指示出當(dāng)前的部分余數(shù)的符號,因此,它將決定下一行的操作將進(jìn)行加法還是減法。 對不恢復(fù)余數(shù)陣列除法器來說,在進(jìn)行運算時,沿著每一行都有進(jìn)位(或借位)傳播,同時所有行在它們的進(jìn)位鏈上都是串行連接。而每個CAS單元的延遲時間為3T單元,因此,對一個2n位除以n位的不恢復(fù)余數(shù)陣列除法器來說,單元的數(shù)量為(n1)2,考慮最大情況下的信號延遲,其除法執(zhí)行時間為 td3(n1)2T 其中n為尾數(shù)位數(shù)。例例20 0.101001, 0.111, 求。解解:補1.

59、001被除數(shù)0.1 0 1 0 0 1減1.0 0 1 余數(shù)為負(fù)1.1 1 0 0 0 1 0q00余數(shù)左移1.1 0 0 0 1加0.1 1 1 余數(shù)為正0.0 1 1 0 1 0 q11余數(shù)左移0.1 1 0 1減1.0 0 1 余數(shù)為負(fù)1.1 1 1 1 0 q20余數(shù)左移1.1 1 1加0.1 1 1 余數(shù)為正0.1 1 0 0 q31故得 商 q q0.q1q2q3 0.101 余數(shù) r (0.00r3r4r5r6) 0.000110 2.5 定點運算器的組成2.5.1 邏輯運算邏輯運算計算機中除了進(jìn)行加、減、乘、除等基本算術(shù)運算外,還可對兩個或一個邏輯數(shù)進(jìn)行邏輯運算。所謂邏輯數(shù),是

60、指不帶符號的二進(jìn)制數(shù)。利用邏輯運算可以進(jìn)行兩個數(shù)的比較,或者從某個數(shù)中選取某幾位等操作。計算機中的邏輯運算,主要是指邏輯非邏輯非、邏邏輯加輯加、邏輯乘邏輯乘、邏輯異邏輯異四種基本運算。1. 邏輯非運算邏輯非運算 邏輯非也稱求反求反。對某數(shù)進(jìn)行邏輯非運算,就是按位求它的反,常用變量上方加一橫來表示。2. 邏輯加運算邏輯加運算兩數(shù)進(jìn)行邏輯加,就是按位求它們的“或”,所以邏輯加又稱邏輯或邏輯或,常用記號“V”或 “”來表示。3. 邏輯乘運算邏輯乘運算兩數(shù)邏輯乘,就是按位求它們的“與”,所以邏輯乘又稱“邏輯與邏輯與”,常用記號“”或“”來表示。4. 邏輯異運算邏輯異運算對兩數(shù)進(jìn)行異或就是按位求它們的模

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論