計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)課件-(3)[135頁]_第1頁
計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)課件-(3)[135頁]_第2頁
計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)課件-(3)[135頁]_第3頁
計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)課件-(3)[135頁]_第4頁
計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)課件-(3)[135頁]_第5頁
已閱讀5頁,還剩130頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第3章 運(yùn)算方法與運(yùn)算器3.1 定點(diǎn)數(shù)運(yùn)算3.2 邏輯與移位運(yùn)算3.3 浮點(diǎn)數(shù)運(yùn)算3.4 運(yùn)算器基本結(jié)構(gòu)3.1 定點(diǎn)數(shù)運(yùn)算3.1.1 加減運(yùn)算 有符號(hào)定點(diǎn)數(shù)的編碼可以用原碼、反碼、補(bǔ)碼、移碼等形式表示。原則上講,有符號(hào)數(shù) 的加減運(yùn)算可以用任何一種編碼來實(shí)現(xiàn),但實(shí)際中用得最多、最普遍的是補(bǔ)碼。1.補(bǔ)碼加減法 補(bǔ)碼加法的運(yùn)算法則為由式(3.1)可以看到,兩數(shù)和的補(bǔ)碼就等于兩數(shù)補(bǔ)碼之和。利用補(bǔ)碼求兩數(shù)之和十分 方便。例3.1 有兩個(gè)定點(diǎn)整數(shù)63和35,利用補(bǔ)碼加法求63+35。 解 根據(jù)題意,用8位二進(jìn)制補(bǔ)碼表示63和35為則例3.2 有兩個(gè)定點(diǎn)整數(shù)-63和-35,利用補(bǔ)碼加法求-63+(-35)。

2、 解 根據(jù)題意,用8位二進(jìn)制補(bǔ)碼表示-63和-35為則在數(shù)值的補(bǔ)碼表示法中,我們注意到,對(duì)一個(gè)正數(shù)求補(bǔ)對(duì)該數(shù)包括符號(hào)位在內(nèi)的 各位取反再加1,即可得到該數(shù)的負(fù)數(shù);若對(duì)該負(fù)數(shù)再求補(bǔ),則又可得到原來的正數(shù)。也就 是說,X補(bǔ) 求補(bǔ) =-X補(bǔ) ,-X補(bǔ) 求補(bǔ) =X補(bǔ) 。據(jù)此可得補(bǔ)碼減法的運(yùn)算法則為綜上所述,補(bǔ)碼加減運(yùn)算的規(guī)則是: (1)參加運(yùn)算的操作數(shù)用補(bǔ)碼表示。 (2)符號(hào)位參加運(yùn)算。 (3)若相加,則兩個(gè)數(shù)的補(bǔ)碼直接相加;若相減,則將減數(shù)連同符號(hào)位一起取反加1后 與被減數(shù)相加。 (4)運(yùn)算結(jié)果為補(bǔ)碼表示。2.溢出及判斷 1)溢出的概念 我們首先通過下面的例子來了解什么是溢出。 例3.4 有兩個(gè)定點(diǎn)

3、整數(shù)63和85,利用補(bǔ)碼加法求63+85。 解 根據(jù)題意,用8位二進(jìn)制補(bǔ)碼表示63和85為我們把運(yùn)算結(jié)果超出規(guī)定的數(shù)值范圍而造成錯(cuò)誤的現(xiàn)象稱為溢出。若運(yùn)算結(jié)果大于規(guī)定 的數(shù)值范圍的上限,則稱為上溢出;若運(yùn)算結(jié)果小于規(guī)定的數(shù)值范圍的下限,則稱為下溢出。 一旦確定了運(yùn)算字長(zhǎng)和數(shù)據(jù)表示方法,數(shù)據(jù)表示的范圍也就隨之確定。只要運(yùn)算結(jié)果 超出所能表示的數(shù)據(jù)范圍,就會(huì)發(fā)生溢出。發(fā)生溢出時(shí),運(yùn)算結(jié)果一定是錯(cuò)誤的,所以必須采取措施防止溢出發(fā)生。最簡(jiǎn)單有效的防止溢出發(fā)生的方法是增加數(shù)據(jù)的編碼長(zhǎng)度。在例3.4中,只要將數(shù)據(jù) 位數(shù)增加到9位以上,如采用16位編碼,就一定能防止溢出發(fā)生。 值得注意的是,只有當(dāng)兩個(gè)符號(hào)相

4、同的數(shù)相加(或者是符號(hào)相異的數(shù)相減)時(shí),運(yùn)算結(jié) 果才有可能發(fā)生溢出。而在符號(hào)相異的數(shù)相加(或者是符號(hào)相同的數(shù)相減)時(shí),永遠(yuǎn)不會(huì)產(chǎn) 生溢出。2)溢出的判定 (1)雙符號(hào)位(變形碼)判決法。第2章已提到變形補(bǔ)碼,采用兩位表示符號(hào),即00表 示正號(hào),11表示負(fù)號(hào),一旦發(fā)生溢出,則兩個(gè)符號(hào)位就一定不一致,通過判別兩個(gè)符號(hào)位 是否一致便可以判定是否發(fā)生了溢出。 若運(yùn)算結(jié)果兩符號(hào)分別用S2、S1表示,則溢出標(biāo)志 OF的邏輯表示式為當(dāng) OF=0時(shí),判別溢出未發(fā)生;當(dāng) OF=1時(shí),判別溢出發(fā)生。(2)進(jìn)位判決法。若Cn-1表示最高數(shù)值位產(chǎn)生的進(jìn)位,Cn 表示符號(hào)位產(chǎn)生的進(jìn)位(即進(jìn)位標(biāo)志 CF),則溢出標(biāo)志 O

5、F的邏輯表示式為(3)根據(jù)運(yùn)算結(jié)果的符號(hào)位和進(jìn)位標(biāo)志判別。該方法適用于兩個(gè)同號(hào)數(shù)求和或異號(hào)數(shù) 求差時(shí)判別溢出。溢出標(biāo)志 OF的邏輯表達(dá)式為其中,SF和 CF分別是運(yùn)算結(jié)果的符號(hào)標(biāo)志和進(jìn)位標(biāo)志。(4)根據(jù)運(yùn)算前后的符號(hào)位進(jìn)行判別。若用 Xs、Ys、Zs 分別表示兩個(gè)原始數(shù)據(jù)及運(yùn)算 結(jié)果的符號(hào)位,則溢出標(biāo)志 OF的邏輯表達(dá)式為該式表示,兩個(gè)正數(shù)相加的結(jié)果為負(fù)數(shù),溢出發(fā)生;或者兩個(gè)負(fù)數(shù)相加的結(jié)果為正數(shù),同樣 溢出發(fā)生。3.一位全加器的實(shí)現(xiàn) 設(shè)一位全加器的輸入分別為 Xi和Yi,低一位對(duì)該位的進(jìn)位為Ci,全加器的結(jié)果(和) 為Zi,向高一位的進(jìn)位為Ci+1,則實(shí)現(xiàn)一位全加器的邏輯表達(dá)式為其中,Gi為進(jìn)

6、位產(chǎn)生函數(shù),Pi為進(jìn)位傳遞函數(shù)。圖3.1(a)和(b)為實(shí)現(xiàn)上述邏輯的一位全加器邏輯電路及框圖表示。圖3.1 一位全加器邏輯電路及其框圖4.n 位加減器的實(shí)現(xiàn) 1)加法器 (1)行波進(jìn)位加法器。將n 個(gè)一位全加器串接在一起,便可以構(gòu)成n 位二進(jìn)制數(shù)加法 器,如圖3.2所示。根據(jù)補(bǔ)碼加法規(guī)則,圖3.2提供的二進(jìn)制數(shù)加法器可以直接用于實(shí)現(xiàn)n 位補(bǔ)碼加法。圖3.2 行波進(jìn)位加法器從圖3.2中可以看出: 加法器的進(jìn)位逐位產(chǎn)生。 加法器的和逐位生成。 圖3.2中利用異或門實(shí)現(xiàn)了式(3.4)的溢出判別邏輯,該異或門的輸入是Cn-1和Cn。(2)并(先)行進(jìn)位加法器(CLA)。行波進(jìn)位加法器結(jié)構(gòu)簡(jiǎn)單,實(shí)現(xiàn)成

7、本低。但其致命 的缺點(diǎn)在于,隨著加法器位數(shù)的增加,串行生成的進(jìn)位會(huì)造成加法速度大為降低。一種有 效的改進(jìn)方法是同時(shí)生成所有低位向高位的進(jìn)位。根據(jù)式(3.9)可知,由輸入Xi 和Yi 就能求出Gi和Pi,在已知輸入Ci 的情況下,便可 以獲得Ci+1,那么,在輸入 Xi+1、Yi+1和 Xi、Yi、Ci 的情況下,便可以獲得Ci+2,依次類 推,便可以求出Ci+3、Ci+4,。其中,四個(gè)進(jìn)位生成邏輯表示式為圖3.3 四位先行進(jìn)位產(chǎn)生電路圖3.4 n 位先行進(jìn)位加法器(3)組內(nèi)并行組間串行進(jìn)位加法器。組內(nèi)并行組間串行進(jìn)位又稱為單級(jí)先行進(jìn)位。組 間進(jìn)位是串行的,即每個(gè)組的進(jìn)位輸入是相鄰低位組的進(jìn)位輸

8、出,而每個(gè)組的進(jìn)位輸出是 相鄰高位組的進(jìn)位輸入。串行進(jìn)位鏈的總延遲時(shí)間與分組數(shù)目成正比。 以16位加法器為例,將其分為 4 組,每組 4 位。各組內(nèi)采用 4 位并行進(jìn)位加法器 (CLA),組間采用串行進(jìn)位方式,這樣就構(gòu)成了組內(nèi)并行組間串行進(jìn)位加法器,如圖3.5所 示。若4位 CLA 的延時(shí)為 t(=t+),則該16位并行加法器的計(jì)算時(shí)間就是4t。若 n 位加法器分為m 組,則加法器的計(jì)算時(shí)間就是mt。圖3.5 組內(nèi)并行組間串行進(jìn)位加法器(4)組內(nèi)并行組間并行進(jìn)位加法器。組內(nèi)并行組間并行進(jìn)位加法器又稱為多級(jí)先行進(jìn) 位加法器。這種加法器利用每組的Gi*+3和 Pi*+3信號(hào)再次組成先行進(jìn)位鏈,即構(gòu)

9、成組內(nèi)先行 進(jìn)位,組間也為先行進(jìn)位的進(jìn)位邏輯。下面仍以字長(zhǎng)為16位的加法器為例,分析兩級(jí)先行 進(jìn)位加法器的設(shè)計(jì)方法。16位的兩級(jí)先行進(jìn)位加法器可由4個(gè)基本的先行進(jìn)位邏輯和1個(gè)組間先行進(jìn)位邏輯電路組成,如圖3.6所示。圖3.6 組內(nèi)并行組間并行進(jìn)位加法器2)加法/減法器 在圖3.7中,利用異或門和控制信號(hào) M 可實(shí)現(xiàn)減法運(yùn)算。當(dāng) M =0時(shí),異或門輸出Y, 實(shí)現(xiàn)加法 X+Y 的功能;當(dāng) M =1時(shí),異或門輸出Y,Y與最低進(jìn)位C0=M =1相加,實(shí)現(xiàn) 減數(shù)求補(bǔ)(求負(fù)),然后與 X 做加法,從而實(shí)現(xiàn)減法 X-Y 的功能。圖3.7 行波進(jìn)位的n 位加法/減法器5.BCD加法器 1)8421BCD碼的使

10、用方式 在計(jì)算機(jī)中廣泛使用的 BCD碼是8421碼,它有以下兩種典型的使用方式: (1)若用一個(gè)字節(jié)(8位二進(jìn)制數(shù))表示2位 BCD數(shù),即高4位表示1位 BCD 數(shù),低4 位表示1位 BCD數(shù),則此字節(jié)所表示的數(shù)稱為壓縮 BCD數(shù)。 (2)若一個(gè)字節(jié)只表示1位 BCD數(shù),即高4位為0,僅用低4位表示1位 BCD 數(shù),則 此字節(jié)所表示的數(shù)稱為非壓縮 BCD數(shù)。2)加法運(yùn)算 一個(gè)多位十進(jìn)制數(shù)用8421BCD碼編碼后,其形式就是一個(gè)二進(jìn)制數(shù),因此可以利用 前述的n 位加法器進(jìn)行加法運(yùn)算,但其運(yùn)算結(jié)果有可能產(chǎn)生非法 BCD碼而出現(xiàn)錯(cuò)誤。3)校正 為了保證 BCD 數(shù)加法運(yùn)算結(jié)果的正確性,必須進(jìn)行校正。

11、對(duì)于一個(gè)字節(jié)的壓縮 BCD 數(shù)加法進(jìn)行校正的法則是: (1)運(yùn)算中低四位相加的結(jié)果大于9或有bit3向bit4的進(jìn)位,則結(jié)果加06H。 (2)運(yùn)算中高四位相加(包括由bit3向bit4的進(jìn)位)的結(jié)果大于9或有bit7向更高位的 進(jìn)位,則結(jié)果加60H,同時(shí)進(jìn)位為1且將其看作相加結(jié)果的最高位。 (3)若高四位和低四位均不滿足上述條件,如例3.8(1)中的情況,則無須校正;若同時(shí) 滿足(1)和(2)兩項(xiàng)條件,則結(jié)果加66H。該法則可以推廣到多字節(jié)的壓縮 BCD 數(shù)、非壓縮 BCD 數(shù)的加法校正中,也可用于 8421碼其他運(yùn)算(減法、乘法、除法)結(jié)果的校正。 在設(shè)計(jì)CPU 時(shí),可以用軟件方式在指令系統(tǒng)

12、中設(shè)置BCD數(shù)加、減、乘、除運(yùn)算的校正 指令,也可以用硬件方式在運(yùn)算器中設(shè)置 BCD 碼加法器。4)BCD 碼加法器 8421BCD碼加法器采用硬件電路實(shí)現(xiàn)其加法及校正。圖3.8(a)為一位8421BCD 碼加 法器。圖中下方的4位串行進(jìn)位加法器完成一位 BCD數(shù)加法,上方的串行進(jìn)位加法器完成 BCD數(shù)加法結(jié)果的校正。圖3.8(b)為一位 BCD加法器的簡(jiǎn)化框圖。圖3.8 一位8421BCD加法器將n 個(gè)一位 BCD碼加法器進(jìn)位鏈串接起來,即可構(gòu)成n 位行波進(jìn)位 BCD 加法器,如 圖3.9所示。其他類型 BCD碼運(yùn)算器的硬件實(shí)現(xiàn)可參考前述的二進(jìn)制加法器。圖3.9 n 位行波進(jìn)位 BCD加法器

13、框圖6.移碼加減法 1)運(yùn)算規(guī)則 由于移碼多用在浮點(diǎn)數(shù)的階碼中,因此這里僅就定點(diǎn)整數(shù)移碼的加減運(yùn)算加以說明。 定點(diǎn)整數(shù)移碼的加減運(yùn)算規(guī)則如下: (1)兩運(yùn)算數(shù)據(jù)應(yīng)為移碼編碼。 (2)對(duì)兩移碼求和/差。 (3)對(duì)結(jié)果進(jìn)行修正將結(jié)果的符號(hào)取反,即得到正確結(jié)果。 根據(jù)該規(guī)則,將前述的n 位加/減法運(yùn)算器結(jié)果輸出端的最高位(即符號(hào)位)加一個(gè)反 相器,即可構(gòu)成移碼加/減法運(yùn)算器。2)移碼運(yùn)算應(yīng)注意的問題 (1)對(duì)移碼運(yùn)算的結(jié)果需要加以修正,n 位數(shù)的修正量為2n -1,即對(duì)結(jié)果的符號(hào)位取 反后才是移碼形式的正確結(jié)果。 (2)移碼表示中,0有唯一的編碼,為100000。當(dāng)編碼出現(xiàn)00000時(shí),表示十進(jìn)制

14、數(shù)-2n-1。該編碼若出現(xiàn)在IEEE754格式的浮點(diǎn)數(shù)階碼中,則表示浮點(diǎn)數(shù)出現(xiàn)下溢,此時(shí) 浮點(diǎn)數(shù)按機(jī)器零處理。3.1.2 乘法運(yùn)算在一些簡(jiǎn)單的計(jì)算機(jī)中,乘法運(yùn)算可以用軟件來實(shí)現(xiàn)。利用計(jì)算機(jī)中設(shè)置的加法、移 位等指令,編寫一段程序完成兩數(shù)相乘。若 CPU 硬件結(jié)構(gòu)簡(jiǎn)單,則這種做法實(shí)現(xiàn)乘法所用 的時(shí)間較長(zhǎng),速度很慢。 另一種情況是在 ALU 等硬件的基礎(chǔ)上,適當(dāng)增加一些硬件構(gòu)成乘法器。這種乘法器 的硬件要復(fù)雜一些,但速度比較快。速度最快的是全部由硬件實(shí)現(xiàn)的陣列乘法器,其硬件 更加復(fù)雜??梢?可以用硬件來換取速度。1.原碼乘法運(yùn)算 1)原碼一位乘法規(guī)則 假定被乘數(shù) X、乘數(shù)Y 和乘積Z 為用原碼表示

15、的純小數(shù)(下面的討論同樣適用于純整 數(shù)),分別為原碼一位乘法規(guī)則如下: (1)乘積的符號(hào)為被乘數(shù)的符號(hào)位與乘數(shù)的符號(hào)位相異或。 (2)乘積的數(shù)值為被乘數(shù)的數(shù)值與乘數(shù)的數(shù)值之積,即(3)乘積的原碼為3)原碼一位乘法的算法流程 根據(jù)上述分析,可用圖3.10所示的流程來描述求數(shù)值之積的算法。圖3.10 數(shù)值乘法算法流程例3.11 X原 =0.1101,Y原 =1.1011,求兩者之積。 解 (1)乘積的符號(hào)為z0=01=1。 (2)利用原碼一位乘法求兩乘數(shù)的數(shù)值之積,其過程見圖3.11。 (3)將乘積的符號(hào)與數(shù)值之積拼接在一起,得到最終的乘積,見圖3.11下部。圖3.11 例3.11的乘法過程4)原

16、碼一位乘法器的框圖 根據(jù)以上對(duì)原碼一位乘法的描述,可以設(shè)計(jì)出采用原碼一位乘法的乘法器,如圖3.12 所示。圖3.12 原碼一位乘法器的框圖2.補(bǔ)碼乘法運(yùn)算 計(jì)算機(jī)中經(jīng)常采用補(bǔ)碼表示數(shù)據(jù),這時(shí)用原碼進(jìn)行乘法運(yùn)算很不方便,因此,較多計(jì) 算機(jī)采取補(bǔ)碼進(jìn)行乘法運(yùn)算。一種經(jīng)典的補(bǔ)碼乘法算法為布斯法,它是補(bǔ)碼一位乘法中的 一種,是由布斯(Booth)夫婦提出的。根據(jù)以上分析,可將布斯算法描述如下: (1)乘數(shù)與被乘數(shù)均用補(bǔ)碼表示,連同符號(hào)位一起參加運(yùn)算。 (2)乘數(shù)最低位后增加一個(gè)附加位(用 A-1表示),設(shè)定初始值為0。 (3)從附加位開始,依據(jù)表3.1所示的操作完成式(3.20)的運(yùn)算。 實(shí)現(xiàn)布斯算法

17、的流程如圖3.13所示。圖3.13 布斯算法流程圖例3.12 已知二進(jìn)制數(shù) X=0.1010,Y=-0.1101。利用布斯算法求XY補(bǔ) 。 解 (1)將兩數(shù)用補(bǔ)碼表示為(2)圖3.14給出了布斯算法求解過程。由圖3.14可知,XY補(bǔ) =1.011111100。圖3.14 例3.12布斯算法求解過程從圖3.14中可以看到,兩補(bǔ)碼乘法運(yùn)算是連同它們的符號(hào)位一起進(jìn)行運(yùn)算的。經(jīng)過最 后一次右移,所要計(jì)算的乘積補(bǔ)碼(包括符號(hào)位在內(nèi))就存在 DA 聯(lián)合的寄存器中。 注意,對(duì)于小數(shù)運(yùn)算,在n 次循環(huán)完成后,需增加 DA 聯(lián)合邏輯左移一位的操作,或者 在最后一次循環(huán)中不做 DA 右移而將 A 的最低位置0,這

18、樣就能在 DA 中得到小數(shù)相乘運(yùn) 算的正確結(jié)果。2)布斯算法乘法器的硬件框圖 根據(jù)布斯算法的描述,可以設(shè)計(jì)出乘法器的硬件框圖,如圖3.15所示。圖3.15 布斯算法乘法器的硬件框圖3.陣列乘法器 1)手算及單元電路 在上述乘法運(yùn)算中,是利用簡(jiǎn)單的硬件進(jìn)行多次加法和多次移位來實(shí)現(xiàn)乘法的。顯然, 這樣難以獲得高的運(yùn)算速度。為了提高運(yùn)算速度,可以采取類似人工手算的方法。設(shè)二進(jìn)制數(shù) X=X3X2X1X0和Y=Y3Y2Y1Y0,計(jì)算Z=XY,列式如下: 從上式可以看到,XiYj是與運(yùn)算,而Zi是對(duì)相應(yīng)列中各個(gè)與結(jié)果的求和。每一對(duì)相與 求和操作可以用圖3.16所示的基本乘加單元電路來實(shí)現(xiàn)。圖3.16 基本

19、乘加單元電路2)無符號(hào)數(shù)陣列乘法器 利用手算算式的結(jié)構(gòu)及乘加單元電路可以方便地實(shí)現(xiàn)無符號(hào)數(shù)陣列乘法器,其結(jié)構(gòu)如 圖3.17所示。在圖3.17中,每一個(gè)小框即為一個(gè)基本乘加單元,這些基本單元按照類似于手算算式 的結(jié)構(gòu)進(jìn)行連接,能夠完成手算算式中的乘加功能,最終獲得兩數(shù)的乘積。 利用無符號(hào)數(shù)陣列乘法器完成原碼的數(shù)值相乘,再加入一個(gè)完成符號(hào)運(yùn)算的異或門, 就構(gòu)成了原碼陣列乘法器。圖3.17 無符號(hào)數(shù)陣列乘法器3)補(bǔ)碼陣列乘法器 在無符號(hào)數(shù)陣列乘法器的基礎(chǔ)上,很容易實(shí)現(xiàn)補(bǔ)碼陣列乘法器。其基本思路是先求被乘數(shù)與乘數(shù)的絕對(duì)值(無符號(hào)數(shù)),然后進(jìn)行無符號(hào)數(shù)陣列乘法,最后根據(jù)被乘數(shù)與乘數(shù)的 符號(hào)決定最終乘積的

20、符號(hào)。 為了實(shí)現(xiàn)補(bǔ)碼陣列乘法器,先給出一個(gè)簡(jiǎn)單的求補(bǔ)電路,如圖3.18所示。從圖3.18中 可見,當(dāng)控制端E=0時(shí),輸出與輸入相同;當(dāng)E=1時(shí),可實(shí)現(xiàn)求補(bǔ)。只要將有符號(hào)數(shù)的 符號(hào)位加到控制端E 上,即可求得該符號(hào)數(shù)的絕對(duì)值。圖3.18 求補(bǔ)電路4)適于流水線工作的陣列乘法器 圖3.17所示陣列乘法器的最大缺點(diǎn)是:每一步部分積的計(jì)算都是用串行進(jìn)位加法器來 實(shí)現(xiàn)的,因此即使采用硬件電路,其運(yùn)算速度仍然很慢,令乘法器的使用者無法接受。為了 提高陣列乘法器的速度,設(shè)計(jì)者做了大量的研究,其中包括設(shè)計(jì)了適于流水線工作的陣列 乘法器,具體內(nèi)容詳見7.2.2節(jié)。3.19 補(bǔ)碼陣列乘法器框圖3.1.3 除法運(yùn)算

21、 定點(diǎn)除法運(yùn)算同樣可用原碼或補(bǔ)碼實(shí)現(xiàn)。在實(shí)現(xiàn)除法的過程中,應(yīng)注意除數(shù)不能為0, 而且還要保證相除所得的商是可以表示的。 1.原碼除法運(yùn)算 1)原碼除法規(guī)則 原碼除法運(yùn)算規(guī)則如下: (1)除數(shù)0。對(duì)于定點(diǎn)純小數(shù),|被除數(shù)|除數(shù)|;對(duì)于定點(diǎn)純整數(shù),|被除數(shù)|除數(shù)|。 (2)與原碼乘法類似,原碼除法的商符和商值也是分別處理的。商符等于被除數(shù)的符 號(hào)與除數(shù)的符號(hào)相異或。商值等于被除數(shù)的數(shù)值除以除數(shù)的數(shù)值。 (3)將商符與商值拼接在一起即可得到商的原碼。例3.13 設(shè)二進(jìn)制數(shù) X=+0.1011,Y=+0.1101,求 XY。 解 被除數(shù) X 和除數(shù)Y 均為正數(shù),則商的符號(hào)也為正。兩數(shù)數(shù)值部分的除法手算

22、過程 如圖3.20所示。圖3.20 例3.13的除法手算過程從手算過程中可以發(fā)現(xiàn): (1)除法是通過逐次減除數(shù)來實(shí)現(xiàn)的,也就是被除數(shù)(或余數(shù))每次減去右移一位的除 數(shù),以此來決定商值。這種運(yùn)算單元位數(shù)不斷擴(kuò)展的方式不利于硬件實(shí)現(xiàn),所以在實(shí)際構(gòu) 成除法器時(shí),保持除數(shù)的位置不動(dòng),而每次余數(shù)左移一位,使運(yùn)算單元的有效位數(shù)保持 不變。(2)在手算過程中,人通過眼睛和大腦來判斷被除數(shù)或余數(shù)是否夠減除數(shù)(不需要相減 之后再進(jìn)行判斷),以決定商是0還是1。而在 CPU 中,必須完成相減操作方能判斷余數(shù)是 否夠減。當(dāng)發(fā)現(xiàn)不夠減時(shí),余數(shù)已經(jīng)減掉了除數(shù),因此必須在下一步操作之前恢復(fù)余數(shù)。這 就是恢復(fù)余數(shù)法。2)恢

23、復(fù)余數(shù)法 利用恢復(fù)余數(shù)法實(shí)現(xiàn)原碼除法遵從上述除法規(guī)則,數(shù)值和符號(hào)單獨(dú)處理。 圖3.21為原碼恢復(fù)余數(shù)算法流程。對(duì)于定點(diǎn)純小數(shù)的數(shù)值部分,計(jì)算過程如下: (1)被除數(shù)左移一位,減除數(shù),若夠減,上商為 1,若不夠減,上商為 0,同時(shí)加除 數(shù)恢復(fù)余數(shù)。 (2)余數(shù)左移一位,減除數(shù),若夠減,上商為1,若不夠減,上商為0,同時(shí)加除數(shù) 恢復(fù)余數(shù)。重復(fù)此過程,直到除盡或精度達(dá)到要求為止。圖3.21 原碼恢復(fù)余數(shù)算法流程圖例3.14 若二進(jìn)制被除數(shù)X=-0.10001011,除數(shù)Y=0.1110,試?yán)迷a恢復(fù)余數(shù)法 求 XY 的商及余數(shù)。 解 本例滿足|X|Y|,且|Y|0。 對(duì) X 和Y 編碼,得商符=1

24、0=1。數(shù)值除法過程如圖3.22所示。圖3.22 例3.14恢復(fù)余數(shù)法實(shí)現(xiàn)數(shù)值除法的過程圖3.23 例3.15加減交替法實(shí)現(xiàn)除法的過程(2)加減交替除法器硬件電路。原碼加減交替法作除法時(shí)符號(hào)與數(shù)值運(yùn)算是分別進(jìn)行的。圖3.24給出了數(shù)值部分(無 符號(hào)數(shù))除法的硬件框圖。圖3.24 加減交替法除法器硬件電路框圖2.補(bǔ)碼除法運(yùn)算 與乘法運(yùn)算的情況類似,有時(shí)也需要實(shí)現(xiàn)補(bǔ)碼除法。1)補(bǔ)碼除法規(guī)則 假設(shè)進(jìn)行定點(diǎn)純小數(shù)的補(bǔ)碼除法運(yùn)算,其先決條件是除數(shù)0且|被除數(shù)|除數(shù)|。 補(bǔ)碼除法運(yùn)算相對(duì)要復(fù)雜一些,其運(yùn)算規(guī)則如下: (1)如果被除數(shù)與除數(shù)同號(hào),則被除數(shù)減除數(shù);如果被除數(shù)與除數(shù)異號(hào),則被除數(shù)加除 數(shù)。運(yùn)算結(jié)

25、果均稱為余數(shù)。(2)若余數(shù)與除數(shù)同號(hào),則上商為1,余數(shù)左移一位,然后用余數(shù)減除數(shù)得新余數(shù);若 余數(shù)與除數(shù)異號(hào),則上商為0,余數(shù)左移一位,然后用余數(shù)加除數(shù)得新余數(shù)。 (3)重復(fù)(2),直至除盡或達(dá)到精度要求為止。 (4)修正商。在除不盡時(shí),通常將商的最低位恒置1進(jìn)行修正來保證精度。2)補(bǔ)碼除法算法 補(bǔ)碼除法算法流程如圖3.25所示。該流程圖充分體現(xiàn)了補(bǔ)碼除法的運(yùn)算法則。從比較 被除數(shù)及除數(shù)開始,利用加減交替的方法求得余數(shù),通過比較余數(shù)與除數(shù)的符號(hào)來決定上 商為0還是為1,最后將末位置1進(jìn)行商的修正。圖3.25 補(bǔ)碼除法算法流程框圖3.陣列除法器 前面所提到的除法器都是在加法器的基礎(chǔ)上通過多次加減

26、來實(shí)現(xiàn)除法的,其運(yùn)算速度 必然受到限制。為了提高速度,可以利用專用硬件來完成除法運(yùn)算。1)補(bǔ)碼進(jìn)位及陣列基本單元 (1)補(bǔ)碼運(yùn)算的進(jìn)位。 在無符號(hào)數(shù)進(jìn)行減法運(yùn)算時(shí),是用被減數(shù)加上負(fù)減數(shù)的補(bǔ)碼來實(shí)現(xiàn)的。而補(bǔ)碼運(yùn)算的 進(jìn)位會(huì)出現(xiàn)如下情況:當(dāng)被減數(shù)小而減數(shù)大時(shí),沒有進(jìn)位或者說沒有借位);當(dāng)被減數(shù)大 而減數(shù)小時(shí),反而有進(jìn)位或者說有借位)。圖3.26 可控加減單元 CAS圖3.27 由可控加減單位 CAS構(gòu)成的陣列除法器3.2 邏輯與移位運(yùn)算3.2.1 邏輯運(yùn)算 基本的邏輯運(yùn)算包括與、或、非、異或等運(yùn)算。計(jì)算機(jī)以“1”和“0”分別表示邏輯數(shù)據(jù)的 真和假兩個(gè)狀態(tài)。此時(shí)n 個(gè)0和1的數(shù)字組合不是算術(shù)數(shù)字,而

27、是沒有符號(hào)位的邏輯數(shù)據(jù)。 邏輯運(yùn)算按位進(jìn)行操作,各位之間互不影響,運(yùn)算結(jié)果沒有進(jìn)位、借位、溢出等問題。1.基本邏輯運(yùn)算 計(jì)算機(jī)中采用的基本邏輯運(yùn)算列于表3.2中。(1)邏輯與(AND)運(yùn)算也稱為邏輯乘運(yùn)算,是指對(duì)兩個(gè)操作數(shù)進(jìn)行按位相與,用符號(hào) “”或“”來表示。利用邏輯與操作可以對(duì)特定的數(shù)據(jù)位清“0”,也可以提取特定的數(shù) 據(jù)位。(2)邏輯或(OR)運(yùn)算也稱為邏輯加運(yùn)算,是指對(duì)兩個(gè)操作數(shù)進(jìn)行按位相或,用符號(hào) “”或“+”來表示。利用邏輯或操作可以對(duì)特定的數(shù)據(jù)位置“1”,也可以保留特定的數(shù) 據(jù)位。(3)邏輯異或(XOR)運(yùn)算也稱為按位加,是指按位求兩個(gè)數(shù)模2相加的和,用符號(hào) “”表示。若兩個(gè)操作數(shù)

28、對(duì)應(yīng)數(shù)據(jù)位相等,則異或結(jié)果為0;若兩個(gè)操作數(shù)對(duì)應(yīng)數(shù)據(jù)位不相 等,則異或結(jié)果為1。 (4)邏輯非(NOT)運(yùn)算也稱為求反,是指對(duì)數(shù)據(jù)位進(jìn)行取反操作,1和0分別轉(zhuǎn)換為0 和1,在變量上方加上畫線來表示。2.邏輯運(yùn)算部件 實(shí)現(xiàn)邏輯與、或、異或、非運(yùn)算的部件非常簡(jiǎn)單,分別為與門、或門、異或門和反向器, 如圖3.28所示。將多個(gè)同類門集合在一起,就可以構(gòu)成對(duì)n 位邏輯數(shù)據(jù)的與門、或門、異 或門和反向器。利用這些基本的門電路,可以實(shí)現(xiàn)復(fù)雜的組合邏輯,如圖3.1中的一位全加 器、圖3.18中的求補(bǔ)電路等。圖3.28 邏輯運(yùn)算器件3. 2. 2 移位運(yùn)算對(duì)于無限長(zhǎng)度二進(jìn)制數(shù),左移或者右移n 位相當(dāng)于該數(shù)乘以或

29、者除以2n 。由于計(jì)算機(jī) 的機(jī)器數(shù)字長(zhǎng)是固定的,因此當(dāng)機(jī)器數(shù)左移或右移n 位時(shí),必然會(huì)使數(shù)據(jù)的低位或者高位 出現(xiàn)n 個(gè)空位。這些空位填寫“0”還是“1”,取決于機(jī)器數(shù)采用的是無符號(hào)數(shù)還是有符號(hào)數(shù)。 在計(jì)算機(jī)中,常見的移位運(yùn)算包括邏輯移位、算術(shù)移位、不帶進(jìn)位循環(huán)移位和帶進(jìn)位 循環(huán)移位,具體運(yùn)算過程如圖3.29所示。圖3.29 移位運(yùn)算執(zhí)行過程1.邏輯移位 邏輯移位包括邏輯左移和邏輯右移兩種操作。與邏輯運(yùn)算類似,邏輯移位的操作數(shù)被 認(rèn)為是無符號(hào)數(shù)或邏輯數(shù)據(jù),不存在符號(hào)問題。所有數(shù)據(jù)位都參與移位運(yùn)算。 (1)邏輯左移(SHL):操作數(shù)的最高位向左移出,存入狀態(tài)寄存器的進(jìn)位標(biāo)志位 CF, 其他位依次向

30、左移位,最低位補(bǔ)“0”。 (2)邏輯右移(SHR):操作數(shù)的最低位向右移出,存入狀態(tài)寄存器的進(jìn)位標(biāo)志位 CF, 其他位依次向右移位,最高位補(bǔ)“0”。例3.21 若二進(jìn)制數(shù) X=10011101,求 X 邏輯左移1位和3位的結(jié)果。 解 X 邏 輯 左 移 1 位:最 高 位 1 左 移 存 入 CF 標(biāo) 志 位,最 低 位 補(bǔ) “0”,結(jié) 果 為00111010。 X 邏輯左移3位:所有數(shù)據(jù)位向左移動(dòng)3位,高位丟棄,bit5位移入 CF標(biāo)志位,空出 來的低3位補(bǔ)“0”,結(jié)果為11101000。 例3.22 若二進(jìn)制數(shù) X=11011101,求 X 邏輯右移1位和3位的結(jié)果。 解 X 邏 輯 右

31、移 1 位:最 低 位 1 右 移 存 入 CF 標(biāo) 志 位,最 高 位 補(bǔ) “0”,結(jié) 果 為01101110。 X 邏輯右移3位:所有數(shù)據(jù)位向右移動(dòng)3位,低位丟棄,bit2位移入 CF標(biāo)志位,空出 來的高3位補(bǔ)“0”,結(jié)果為00011011。2.算術(shù)移位 算術(shù)移位是指將操作數(shù)據(jù)當(dāng)作有符號(hào)數(shù)進(jìn)行運(yùn)算,在算術(shù)移位過程中必須保持移位前 后的符號(hào)位不變。 (1)算術(shù)左移(SAL):與邏輯左移操作方法相同,操作數(shù)各位按位依次左移,最高位移 入CF標(biāo)志位,最低位補(bǔ)“0”。對(duì)于正數(shù)而言,其原碼、補(bǔ)碼和反碼與真值相等,在不超出編 碼表示范圍的前提下,算術(shù)左移1位等于對(duì)操作數(shù)做乘2運(yùn)算。 (2)算術(shù)右移(S

32、AR):操作數(shù)各位按位依次右移,最低位移入 CF標(biāo)志位,最高位用符 號(hào)位填入。對(duì)于補(bǔ)碼而言,算術(shù)右移1位等于對(duì)操作數(shù)做除2運(yùn)算。例3.23 若二進(jìn)制數(shù) X=11011101,求 X 算術(shù)左移和算術(shù)右移1位的結(jié)果。 解 X 算 術(shù) 左 移 1 位:最 高 位 1 左 移 存 入 CF 標(biāo) 志 位,最 低 位 補(bǔ) “0”,結(jié) 果 為10111010。X 算術(shù)右移1位:最低位1右移存入到 CF標(biāo)志位,最高位補(bǔ)“1”,結(jié)果為11101110。3.循環(huán)移位 循環(huán)移位是指將數(shù)據(jù)的首尾相連進(jìn)行移位,在整個(gè)移位過程中,數(shù)據(jù)各位信息沒有丟 失,可用于多字節(jié)數(shù)據(jù)的高低字節(jié)交換等操作。根據(jù)進(jìn)位是否參與循環(huán),循環(huán)移位

33、可分為 不帶進(jìn)位循環(huán)移位和帶進(jìn)位循環(huán)移位。 (1)不帶進(jìn)位循環(huán)左移(ROL):數(shù)據(jù)各位依次向左移位,移出的最高位移入空出的最 低位,同時(shí)存入 CF標(biāo)志位。 (2)不帶進(jìn)位循環(huán)右移(ROR):數(shù)據(jù)各位依次向右移位,移出的最低位移入空出的最高位,同時(shí)存入 CF標(biāo)志位。(3)帶進(jìn)位循環(huán)左移(RCL):數(shù)據(jù)各位依次向左移位,移出的最高位移入 CF標(biāo)志位的 同時(shí),原 CF標(biāo)志位的內(nèi)容移入空出的最低位。 (4)帶進(jìn)位循環(huán)右移(RCR):數(shù)據(jù)各位依次向右移位,移出的最低位移入CF標(biāo)志位的 同時(shí),原 CF標(biāo)志位的內(nèi)容移入空出的最高位。例3.24 若二進(jìn)制數(shù) X=11010101,CF=0,求 X 循環(huán)移位的結(jié)

34、果。 解 X 不帶進(jìn)位循環(huán)左移1位的結(jié)果為10101011。 X 不帶進(jìn)位循環(huán)右移1位的結(jié)果為11101010。 X 帶進(jìn)位循環(huán)左移1位的結(jié)果為10101010,CF=1。 X 帶進(jìn)位循環(huán)右移1位的結(jié)果為01101010,CF=1。4.移位運(yùn)算部件 圖3.30為上述8種(實(shí)質(zhì)為7種)移位運(yùn)算的功能實(shí)現(xiàn)電路,其中核心器件為16個(gè) D 觸發(fā)器構(gòu)成的16位移位寄存器(通過增加 D 觸發(fā)器的數(shù)目可以擴(kuò)充移位寄存器的位數(shù))。 通過與或邏輯電路控制 D 觸發(fā)器的輸入端 D,移位寄存器可實(shí)現(xiàn)所期望的移位操作。圖 3.30中,Rin為移位寄存器的輸入有效控制信號(hào),Rout為移位寄存器的輸出允許控制信號(hào), CF

35、為進(jìn)位標(biāo)志位,SHL(SAL)、SHR、SAR、ROL、ROR、RCL、RCR為實(shí)現(xiàn)相應(yīng)移位運(yùn) 算的控制信號(hào),Di為數(shù)據(jù)的第i位。圖3.30 具有7種移位運(yùn)算功能的移位寄存器3.3 浮點(diǎn)數(shù)運(yùn)算3.3.1 浮點(diǎn)加減運(yùn)算 設(shè)兩個(gè)規(guī)格化浮點(diǎn)數(shù) X=Mx 2Ex 和Y=My 2Ey ,實(shí)現(xiàn) XY 運(yùn)算的規(guī)則如下所述。1.對(duì)階 一般情況下,兩浮點(diǎn)數(shù)的階碼不會(huì)相同。也就是說,兩數(shù)的小數(shù)點(diǎn)沒有對(duì)齊。和我們所 熟悉的十進(jìn)制小數(shù)加減一樣,在進(jìn)行浮點(diǎn)數(shù)加減運(yùn)算前需將小數(shù)點(diǎn)對(duì)齊,這稱為對(duì)階。只 有當(dāng)兩數(shù)的階碼相同時(shí)才能進(jìn)行尾數(shù)的加減運(yùn)算。 對(duì)階的原則是小階對(duì)大階,也就是將小階碼浮點(diǎn)數(shù)的階碼變成大階碼浮點(diǎn)數(shù)的階碼。

36、具體做法是:小階碼每增加1,該浮點(diǎn)數(shù)的尾數(shù)右移一位,直到小階碼增大到與大階碼相 同。這樣在對(duì)階時(shí)丟失的是尾數(shù)的低位,造成的誤差很小。若是大階對(duì)小階,將丟失尾數(shù)的 高位,從而導(dǎo)致錯(cuò)誤的結(jié)果。2.尾數(shù)加(減)運(yùn)算 對(duì)階之后,尾數(shù)即可進(jìn)行加(減)運(yùn)算。實(shí)際運(yùn)算中只需做加法即可,因?yàn)闇p法可以用 加法來實(shí)現(xiàn)。 3.規(guī)格化 尾數(shù)加減運(yùn)算后,其結(jié)果有可能是一個(gè)非規(guī)格化數(shù)。如果結(jié)果的真值 M 不滿足1/2 |M|Emax(最大階碼) 時(shí),發(fā)生上溢出,即乘積已無法表示;當(dāng)EzEmax(最大階碼)時(shí), 發(fā)生上溢出,即商已無法表示;當(dāng)EzEmin(最小階碼)時(shí),發(fā)生下溢出,商可用0表示。當(dāng) 發(fā)生溢出,尤其是上溢時(shí),

37、應(yīng)重新定義浮點(diǎn)數(shù)或?qū)Ρ怀龜?shù)、除數(shù)作出限制。 (3)被除數(shù)的尾數(shù)除以除數(shù)的尾數(shù),由于進(jìn)行的是浮點(diǎn)數(shù)運(yùn)算,因此只要求兩尾數(shù)是 規(guī)格化數(shù),并不要求被除數(shù)的絕對(duì)值小于除數(shù)的絕對(duì)值。除法可采用3.1.3節(jié)所介紹的方法 進(jìn)行。(4)規(guī)格化商的尾數(shù)。根據(jù)上述規(guī)格化數(shù)的范圍,兩數(shù)相除時(shí),可能出現(xiàn)1/2除以-1的情況,此時(shí)的商為-1/2,這不是規(guī)格化數(shù)(補(bǔ)碼表示時(shí)),尾數(shù)需要左規(guī),但只需要左規(guī) 1次,便可使商之尾數(shù)變?yōu)橐?guī)格化數(shù)。(5)規(guī)格化中,右規(guī)時(shí)應(yīng)注意采用某種舍入算法。 按照上述規(guī)則就可以獲得兩浮點(diǎn)數(shù)相除的商。圖3.33為浮點(diǎn)數(shù)除法的流程圖。圖3.33 浮點(diǎn)數(shù)除法的流程框圖3.3.3 浮點(diǎn)數(shù)運(yùn)算的實(shí)現(xiàn)方法

38、在計(jì)算機(jī)中實(shí)現(xiàn)浮點(diǎn)數(shù)運(yùn)算可以采用不同的方法。 1.軟件方法 在一些比較簡(jiǎn)單的微型機(jī)、單片機(jī)中,內(nèi)部有算術(shù)邏輯單元,并設(shè)置有加減法指令,可 以依據(jù)浮點(diǎn)數(shù)運(yùn)算流程編寫程序來實(shí)現(xiàn)浮點(diǎn)數(shù)運(yùn)算。這種方法速度慢,工作量大,應(yīng)盡量 避免使用。2.專用浮點(diǎn)處理器 專用浮點(diǎn)處理器是為沒有浮點(diǎn)處理能力的處理器配置的。例如,在8086處理器構(gòu)成的 微機(jī)中可以配置浮點(diǎn)協(xié)處理器8087,80286微機(jī)可配置80287,80386微機(jī)可配置80387 等,這樣就可以提高計(jì)算機(jī)的浮點(diǎn)處理能力。今天的高檔處理器早已把浮點(diǎn)協(xié)處理器集成 在處理器芯片內(nèi)部,如從80486DX微機(jī)之后即是如此。 在設(shè)計(jì)計(jì)算機(jī)系統(tǒng)時(shí),若采用的處理器不支持浮點(diǎn)運(yùn)算,而系統(tǒng)又需要進(jìn)行浮點(diǎn)運(yùn)算, 則可以考慮在此系統(tǒng)中配置獨(dú)立的浮點(diǎn)協(xié)處理器。3.在處理器中設(shè)置浮點(diǎn)運(yùn)算部件 如果有浮點(diǎn)運(yùn)算的需求,則在設(shè)計(jì)處理器時(shí),可以將浮點(diǎn)運(yùn)算器放進(jìn)處理器中。這樣 的處理器在設(shè)計(jì)制造出來之后就能實(shí)現(xiàn)浮點(diǎn)運(yùn)算的功能。 顯然,后兩種方法要付出硬件上的代價(jià),但浮點(diǎn)運(yùn)算的速度必然比軟件實(shí)現(xiàn)要快。 浮點(diǎn)運(yùn)算部件也

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論