計(jì)算機(jī)組成原理與系統(tǒng)結(jié)構(gòu)-第2章-運(yùn)算方法及運(yùn)算器課件_第1頁(yè)
計(jì)算機(jī)組成原理與系統(tǒng)結(jié)構(gòu)-第2章-運(yùn)算方法及運(yùn)算器課件_第2頁(yè)
計(jì)算機(jī)組成原理與系統(tǒng)結(jié)構(gòu)-第2章-運(yùn)算方法及運(yùn)算器課件_第3頁(yè)
計(jì)算機(jī)組成原理與系統(tǒng)結(jié)構(gòu)-第2章-運(yùn)算方法及運(yùn)算器課件_第4頁(yè)
計(jì)算機(jī)組成原理與系統(tǒng)結(jié)構(gòu)-第2章-運(yùn)算方法及運(yùn)算器課件_第5頁(yè)
已閱讀5頁(yè),還剩391頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第二章

運(yùn)算方法及運(yùn)算器

2.1數(shù)據(jù)的表示方法2.2二進(jìn)制數(shù)據(jù)的編碼及加減運(yùn)算2.3定點(diǎn)二進(jìn)制乘法運(yùn)算2.4定點(diǎn)除法運(yùn)算2.5浮點(diǎn)運(yùn)算2.6運(yùn)算器的基本部件2.7數(shù)據(jù)校驗(yàn)碼

第二章運(yùn)算方法及運(yùn)算器2.1數(shù)據(jù)的表示方法2.1數(shù)據(jù)的表示方法在計(jì)算機(jī)系統(tǒng)中,數(shù)據(jù)的類型有多種多樣。如文件、圖、表、樹(shù)、陣列、隊(duì)列、鏈表、棧、向量、串、實(shí)數(shù)、整數(shù)、布爾數(shù)以及字符等。數(shù)據(jù)表示研究的是計(jì)算機(jī)硬件能夠直接識(shí)別、可以被指令系統(tǒng)直接調(diào)用的那些數(shù)據(jù)類型。數(shù)據(jù)表示是數(shù)據(jù)類型中最常用、也是相對(duì)比較簡(jiǎn)單、用硬件實(shí)現(xiàn)相對(duì)比較容易的幾種,如定點(diǎn)數(shù)(小數(shù)和整數(shù))、邏輯數(shù)(布爾數(shù))、浮點(diǎn)數(shù)(實(shí)數(shù))、十進(jìn)制數(shù)、字符、字符串、堆棧以及向量等。本節(jié)主要介紹數(shù)值型數(shù)據(jù)和字符型數(shù)據(jù)的表示方法。

2.1數(shù)據(jù)的表示方法在計(jì)算機(jī)系統(tǒng)中,數(shù)2在計(jì)算機(jī)中,廣泛采用的是僅用“0”和“1”兩個(gè)基本符號(hào)組成的二進(jìn)制碼。這是因?yàn)椋海?)二進(jìn)制碼在物理上最容易實(shí)現(xiàn),即可以容易找到具有兩個(gè)穩(wěn)定狀態(tài)且能方便地控制狀態(tài)轉(zhuǎn)換的物理器件,可以用兩個(gè)狀態(tài)分別表示二進(jìn)制碼的基本符號(hào)“0”和“1”;(2)用二進(jìn)制碼表示的二進(jìn)制數(shù),其編碼、記數(shù)和算術(shù)運(yùn)算規(guī)則簡(jiǎn)單,容易用數(shù)字電路實(shí)現(xiàn),為提高計(jì)算機(jī)的運(yùn)算速度和降低實(shí)現(xiàn)成本奠定了基礎(chǔ);(3)二進(jìn)制碼的兩個(gè)基本符號(hào)“0”和“1”,能方便地與邏輯命題的“否”和“是”,或者稱為“假”和“真”相對(duì)應(yīng),為計(jì)算機(jī)中的邏輯運(yùn)算和程序中的邏輯判斷提供便利條件。在計(jì)算機(jī)中,廣泛采用的是僅用“0”和“132.1.1數(shù)值型數(shù)據(jù)的表示方法

數(shù)值型數(shù)據(jù)是用于表示數(shù)量大小的。在使用數(shù)值數(shù)據(jù)時(shí),經(jīng)常用到數(shù)值范圍和數(shù)據(jù)精度兩個(gè)概念。數(shù)值范圍是指一種類型的數(shù)據(jù)所能表示的最大值和最小值;數(shù)據(jù)精度是指通常用實(shí)數(shù)所能給出的有效數(shù)字的位數(shù)。這兩個(gè)概念是不同的。在計(jì)算機(jī)中,它們的值與用多少個(gè)二進(jìn)制位表示某種類型的數(shù)據(jù),以及對(duì)這些位進(jìn)行何種編碼有關(guān)。機(jī)器中的二進(jìn)制數(shù)據(jù)有三種表示方式:定點(diǎn)數(shù)(包括定點(diǎn)小數(shù)和定點(diǎn)整數(shù))、浮點(diǎn)數(shù),還有用4位二進(jìn)制表示一個(gè)十進(jìn)制數(shù)位的壓縮數(shù)字串。

2.1.1數(shù)值型數(shù)據(jù)的表示方法數(shù)值型數(shù)據(jù)是4⒈定點(diǎn)數(shù)小數(shù)點(diǎn)位置固定的數(shù)稱為定點(diǎn)數(shù)。按小數(shù)點(diǎn)的位置可以分為定點(diǎn)小數(shù)和定點(diǎn)整數(shù)。(1)定點(diǎn)小數(shù)定點(diǎn)小數(shù),是指小數(shù)點(diǎn)準(zhǔn)確固定在數(shù)據(jù)某個(gè)位置上的小數(shù),從實(shí)用角度看,都把小數(shù)點(diǎn)固定在最高數(shù)據(jù)位的左邊,小數(shù)點(diǎn)前邊再設(shè)置一位符號(hào)位。按此規(guī)則,任何一個(gè)小數(shù)都可以被寫(xiě)成:N=NS.N-1N-2…N-m

⒈定點(diǎn)數(shù)5定點(diǎn)小數(shù)表示法主要用在早期的計(jì)算機(jī)中,它最節(jié)省硬件。隨著計(jì)算機(jī)硬件成本的大幅度降低,現(xiàn)代的通用計(jì)算機(jī)都被設(shè)計(jì)成能處理與計(jì)算多種類型數(shù)值數(shù)據(jù)的計(jì)算機(jī)。這里主要是通過(guò)定點(diǎn)小數(shù)說(shuō)明數(shù)值數(shù)據(jù)有不同的編碼方案。當(dāng)然也應(yīng)指出,定點(diǎn)小數(shù)也被用來(lái)表示浮點(diǎn)數(shù)的尾數(shù)部分。

定點(diǎn)小數(shù)表示法主要用在早期的計(jì)算機(jī)中,它最節(jié)省硬6(2)定點(diǎn)整數(shù)整數(shù)表示的數(shù)據(jù)的最小單位為1,可認(rèn)為它是小數(shù)點(diǎn)定在數(shù)值最低位右邊的一種數(shù)據(jù)。整數(shù)又被分成為帶符號(hào)和不帶符號(hào)的兩類。對(duì)帶符號(hào)的整數(shù)來(lái)說(shuō),符號(hào)位被安排在最高位,任何一個(gè)帶符號(hào)的整數(shù)都可以被寫(xiě)成:N=NSNn-1..N2N1N0

(2)定點(diǎn)整數(shù)7⒉浮點(diǎn)數(shù)

早期的計(jì)算機(jī)系統(tǒng)只有定點(diǎn)數(shù)據(jù)表示。這種計(jì)算機(jī)系統(tǒng)的優(yōu)點(diǎn)是硬件結(jié)構(gòu)比較簡(jiǎn)單,但有以下三個(gè)明顯的缺點(diǎn):

(1)編程困難。程序設(shè)計(jì)人員必須首先確定機(jī)器小數(shù)點(diǎn)的位置,并把所有參與運(yùn)算的數(shù)據(jù)的小數(shù)點(diǎn)都對(duì)齊到這個(gè)位置上,然后計(jì)算機(jī)才能正確進(jìn)行運(yùn)算。也就是說(shuō),編程人員首先要把參與運(yùn)算的數(shù)據(jù)擴(kuò)大或縮小某一個(gè)倍數(shù)后送入機(jī)器中,等運(yùn)算結(jié)果出來(lái)后再恢復(fù)到正確的數(shù)值。

⒉浮點(diǎn)數(shù)8(2)是可表示數(shù)的范圍小。例如,一臺(tái)字長(zhǎng)為16位的計(jì)算機(jī)所能表示的整數(shù)的范圍是-32768到32767,字長(zhǎng)為32位的計(jì)算機(jī)所能表示的整數(shù)的范圍是-231到231-1。從另一個(gè)角度看,為了能表示兩個(gè)大小相差很大的數(shù)據(jù),需要有很長(zhǎng)的機(jī)器字長(zhǎng)。

(3)數(shù)據(jù)存儲(chǔ)單元的利用率往往很低。例如,為了把小數(shù)點(diǎn)的位置確定在數(shù)據(jù)最高位之前,必須把所有參與運(yùn)算的數(shù)據(jù)至少都除以這些數(shù)據(jù)中的最大數(shù),只有這樣才能把所有數(shù)據(jù)都化成純小數(shù),因此造成很多數(shù)據(jù)有大量的前置零,從而浪費(fèi)了許多數(shù)據(jù)存儲(chǔ)單元。

(2)是可表示數(shù)的范圍小。例如,一臺(tái)字長(zhǎng)為16位的9與定點(diǎn)數(shù)相反,浮點(diǎn)數(shù)是指小數(shù)點(diǎn)位置不固定的數(shù)據(jù)。通常用以下形式表示:

N=M·RE其中,M(mantissa)被稱為浮點(diǎn)數(shù)的尾數(shù),R(radix)被稱為階碼的基數(shù),E(exponent)被稱為浮點(diǎn)數(shù)的階碼。計(jì)算機(jī)中一般規(guī)定R為2、8或16,是一個(gè)確定的常數(shù),不需要在浮點(diǎn)數(shù)中明確表示出來(lái)。因此,要表示浮點(diǎn)數(shù),一是要給出尾數(shù)M的值,通常用定點(diǎn)小數(shù)形式表示,它決定了浮點(diǎn)數(shù)的數(shù)據(jù)精度,即可以給出的有效數(shù)字的位數(shù)。二是要給出階碼,通常用整數(shù)形式表示,它指出的是小數(shù)點(diǎn)在數(shù)據(jù)中的位置,決定了浮點(diǎn)數(shù)的表示范圍。浮點(diǎn)數(shù)也要有符號(hào)位。與定點(diǎn)數(shù)相反,浮點(diǎn)數(shù)是指小數(shù)點(diǎn)位置不固定的數(shù)10在計(jì)算機(jī)中,浮點(diǎn)數(shù)通常被表示成如下格式:

MS是尾數(shù)的符號(hào)位,即浮點(diǎn)數(shù)的符號(hào)位,安排在最高一位;E是階碼,緊跟在符號(hào)位之后,占用m位,其中包含一位階碼的符號(hào)位;M是尾數(shù),在低位部分,占用n位。

在計(jì)算機(jī)中,浮點(diǎn)數(shù)通常被表示成如下格式:11按國(guó)際電子電氣工程師協(xié)會(huì)IEEE754標(biāo)準(zhǔn),規(guī)定常用的浮點(diǎn)數(shù)的格式為

符號(hào)符號(hào)位

階碼

尾數(shù)

總位數(shù)

單精度浮點(diǎn)數(shù)182332雙精度浮點(diǎn)數(shù)1115264臨時(shí)浮點(diǎn)數(shù)1156480按國(guó)際電子電氣工程師協(xié)會(huì)IEEE754標(biāo)準(zhǔn),規(guī)定12⒊十進(jìn)制數(shù)的編碼與運(yùn)算十進(jìn)制數(shù)的每一個(gè)數(shù)位的基為10,但到了計(jì)算機(jī)內(nèi)部,出于存儲(chǔ)與計(jì)算方便的目的,必須采用二進(jìn)制碼對(duì)每個(gè)十進(jìn)制數(shù)位進(jìn)行編碼,所需要的最少的二進(jìn)制碼的位數(shù)為log210,取整數(shù)為4。4位二進(jìn)制碼有16種不同的組合,怎樣從中選擇出10個(gè)組合來(lái)表示十進(jìn)制數(shù)位的0~9,有非常多的可行方案,下面介紹其中最常用的幾種。

⒊十進(jìn)制數(shù)的編碼與運(yùn)算13(1)有權(quán)碼權(quán)是指表示一個(gè)十進(jìn)制數(shù)位的4位二進(jìn)制碼的每一位有確定的位權(quán)。一般用8421碼,即4個(gè)二進(jìn)制碼位的權(quán)從高向低分別為8、4、2和1,使用二進(jìn)制碼的0000、0001、…、1001這10個(gè)組合,分別表示0到9這10個(gè)數(shù)。這種編碼的優(yōu)點(diǎn)是這4位二進(jìn)制碼之間滿足二進(jìn)制的進(jìn)位規(guī)則,而十進(jìn)制數(shù)位之間則是十進(jìn)制規(guī)則,因此這種編碼被稱為以二進(jìn)制編碼的十進(jìn)制(binarycodeddecimal)數(shù),簡(jiǎn)稱BCD碼。另一個(gè)優(yōu)點(diǎn)是在數(shù)字符的ASCII碼與這種編碼之間的轉(zhuǎn)換方便,即取每個(gè)數(shù)字符的ASCII碼的低4位的值便直接得到該數(shù)字的BCD碼,輸入輸出操作非常簡(jiǎn)便。

(1)有權(quán)碼14在計(jì)算機(jī)內(nèi)實(shí)現(xiàn)BCD碼之間的算術(shù)運(yùn)算要復(fù)雜一些,在某些情況下,需要對(duì)加法運(yùn)算的結(jié)果進(jìn)行修正。修正規(guī)則是:

如果兩個(gè)8421碼數(shù)相加之和等于或小于1001,即十進(jìn)制的9,不需要修正,如例2.1;例2.1:1+7

0001

+01111000

1+7=8的運(yùn)算結(jié)果是正確的,不必修正。

在計(jì)算機(jī)內(nèi)實(shí)現(xiàn)BCD碼之間的算術(shù)運(yùn)算要復(fù)15如果相加之和在10到15之間,一方面應(yīng)向高位產(chǎn)生一個(gè)進(jìn)位,本位還要進(jìn)行加6修正,進(jìn)位是在進(jìn)行加6修正時(shí)產(chǎn)生的,如例2.2;例2.2:3+90011+100110001+0110101118+9的結(jié)果也必須用加6修正,進(jìn)位是在相加過(guò)程中產(chǎn)生的。

如果相加之和在10到15之間,一方面應(yīng)向高16

另外幾種有權(quán)碼,如2421、5211、4311碼(如表2.1所示),也都是用4位有權(quán)二進(jìn)制碼表示一個(gè)十進(jìn)制數(shù)位,但這4位二進(jìn)制碼之間并不符合二進(jìn)制規(guī)則。這幾種有權(quán)碼的特性表現(xiàn)如下所述。當(dāng)采用2421、5211和4311編碼時(shí),任何兩個(gè)十進(jìn)制數(shù)位相加產(chǎn)生10或大于10的結(jié)果,相應(yīng)的二進(jìn)制碼相加會(huì)向高一位產(chǎn)生進(jìn)位,有利于實(shí)現(xiàn)逢十進(jìn)位的記數(shù)和加法規(guī)則。任何兩個(gè)相加之和等于9的十進(jìn)制數(shù)的二進(jìn)制碼,互為反碼,即滿足十進(jìn)制數(shù)按9互補(bǔ)的關(guān)系,有利于簡(jiǎn)化減法處理。

另外幾種有權(quán)碼,如2421、5211、431117表2.14位有權(quán)碼

表2.14位有權(quán)碼18(2)無(wú)權(quán)碼無(wú)權(quán)是指表示一位十進(jìn)制數(shù)的4位二進(jìn)制碼的每一位沒(méi)有確定的位權(quán)。在采用的無(wú)權(quán)碼的一些方案中,早期用的比較多的是余3碼(Excess-3Code),它是把原二進(jìn)制的每個(gè)代碼都加0011值得到的,其主要優(yōu)點(diǎn)是執(zhí)行十進(jìn)制數(shù)相加時(shí),能正確地產(chǎn)生進(jìn)位信號(hào),而且還給減法運(yùn)算帶來(lái)了方便。采用余3碼執(zhí)行加法運(yùn)算的規(guī)則是:當(dāng)兩個(gè)余3碼相加不產(chǎn)生進(jìn)位時(shí),應(yīng)從所得結(jié)果中減去0011;產(chǎn)生進(jìn)位時(shí),一方面應(yīng)將進(jìn)位信號(hào)送入高位余3碼,本位還應(yīng)執(zhí)行加0011的修正操作,高位應(yīng)執(zhí)行減0011的修正操作。

(2)無(wú)權(quán)碼19例2.4

(1)

(21)10+(75)10=(96)10

01010100

+1010100011111100-00110011

減3修正11001001結(jié)果為余3碼

例2.4(1)(21)10+(75)10=(96)1020(2)(28)10+(56)10=(84)1001011011+10001001110110100十進(jìn)制數(shù)位之間產(chǎn)生進(jìn)位,1110-0011+0011

兩個(gè)數(shù)位分別執(zhí)行減3和加3修正10110111

(2)(28)10+(56)10=(84)1021格雷碼是另外一種常用的二-十進(jìn)制編碼,它是使任何兩個(gè)相鄰的編碼之間只有一個(gè)二進(jìn)制位的狀態(tài)不同,其余3個(gè)二進(jìn)制位必須有相同狀態(tài),因此格雷碼有多種編碼方法。這種編碼方法的好處是,從一個(gè)編碼變到下一個(gè)相鄰編碼時(shí),只有一位的狀態(tài)發(fā)生變化,有利于得到更好的譯碼波形,在模擬→數(shù)字與數(shù)字→模擬轉(zhuǎn)換的電路中得到更好的運(yùn)行結(jié)果。格雷碼又被稱為循環(huán)碼。用4個(gè)二進(jìn)制位的格雷碼表示1位十進(jìn)制數(shù)的10個(gè)狀態(tài)的方案很多。表2.2給出余3碼和一種格雷碼編碼值。

格雷碼是另外一種常用的二-十進(jìn)制編碼,它是使任何22表2.24位無(wú)權(quán)碼

表2.24位無(wú)權(quán)碼23(3)數(shù)字串在計(jì)算機(jī)內(nèi)的表示與存儲(chǔ)人們習(xí)慣使用十進(jìn)制數(shù),而在計(jì)算機(jī)內(nèi),采用二進(jìn)制表示和處理數(shù)據(jù)更方便。因此,在計(jì)算機(jī)輸入和輸出數(shù)據(jù)時(shí),要進(jìn)行十進(jìn)制到二進(jìn)制和二進(jìn)制到十進(jìn)制的進(jìn)制轉(zhuǎn)換處理,這是多數(shù)應(yīng)用環(huán)境中的實(shí)際情況。而在某些特定的應(yīng)用領(lǐng)域中,如商業(yè)統(tǒng)計(jì),其特點(diǎn)是運(yùn)算簡(jiǎn)單而數(shù)據(jù)量很大,這樣使輸入輸出過(guò)程中的進(jìn)制轉(zhuǎn)換所占的時(shí)間比例很大。從提高機(jī)器的運(yùn)行效率考慮,也可以采用在計(jì)算機(jī)內(nèi)部直接用十進(jìn)制方式表示和處理數(shù)據(jù),這要求計(jì)算機(jī)內(nèi)部增加少量硬件線路。目前,大多數(shù)通用性較強(qiáng)的計(jì)算機(jī),都能直接處理十進(jìn)制形式表示的數(shù)值。采用十進(jìn)制表示數(shù)據(jù)的另一個(gè)目的,是提高數(shù)據(jù)的表示范圍和運(yùn)算精度。

(3)數(shù)字串在計(jì)算機(jī)內(nèi)的表示與存儲(chǔ)24十進(jìn)制數(shù)串在計(jì)算機(jī)內(nèi)主要有兩種表示形式。①字符串形式。一個(gè)字節(jié)存放一個(gè)十進(jìn)制的數(shù)位或符號(hào)位,存放的是ASCII碼值。例,+132的編碼為十六進(jìn)制的2B313332,在主存中占4個(gè)字節(jié)。在主存中,這樣的一個(gè)十進(jìn)制數(shù)占用連續(xù)的多個(gè)字節(jié),故為了指明這樣一個(gè)數(shù),需要給出該數(shù)在主存中的起始地址和位數(shù)(串的長(zhǎng)度)。對(duì)用這種方式表示的數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算是很不方便的,用這種方式表示的十進(jìn)制字符串,主要用在非數(shù)值計(jì)算的有關(guān)應(yīng)用領(lǐng)域中。

十進(jìn)制數(shù)串在計(jì)算機(jī)內(nèi)主要有兩種表示形式。25②壓縮的十進(jìn)制數(shù)串形式。一個(gè)字節(jié)存放兩個(gè)十進(jìn)制的數(shù)位,它比前一種形式節(jié)省存儲(chǔ)空間,又便于直接完成十進(jìn)制數(shù)的算術(shù)運(yùn)算,是廣泛采用的較為理想的方法。用壓縮的十進(jìn)制數(shù)串表示一個(gè)數(shù),要占用主存連續(xù)的多個(gè)字節(jié),每個(gè)數(shù)位占用半個(gè)字節(jié)(即4個(gè)二進(jìn)制位),其值可用二-十進(jìn)制編碼(BCD碼,數(shù)字符的ASCII碼的低4位)表示,符號(hào)位也占用半個(gè)字節(jié)并存放在最低數(shù)字位之后,其值選用4位編碼的6種冗余狀態(tài)中的有關(guān)值,如用1100表示正號(hào),用1101表示負(fù)號(hào)。在這種表示中,規(guī)定十進(jìn)制數(shù)值的位數(shù)加符號(hào)位之和必須為偶數(shù),當(dāng)其和不為偶數(shù)時(shí),應(yīng)在最高數(shù)字位之前補(bǔ)一個(gè)0,此時(shí),表示一個(gè)數(shù)要占用該偶數(shù)值位的一半那么多個(gè)字節(jié)。

②壓縮的十進(jìn)制數(shù)串形式。26例如:+132被表示成132C,-12被表示成012D,各占兩個(gè)字節(jié)。要指明一個(gè)壓縮的十進(jìn)制數(shù)串,也需要給出它在主存中的首地址和它的數(shù)字位個(gè)數(shù)(不含符號(hào)位),又稱位長(zhǎng),位長(zhǎng)為0的數(shù)其值為0。壓縮的十進(jìn)制數(shù)串表示方法的優(yōu)點(diǎn)是位長(zhǎng)可變,許多機(jī)器中規(guī)定該長(zhǎng)度從0到31,有的可能更長(zhǎng)。

例如:+132被表示成132C,-12被表272.1.2字符數(shù)據(jù)的表示方法

字符數(shù)據(jù)是指字符、字符串、圖形符號(hào)和漢字等各種數(shù)據(jù)。字符是計(jì)算機(jī)中使用最多的信息形式之一,是人與計(jì)算機(jī)通信、交互作用的重要媒介。字符數(shù)據(jù)一般不用來(lái)表示數(shù)值的大小,因此又被稱為非數(shù)值數(shù)據(jù)。在計(jì)算機(jī)中,要為每個(gè)字符指定一個(gè)確定的編碼,作為識(shí)別和使用這些字符的依據(jù)。這些編碼的值,是用一定位數(shù)的二進(jìn)制碼的兩個(gè)基本符號(hào)“1”和“0”進(jìn)行編碼給出的。

2.1.2字符數(shù)據(jù)的表示方法字符數(shù)據(jù)是指字281.ASCII碼和EBCDIC碼在計(jì)算機(jī)中使用得最多的、最普遍的是ASCII(AmericannationalStandardCodeforInformationInterchange,用于信息交換的美國(guó)標(biāo)準(zhǔn)代碼)字符編碼,如表2.3所示。

1.ASCII碼和EBCDIC碼29表2.3ASCII編碼表

表2.3ASCII編碼表30從表2.3中可以看到:每個(gè)字符是用7位二進(jìn)制碼表示的,其排列次序?yàn)閎6b5b4b3b2b1b0,在表中的b6b5b4為高位部分,b3b2b1b0為低位部分。ASCII字符編碼是由128個(gè)字符組成的字符集,包括10個(gè)十進(jìn)制數(shù)字(0~9)、52個(gè)英文大寫(xiě)和小寫(xiě)字母(A~Z,a~z)、34個(gè)專用符號(hào)和32個(gè)控制符號(hào)。其中編碼值0~31不對(duì)應(yīng)任何可印刷(或稱有字形)字符,通常稱它們?yōu)榭刂谱址糜谕ㄐ胖械耐ㄐ趴刂苹驅(qū)τ?jì)算機(jī)設(shè)備的功能控制。編碼值為32的是空格(或間隔)字符SP。編碼值為127的是刪除控制DEL碼。其余的94個(gè)字符稱為可印刷字符,有人把空格也計(jì)入可印刷字符時(shí),則稱有95個(gè)可印刷字符。

從表2.3中可以看到:每個(gè)字符是用7位二進(jìn)31用7位二進(jìn)制表示一個(gè)字符的ASCII碼簡(jiǎn)稱為ASCII-7碼,一個(gè)字符在計(jì)算機(jī)內(nèi)實(shí)際上用8位表示。正常情況下,最高一位b7為“0”。在需要奇偶校驗(yàn)時(shí),這一位可用于存放奇偶校驗(yàn)位的值,此時(shí)稱這一位為校驗(yàn)位。ASCII-7碼中有如下兩個(gè)編碼規(guī)律:

字符0~9這10個(gè)數(shù)字符的高3位編碼為011,低4位為0000~1001。當(dāng)去掉高3位的值時(shí),低4位正好是二進(jìn)制形式的0~9。這既滿足正常的排序關(guān)系,又有利于完成ASCII碼與二進(jìn)制碼之間的轉(zhuǎn)換。

用7位二進(jìn)制表示一個(gè)字符的ASCII碼簡(jiǎn)稱為32②

英文字母的編碼值滿足正常的字母排序關(guān)系,且大、小寫(xiě)英文字母編碼的對(duì)應(yīng)關(guān)系相當(dāng)簡(jiǎn)便,差別僅表現(xiàn)在b5一位的值為0或1,有利于大、小寫(xiě)字母之間的編碼變換。另有一種字符編碼,是主要用在IBM計(jì)算機(jī)中的EBCDIC(ExtendedBinaryCodedDecimalInterchangeCode)編碼。它采用8位編碼,有256個(gè)編碼狀態(tài),但只選用其中一部分。0~9這10個(gè)數(shù)字字符的高4位編碼為1111,低4位仍為0000~1001。大小寫(xiě)英文字母的編碼同樣滿足正常的排序要求,而且有簡(jiǎn)單的對(duì)應(yīng)關(guān)系,即同一個(gè)字母的大小寫(xiě)的編碼值只有最高的第二位的值不同,易于識(shí)別與轉(zhuǎn)換。

②英文字母的編碼值滿足正常的字母排序關(guān)系33⒉字符串隨著計(jì)算機(jī)在文字處理與信息管理中的廣泛應(yīng)用,字符串已成為最常用的數(shù)據(jù)類型之一。字符串是指連續(xù)的一串字符,通常方式下,它們?cè)谥鞔嬷姓加眠B續(xù)的多個(gè)字節(jié)空間,每個(gè)字節(jié)存一個(gè)字符代碼。當(dāng)主存字由2個(gè)或4個(gè)字節(jié)組成時(shí),在同一個(gè)主存字中,既有按從低位字節(jié)到高位字節(jié)的順序存放字符串內(nèi)容的,也有按從高位字節(jié)到低位字節(jié)的順序存放字符串內(nèi)容的。這兩種存放方式都是常用方式,不同的計(jì)算機(jī)可以選用其中任何一種。例如,字符串IFA>BTHENREAD(C)(最后一個(gè)字符是空格)就可以有兩種不同的存放方式如圖2.1所示。

⒉字符串34計(jì)算機(jī)組成原理與系統(tǒng)結(jié)構(gòu)-第2章-運(yùn)算方法及運(yùn)算器課件35⒊中文的編碼表示

漢字處理技術(shù)是我國(guó)計(jì)算機(jī)推廣工作中必須要解決的問(wèn)題,與西文字符比較,漢字?jǐn)?shù)量大,字形復(fù)雜,同音字多,這就給漢字在計(jì)算機(jī)內(nèi)部的存儲(chǔ)、傳輸、交換、輸入和輸出等帶來(lái)了一系列的問(wèn)題。為了能直接使用西文標(biāo)準(zhǔn)鍵盤(pán)輸入漢字,必須為漢字設(shè)計(jì)相應(yīng)的編碼,以適應(yīng)計(jì)算機(jī)處理漢字的需要。下面介紹三種漢字編碼方法。

⒊中文的編碼表示36(1)國(guó)標(biāo)碼1980年我國(guó)頒布了《信息交換用漢字編碼字符集基本集》代號(hào)為(GB2312-80),是國(guó)家規(guī)定的用于漢字信息處理使用的代碼依據(jù),這種編碼稱為國(guó)標(biāo)碼。在國(guó)標(biāo)碼的字符集中共收錄了6763個(gè)常用漢字和682個(gè)圖形符號(hào),其中一級(jí)漢字3755個(gè),以漢語(yǔ)拼音為序排列,二級(jí)漢字3008個(gè),以偏旁部首進(jìn)行排列。

(1)國(guó)標(biāo)碼37(2)機(jī)內(nèi)碼漢字的機(jī)內(nèi)碼是計(jì)算機(jī)系統(tǒng)內(nèi)部對(duì)漢字進(jìn)行存儲(chǔ)、處理和傳輸統(tǒng)一使用的代碼,又稱為漢字內(nèi)碼。機(jī)內(nèi)碼是根據(jù)GB2312-80進(jìn)行編碼的。在計(jì)算機(jī)中,通常用兩個(gè)字節(jié)表示一個(gè)漢字。由于漢字?jǐn)?shù)量多,一般用2個(gè)字節(jié)來(lái)存放漢字的內(nèi)碼,其中一個(gè)字節(jié)用于表示漢字的區(qū)號(hào),另一字節(jié)用于表示漢字的位號(hào),但是這種簡(jiǎn)單的表示方法不能區(qū)分漢字字符與英文字符。為了在計(jì)算機(jī)內(nèi)區(qū)分漢字字符和英文字符,以免造成混亂,一般將英文字符的機(jī)內(nèi)碼用一個(gè)字節(jié)來(lái)存放其ASCII碼,并將其最高位置“0”,而漢字機(jī)內(nèi)碼中兩個(gè)字節(jié)的最高位均置“1”。(2)機(jī)內(nèi)碼38(3)漢字的字形碼漢字的機(jī)內(nèi)碼只能表示漢字在碼表中的位置編碼,如果要輸出漢字,僅僅知道漢字在碼表中的位置編碼是不夠的,還必須知道漢字的字形。為了在計(jì)算機(jī)中輸出漢字,每一個(gè)漢字的字形信息都必須預(yù)先存放在計(jì)算機(jī)內(nèi),例如GB2312國(guó)標(biāo)漢字字符集的所有字符的形狀描述信息集合在一起,稱為字形信息庫(kù),簡(jiǎn)稱字庫(kù)。通常分為點(diǎn)陣字庫(kù)和矢量字庫(kù)。目前漢字字形的產(chǎn)生方式大多是用點(diǎn)陣方式形成漢字,即是用點(diǎn)陣表示的漢字字形代碼。根據(jù)漢字輸出精度的要求,有不同密度點(diǎn)陣。

(3)漢字的字形碼392.2二進(jìn)制數(shù)據(jù)的編碼及加減運(yùn)算

二進(jìn)制數(shù)值型數(shù)據(jù),包括二進(jìn)制表示的定點(diǎn)(小數(shù)、整數(shù))和浮點(diǎn)數(shù)。這里講的二進(jìn)制數(shù)據(jù)編碼方法,主要是如何能方便統(tǒng)一地表示二進(jìn)制數(shù)據(jù)正數(shù)、零和負(fù)數(shù),并且盡可能地有利于簡(jiǎn)化對(duì)它們實(shí)現(xiàn)算術(shù)運(yùn)算所用到的規(guī)則。很容易想到,數(shù)據(jù)符號(hào)的正與負(fù),可用一位二進(jìn)制的“0”和“1”兩個(gè)狀態(tài)加以表示,數(shù)據(jù)的數(shù)值用多個(gè)二進(jìn)制位表示。最常用的二進(jìn)制數(shù)據(jù)編碼方法有原碼表示、補(bǔ)碼表示、反碼表示和移碼表示四種。用定點(diǎn)小數(shù)引出二進(jìn)制數(shù)值數(shù)據(jù)的4種編碼(原碼、補(bǔ)碼、反碼和移碼)方法是最方便的,所以在下面的介紹中均以定點(diǎn)小數(shù)為例,之后再給出定點(diǎn)整數(shù)的4種編碼方法。

2.2二進(jìn)制數(shù)據(jù)的編碼及加減運(yùn)算二進(jìn)制402.2.1四種編碼及其加減運(yùn)算

⒈原碼表示法機(jī)器數(shù)的最高位為符號(hào)位,0表示正數(shù),1表示負(fù)數(shù),數(shù)值位跟隨其后,并以絕對(duì)值的形式給出。這是與真值最接近的一種表示形式。下面給出原碼的定義:即[X]原=符號(hào)位+|X|。

2.2.1四種編碼及其加減運(yùn)算⒈原碼表示法41例2.5X=+0.1001,[X]原=0.1001 X=

-0.1001,[X]原=1.1001

由于定點(diǎn)小數(shù)的小數(shù)點(diǎn)位置已默認(rèn)在符號(hào)位之后,書(shū)寫(xiě)時(shí)也可將其省略。如X=+0.1011,[X]原=01011;

X=

-0.1011,[X]原=11011。零的真值有+0和-0兩種表示形式,在原碼中,真值零有兩種不同的表示形式:[+0]原=0.0000,[-0]原=1.0000。

例2.5X=+0.1001,[X]原=0.100142⒉補(bǔ)碼的表示法

機(jī)器數(shù)的最高位為符號(hào)位,0表示正數(shù),1表示負(fù)數(shù),數(shù)值位跟隨其后。補(bǔ)碼的定義如下:即[X]補(bǔ)=2*符號(hào)位+X(mod2)。此處2是十進(jìn)制數(shù),即位二進(jìn)制的10。計(jì)算機(jī)中運(yùn)算器、寄存器、計(jì)數(shù)器等都有一定的位數(shù),不可能容納無(wú)限大的任意數(shù),當(dāng)運(yùn)算結(jié)果超出實(shí)際能表示的最大范圍時(shí),就會(huì)產(chǎn)生溢出,所產(chǎn)生的溢出量就是模(Module)。

⒉補(bǔ)碼的表示法43例2.6X=+0.1001,[X]補(bǔ)=0.1001;X=

-0.1001,[X]補(bǔ)=2+X=2+(-0.1001)=1.0111在補(bǔ)碼中,真值零的表示形式是唯一的,即[0]補(bǔ)=[-0]補(bǔ)=0.0000例2.644當(dāng)補(bǔ)碼加法運(yùn)算的結(jié)果不超出機(jī)器范圍時(shí),可得出以下重要結(jié)論:(1)參加運(yùn)算的兩個(gè)數(shù)均用補(bǔ)碼表示;(2)符號(hào)位與數(shù)值位一起參與運(yùn)算;(3)[X+Y]補(bǔ)=[X]補(bǔ)+[Y]補(bǔ)mod2,即兩個(gè)數(shù)的補(bǔ)碼直接相加;(4)運(yùn)算結(jié)果仍為補(bǔ)碼。當(dāng)補(bǔ)碼加法運(yùn)算的結(jié)果不超出機(jī)器范圍時(shí),可得出以下重要結(jié)論:45例2.7設(shè)X=0.1001,Y=0.0100,兩個(gè)數(shù)均為正數(shù):

[X+Y]補(bǔ)=[0.1001+0.0100]補(bǔ)=[0.1101]補(bǔ)=0.1101

[X]補(bǔ)+[Y]補(bǔ)=0.1001+0.0100=0.1101 即[X+Y]補(bǔ)=[X]補(bǔ)+[Y]補(bǔ)=0.1101例2.8設(shè)X=0.1001,Y=-0.0100,X為正,Y為負(fù): [X+Y]補(bǔ)=[0.1001+(-0.0100)]補(bǔ)=0.0101

[X+Y]補(bǔ)=[0.1001-0.0100]補(bǔ)=[0.0101]補(bǔ)=0.0101[X]補(bǔ)+[Y]補(bǔ)=0.1001+[-0.0100]補(bǔ)=0.1001+(2-0.0100)=2+0.0101=0.0101 mod2 即[X+Y]補(bǔ)=[X]補(bǔ)+[Y]補(bǔ)=0.0101

例2.7設(shè)X=0.1001,Y=0.0100,兩個(gè)數(shù)均為正46例2.9設(shè)X=-0.1001,Y=0.0100,X為負(fù),Y為正: [X+Y]補(bǔ)=[-0.1001+0.0100]補(bǔ)=[-0.0101]補(bǔ)=1.1011 [X]補(bǔ)+[Y]補(bǔ)=[-0.1001]補(bǔ)+[0.0100]補(bǔ)=1.0111+0.0100=1.1011 即[X+Y]補(bǔ)=[X]補(bǔ)+[Y]補(bǔ)=1.1011例2.10設(shè)X=-0.1001,Y=-0.0100,X,Y均為負(fù)數(shù): [X+Y]補(bǔ)=[-0.1001+(-0.0100)]補(bǔ)=[-0.1101]補(bǔ)=1.0011 [X]補(bǔ)+[Y]補(bǔ)=1.0111+1.1100=10+1.0011=1.0011 mod2 即:[X+Y]補(bǔ)=[X]補(bǔ)+[Y]補(bǔ)=1.0011

例2.9設(shè)X=-0.1001,Y=0.0100,X為負(fù),Y47以上四個(gè)例子包括了X、Y各為正負(fù)數(shù)的各種組合,證實(shí)了當(dāng)運(yùn)算結(jié)果不超出機(jī)器所能表示的范圍時(shí),[X+Y]補(bǔ)=[X]補(bǔ)+[Y]補(bǔ)。根據(jù)補(bǔ)碼加法公式可推出:[X-Y]補(bǔ)=[X+(-Y)]補(bǔ)=[X]補(bǔ)+[-Y]補(bǔ)只要求得[-Y]補(bǔ),就可以把減法變?yōu)榧臃ā?/p>

以上四個(gè)例子包括了X、Y各為正負(fù)數(shù)的各種組48當(dāng)補(bǔ)碼減法運(yùn)算的結(jié)果不超出機(jī)器范圍時(shí),可得出以下重要結(jié)論:(1)參加運(yùn)算的兩個(gè)數(shù)均用補(bǔ)碼表示;(2)符號(hào)位與數(shù)值位一起參與運(yùn)算;(3)[X-Y]補(bǔ)=[X]補(bǔ)+[-Y]補(bǔ)mod2,即被減數(shù)與減數(shù)的機(jī)器負(fù)數(shù)相加;(4)運(yùn)算結(jié)果仍為補(bǔ)碼。

當(dāng)補(bǔ)碼減法運(yùn)算的結(jié)果不超出機(jī)器范圍時(shí),可得出以下重要結(jié)論:49⒊反碼表示法

機(jī)器碼的最高位為符號(hào)位,0表示正數(shù),1表示負(fù)數(shù),數(shù)值位跟隨其后。反碼的定義:

即:[X]反=(2-2)*符號(hào)位+Xmod(2-2)。其中,n為小數(shù)點(diǎn)后的有效位數(shù)。當(dāng)X為正數(shù)時(shí),[X]反=[X]原;當(dāng)X為負(fù)數(shù)時(shí),保持[X]原符號(hào)位不變,而將數(shù)值部分取反。

⒊反碼表示法50

例2.11X=+0.0010,則[X]反=0.0010;X=

-0.0010,[X]反=2-2+(-0.0010)=1.1101

例2.12X=0.1001,Y=-0.0101,則有:

[X]反=0.1001,

[Y]反=1.1010

[X+Y]反=[X]反+[Y]反=[0.1001+1.1010]反 =[10.0011]最高位有進(jìn)位1,所以1要丟掉,并要在最低位加1。

例2.11X=+0.0010,則[X]反=051⒋整數(shù)的原、反、補(bǔ)碼設(shè)整數(shù)X=Xn…X2X1X0,其中Xn為符號(hào)位。下面給出整數(shù)的3種編碼的定義。

(1)原碼 [X]原= X 0≤X<2n 2n-X=2n+|X| -2n<X≤0 (2)補(bǔ)碼 [X]補(bǔ)= X 0≤X<2n 2n+1+X=2n+1-|X| -2n≤X<0 (3)反碼 [X]反= X 0≤X<2n (2n+1-1)+X -2n<X≤0 ⒋整數(shù)的原、反、補(bǔ)碼52⒌原碼、補(bǔ)碼和反碼之間的相互轉(zhuǎn)換原碼、補(bǔ)碼和反碼三種編碼既有相同點(diǎn),又各自不同,主要體現(xiàn)在以下四點(diǎn):·正數(shù)的三種編碼都等于真值本身,而負(fù)數(shù)各不相同?!し?hào)位都放在最高位,補(bǔ)碼和反碼的符號(hào)位可作為數(shù)值位的一部分看待,與數(shù)值位一起參加運(yùn)算,但是原碼的符號(hào)位不允許和數(shù)值位一樣看待,需分開(kāi)處理?!ふ嬷盗愕脑a和反碼都有兩種不同的表示形式,而補(bǔ)碼的表示形式只有一種。·從表示范圍來(lái)看,原碼和反碼的表示范圍是對(duì)稱的,而補(bǔ)碼負(fù)數(shù)表示范圍比正數(shù)表示范圍多了一個(gè)數(shù),表示定點(diǎn)小數(shù)時(shí)的最負(fù)的數(shù)是-1,表示定點(diǎn)整數(shù)時(shí)最負(fù)的數(shù)是-2n。

⒌原碼、補(bǔ)碼和反碼之間的相互轉(zhuǎn)換53(1)將反碼表示的數(shù)據(jù)轉(zhuǎn)換成原碼。轉(zhuǎn)換方法:負(fù)數(shù)的符號(hào)位保持不變,數(shù)值部分逐位取反。例2.13設(shè)[X]反=0.1001,則[X]原=0.1001,真值X=+0.1001;設(shè)[X]反=1.0011,則[X]原=1.1100,真值X=-0.1100。(2)將補(bǔ)碼表示的數(shù)據(jù)轉(zhuǎn)換成原碼。轉(zhuǎn)換方法:利用互補(bǔ)的道理對(duì)補(bǔ)碼再次求補(bǔ)即得到X的原碼。例2.14設(shè)[X]補(bǔ)=0.1011,則[X]原=0.1011,真值X=+0.1011;設(shè)[X]補(bǔ)=1.1011,則[X]原=1.0101,真值X=-0.0101。

(1)將反碼表示的數(shù)據(jù)轉(zhuǎn)換成原碼。轉(zhuǎn)換方法:負(fù)數(shù)的符號(hào)位保持54(3)將原碼表示的數(shù)據(jù)轉(zhuǎn)換成補(bǔ)碼。轉(zhuǎn)換方法:負(fù)數(shù)的符號(hào)位保持不變,數(shù)值部分逐位取反后,最低位加1便得到負(fù)數(shù)的補(bǔ)碼。即[X]補(bǔ)=[X]反+2-n因?yàn)榉创a與補(bǔ)碼的公式分別是:[X]反=2-2-n+X[X]補(bǔ)=2+X真值與補(bǔ)碼或反碼之間的轉(zhuǎn)換通常通過(guò)原碼實(shí)現(xiàn),如果已經(jīng)熟練掌握轉(zhuǎn)換方法的話,可以直接完成真值與補(bǔ)碼或反碼之間的轉(zhuǎn)換。

(3)將原碼表示的數(shù)據(jù)轉(zhuǎn)換成補(bǔ)碼。轉(zhuǎn)換方法:負(fù)數(shù)的符號(hào)位保持55⒍移碼表示法移碼通常用于表示浮點(diǎn)數(shù)的階碼。由于階碼是個(gè)n+1位的整數(shù),所以假定定點(diǎn)整數(shù)移碼形式為Xn…X2X1X0時(shí),移碼的定義是:[X]移=2n+X-2n

≤X<2n當(dāng)正數(shù)X=+10001時(shí),[X]移=1.10001;當(dāng)負(fù)數(shù)X=-10001時(shí),[X]移=25-10001=0.01111。移碼中的圓點(diǎn)不是小數(shù)點(diǎn),而是表示左邊一位是符號(hào)位。顯然,移碼中符號(hào)位Xn表示的規(guī)律與原碼、補(bǔ)碼、反碼相反。

⒍移碼表示法56移碼具有以下特點(diǎn):(1)最高位為符號(hào)位,1表示正號(hào),0表示負(fù)號(hào)。(2)數(shù)據(jù)0有惟一的編碼,即[+0]移=[-0]移=10…0。當(dāng)數(shù)據(jù)小于機(jī)器能表示的最小數(shù)時(shí)(移碼0≤-2n),稱為機(jī)器零,將階碼(移碼)置為00…0,且不管尾數(shù)值大小如何,都按浮點(diǎn)數(shù)下溢處理。(3)在計(jì)算機(jī)中,移碼(階碼)只執(zhí)行加減法運(yùn)算,且需要對(duì)得到的結(jié)果加以修正,修正量為2n,即要對(duì)結(jié)果的符號(hào)位取反,得到[X]移。

移碼具有以下特點(diǎn):57在上面所述的數(shù)據(jù)四種機(jī)器表示法中,移碼表示法主要用于表示浮點(diǎn)數(shù)的階碼。由于補(bǔ)碼表示對(duì)加減運(yùn)算十分方便,因此目前機(jī)器中廣泛采用補(bǔ)碼表示法。在這類機(jī)器中,數(shù)據(jù)用補(bǔ)碼表示、補(bǔ)碼存儲(chǔ)、補(bǔ)碼運(yùn)算;也有些機(jī)器,數(shù)據(jù)用原碼進(jìn)行存儲(chǔ)和傳送,運(yùn)算時(shí)改用補(bǔ)碼;還有些機(jī)器在做加減法時(shí)用補(bǔ)碼進(jìn)行運(yùn)算,在做乘除法時(shí)用原碼進(jìn)行運(yùn)算。

在上面所述的數(shù)據(jù)四種機(jī)器表示法中,移碼表示法主要582.2.2加減運(yùn)算的溢出判斷

當(dāng)運(yùn)算結(jié)果超出機(jī)器數(shù)所能表示的范圍時(shí),稱為溢出。如在定點(diǎn)小數(shù)機(jī)器中,數(shù)的原碼表示范圍為|X|<1,在運(yùn)算過(guò)程中如出現(xiàn)大于1的現(xiàn)象,就是溢出。顯然,兩個(gè)異號(hào)數(shù)相加或兩個(gè)同號(hào)數(shù)相減,其結(jié)果是不會(huì)溢出的。僅當(dāng)兩個(gè)同號(hào)數(shù)相加或者兩個(gè)異號(hào)數(shù)相減時(shí),才有可能發(fā)生溢出的情況,一旦溢出,運(yùn)算結(jié)果就不正確了,因此必須將溢出的情況檢查出來(lái)。下面以定點(diǎn)數(shù)二進(jìn)制補(bǔ)碼和移碼加法運(yùn)算為例來(lái)說(shuō)明加減運(yùn)算的溢出判斷:

2.2.2加減運(yùn)算的溢出判斷當(dāng)運(yùn)算結(jié)果59⒈補(bǔ)碼加減運(yùn)算的溢出判斷例2.15:5位二進(jìn)制補(bǔ)碼數(shù)的加法運(yùn)算,最高位為符號(hào)位,數(shù)值位4位。(1)定點(diǎn)正數(shù)①8+6=14②(-8)+(-5)=-13③12+6=180100011000 01100+00110

+11011

+0011001110110011 10010④(-10)+(-8)=-18 10110 +11000

101110⒈補(bǔ)碼加減運(yùn)算的溢出判斷60在例2.15(1)中,①和②得出正確結(jié)果,③是兩個(gè)正數(shù)相加,結(jié)果為負(fù),顯然不正確。④是兩個(gè)負(fù)數(shù)相加,結(jié)果為正,也不正確。

在例2.15(1)中,①和②得出正確結(jié)果,③是兩61(2)定點(diǎn)小數(shù)①0.1010+0.0101②0.1011+0.0101③0.1011+(-0.0101)0.10100.10110.1011+0.0101

+0.0101

+1.10110.11111.000010.0110④-0.1010+(-0.1001)1.0110+1.0111

10.1101(2)定點(diǎn)小數(shù)62在例2.15(2)中,①和③得出正確結(jié)果,②是兩個(gè)正數(shù)相加,結(jié)果為負(fù),顯然不正確。④是兩個(gè)負(fù)數(shù)相加,結(jié)果為正,也不正確。之所以發(fā)生錯(cuò)誤,是因?yàn)檫\(yùn)算結(jié)果產(chǎn)生了溢出。兩個(gè)正數(shù)相加,結(jié)果大于機(jī)器所能表示的最大正數(shù),稱為上溢。而兩個(gè)負(fù)數(shù)相加,結(jié)果小于機(jī)器所能表示的最小負(fù)數(shù),稱為下溢。

在例2.15(2)中,①和③得出正確結(jié)果,63為了判斷“溢出”是否發(fā)生,可采用兩種檢測(cè)方法。(1)雙符號(hào)位法也稱為變形補(bǔ)碼法,正數(shù)的雙符號(hào)位為00,負(fù)數(shù)的雙符號(hào)位為11。變形補(bǔ)碼的加法公式如下:[X]變形補(bǔ)+[Y]變形補(bǔ)=[X+Y]變形補(bǔ)(mod4)為了得到兩個(gè)數(shù)變形補(bǔ)碼之和等于兩個(gè)數(shù)和的變形補(bǔ)碼,同樣必須:兩個(gè)符號(hào)位都看做數(shù)碼一樣參加運(yùn)算;兩個(gè)數(shù)進(jìn)行以4為模的加法,即最高符號(hào)位上產(chǎn)生的進(jìn)位要丟掉。

為了判斷“溢出”是否發(fā)生,可采用兩種檢測(cè)方法。64采用變形補(bǔ)碼后,任何小于1的正數(shù),兩個(gè)符號(hào)位都是“0”,即00.X1X2…Xn;任何大于-1的負(fù)數(shù),兩個(gè)符號(hào)位都是“1”,即11.X1X2…Xn。如果兩個(gè)數(shù)相加后,其結(jié)果的符號(hào)位出現(xiàn)“01”或“10”兩種組合時(shí),表示發(fā)生溢出。這是因?yàn)閮蓚€(gè)絕對(duì)值小于1的數(shù)相加,其結(jié)果不會(huì)大于或等于2,所以最高位永遠(yuǎn)表示結(jié)果的正確符號(hào)。采用變形補(bǔ)碼后,任何小于1的正數(shù),兩個(gè)符號(hào)位都是“65例2.16X=0.1001,Y=0.1101,求X+Y。[X]變形補(bǔ)=00.1001,[Y]變形補(bǔ)=00.1101[X+Y]變形補(bǔ)=[X]變形補(bǔ)+[Y]變形補(bǔ)=00.1001+00.1101=01.0110兩個(gè)符號(hào)位出現(xiàn)“01”,表示已溢出,且結(jié)果大于+1。

例2.17X=-0.1101,Y=-0.0110,求X+Y。[X]補(bǔ)=1.0011,[Y]補(bǔ)=1.1010,[X]變形補(bǔ)=11.0011,[Y]變形補(bǔ)=11.1010[X+Y]變形補(bǔ)=[X]變形補(bǔ)+[Y]變形補(bǔ)=11.0011+11.1010=10.1101兩個(gè)符號(hào)位出現(xiàn)“10”,表示已溢出,且結(jié)果小于-1。例2.16X=0.1001,Y=0.1101,66(2)單符號(hào)位法當(dāng)任意符號(hào)兩個(gè)數(shù)相加時(shí),如果C=Cf,運(yùn)算結(jié)果正確,其中C為數(shù)值最高位的進(jìn)位,Cf為符號(hào)位的進(jìn)位。如果C≠Cf,則為溢出,所以溢出條件=C⊕Cf。其邏輯電路如圖2.2。圖2.2單符號(hào)位法判溢出的邏輯圖

(2)單符號(hào)位法67⒉移碼加減運(yùn)算的溢出判斷移碼加減運(yùn)算的溢出判斷一般也使用雙符號(hào)位法,但跟補(bǔ)碼的雙符號(hào)位法不同。規(guī)定移碼的第二個(gè)符號(hào)位,即最高符號(hào)位恒用0參加加減運(yùn)算,則溢出條件是結(jié)果的最高符號(hào)位為1,此時(shí),當(dāng)?shù)臀环?hào)位為0時(shí),表明結(jié)果上溢,為1時(shí),表明結(jié)果下溢。當(dāng)最高符號(hào)位為0時(shí),表明沒(méi)有溢出,低位符號(hào)位為1,表明結(jié)果為正,為0時(shí),表明結(jié)果為負(fù)。

⒉移碼加減運(yùn)算的溢出判斷68例2.18X=010,Y=110[X+Y]移=[X]移+[Y]補(bǔ)=01010+00110=10000,結(jié)果上溢。[X-Y]移=[X]移+[-Y]補(bǔ)=01010+11010=00100,結(jié)果正確,即X-Y為-4。例2.19X=-100,Y=-110[X+Y]移=[X]移+[Y]補(bǔ)=00100+11010=11110,結(jié)果下溢。[X-Y]移=[X]移+[-Y]補(bǔ)=00100+00110=01010,結(jié)果正確,即X-Y為2。

例2.18X=010,Y=110692.3定點(diǎn)二進(jìn)制乘法運(yùn)算

乘除法運(yùn)算是計(jì)算機(jī)的基本運(yùn)算之一。由于乘除法運(yùn)算需要更多的硬件支持,并不是所有的計(jì)算機(jī)都配置這種硬件,但是所有的計(jì)算機(jī)都能做乘除法運(yùn)算。實(shí)現(xiàn)乘除法運(yùn)算大致有三種方案:①采用軟件實(shí)現(xiàn)乘除法運(yùn)算。使用原有的運(yùn)算器硬件,運(yùn)用基本運(yùn)算指令編寫(xiě)實(shí)現(xiàn)乘、除法運(yùn)算的子程序。②在原有運(yùn)算器的基礎(chǔ)上增加一些硬件設(shè)備來(lái)實(shí)現(xiàn)乘、除法操作。③設(shè)置專用的乘、除法器,使運(yùn)算處理設(shè)備專用化,加快運(yùn)算速度。

2.3定點(diǎn)二進(jìn)制乘法運(yùn)算乘除法運(yùn)算702.3.1原碼一位乘法

在定點(diǎn)計(jì)算機(jī)中,完成兩個(gè)原碼表示的數(shù)相乘是十分方便的。乘積的符號(hào)由兩個(gè)數(shù)的符號(hào)位按位相異或得到,而乘積的數(shù)值部分則是兩個(gè)正數(shù)(被乘數(shù)和乘數(shù)的絕對(duì)值)相乘之積。即兩個(gè)原碼數(shù)相乘,乘積的符號(hào)為兩數(shù)符號(hào)位的異或值,數(shù)值為兩數(shù)絕對(duì)值之積。假設(shè)被乘數(shù)[X]原=X0X1X2…Xn,乘數(shù)[Y]原=Y0.Y1Y2…Yn,則[X·Y]原=[X]原·[Y]原=(X0⊕Y0)|(X1X2…Xn)·(Y1Y2…Yn)其中|表示把符號(hào)位和數(shù)值部分鄰接起來(lái)。

2.3.1原碼一位乘法在定點(diǎn)計(jì)算機(jī)中71人工計(jì)算X*Y,X=0.1101,Y=0.10110.1101

×0.1011110111010000

11010.10001111

即X*Y=0.10001111

人工計(jì)算X*Y,X=0.1101,Y=0.101172上述運(yùn)算過(guò)程與十進(jìn)制乘法類似:從乘數(shù)Y的最低位開(kāi)始,若這一位為“1”,則將被乘數(shù)X寫(xiě)下;若這一位為“0”,則寫(xiě)下全0。然后再對(duì)乘數(shù)Y的高一位進(jìn)行乘法運(yùn)算,其規(guī)則同上,不過(guò)這一位乘數(shù)的權(quán)與最低位乘數(shù)的權(quán)不一樣,因此被乘數(shù)X要左移一位。依此類推,直到乘數(shù)各位乘完為止。最后將它們加起來(lái),便得到最后乘積Z。我們所習(xí)慣的人工算法對(duì)機(jī)器并不完全適用,不能直接照搬。原因在于兩個(gè)n位數(shù)相乘,乘積可能為2n位,用被乘數(shù)左移的方法,則需要2n位長(zhǎng)的加法器,不僅不適于定點(diǎn)機(jī)的形式,而且還必須設(shè)法將n個(gè)位積一次相加起來(lái)。為了簡(jiǎn)化結(jié)構(gòu),機(jī)器通常只有n位長(zhǎng),并且只有兩個(gè)操作數(shù)相加的加法器。為此,必須修改上述乘法的實(shí)現(xiàn)方法。

上述運(yùn)算過(guò)程與十進(jìn)制乘法類似:從乘數(shù)Y的最73機(jī)器的原碼一位乘法做了如下修改:①一般機(jī)器不能完成多個(gè)數(shù)據(jù)相加,只能同時(shí)進(jìn)行兩個(gè)數(shù)相加,因此得到一個(gè)相加數(shù)(相加數(shù)只有兩種情況:0或被乘數(shù))后與上次部分積相加。②觀察計(jì)算過(guò)程很容易發(fā)現(xiàn),在求本次部分積時(shí),前一次部分積的最低位,不再參與運(yùn)算,因此可將其右移一位,相加數(shù)可直送而不必偏移。③乘積的高位放在部分積寄存器中,低位放在乘數(shù)寄存器中,兩個(gè)寄存器同時(shí)移位。由乘數(shù)寄存器的最低位來(lái)控制相加數(shù)。

機(jī)器的原碼一位乘法做了如下修改:74例2.21設(shè)X=0.1101,Y=0.1011,求X*Y

例2.21設(shè)X=0.1101,Y=0.1011,求X*Y75

部分積乘數(shù)被乘數(shù):11010000001011+X001101001101右移1位000110

1101

1丟失個(gè)位運(yùn)算+X001101010011右移1位0010011110

1丟失十位運(yùn)算+0000000001001右移1位0001001111

0丟失百位運(yùn)算+X001101010001右移1位00100011111丟失千位運(yùn)算乘積高位乘積低位

X0Y0=0

[X*Y]原=0.10001111+部分積76原碼一位乘法的控制流程圖如圖2.3所示。

圖2.3原碼一位乘法流程圖

原碼一位乘法的控制流程圖如圖2.3所示。圖2.3原碼一位乘77圖2.4為實(shí)現(xiàn)原碼一位乘法的硬件邏輯原理圖。有三個(gè)寄存器,其中:R0寄存器存放部分積Z,在乘法開(kāi)始前R0初始狀態(tài)應(yīng)清零,保證Z0=0;R1寄存器存放乘數(shù)Y;R2寄存器存放被乘數(shù)X。由于乘法開(kāi)始時(shí)先從乘數(shù)的最低位Yn開(kāi)始,以后則使用Yn-1,Yn-2,…,Y1,因此乘數(shù)寄存器R1應(yīng)當(dāng)具有右移功能的移位寄存器。假定加法器不具備右移功能,那么由于部分積需要右移,R0也應(yīng)當(dāng)是具有右移功能的移位寄存器。

圖2.4為實(shí)現(xiàn)原碼一位乘法的硬件邏輯原理圖。有三78圖2.4原碼一位乘法的硬件邏輯原理圖

圖2.4原碼一位乘法的硬件邏輯原理圖79除了需要三個(gè)寄存器以外,還需一個(gè)加法器和一個(gè)計(jì)數(shù)器,加法器完成部分積與被乘數(shù)的累加,計(jì)數(shù)器對(duì)移位的次數(shù)進(jìn)行計(jì)數(shù),以便判斷乘法運(yùn)算是否結(jié)束。乘法開(kāi)始時(shí),“啟動(dòng)”信號(hào)使控制觸發(fā)器CX置“1”,于是開(kāi)啟時(shí)序脈沖T。計(jì)數(shù)器的初值置為n。當(dāng)乘數(shù)寄存器R1最末位為“1”時(shí),部分積Z和被乘數(shù)X在加法器中相加,其結(jié)果輸出至R0的輸入端,一旦打入控制脈沖T,控制信號(hào)LDR0使部分積右移1位,與此同時(shí),乘數(shù)寄存器R1也在控制信號(hào)LDR1作用下右移一位,且計(jì)數(shù)器i計(jì)數(shù)1次。當(dāng)計(jì)數(shù)器i=0時(shí),關(guān)閉時(shí)序脈沖T,乘法操作結(jié)束。如果將R0和R1連接起來(lái),乘法結(jié)束時(shí)乘積的高n位部分在R0,低n位部分在R1,R1中原來(lái)的乘數(shù)Y由于右移而全部丟失,乘積為2n+1位,其中包括1位符號(hào)位。

除了需要三個(gè)寄存器以外,還需一個(gè)加法器和一個(gè)計(jì)數(shù)802.3.2補(bǔ)碼一位乘法

原碼一位乘法的主要問(wèn)題是符號(hào)位不能參加運(yùn)算,而是單獨(dú)用一個(gè)異或門(mén)產(chǎn)生乘積的符號(hào)位。所以,很自然地會(huì)提出能否讓符號(hào)數(shù)字化后也參加乘法運(yùn)算,補(bǔ)碼乘法就可以實(shí)現(xiàn)符號(hào)位直接參加運(yùn)算。而有的機(jī)器中,數(shù)據(jù)以補(bǔ)碼形式存放,采用補(bǔ)碼乘法后可直接對(duì)機(jī)器中存儲(chǔ)的數(shù)據(jù)進(jìn)行乘法運(yùn)算,不需要進(jìn)行編碼形式的轉(zhuǎn)換。為了得到補(bǔ)碼一位乘法的算法,先從補(bǔ)碼和真值的轉(zhuǎn)換公式開(kāi)始。

2.3.2補(bǔ)碼一位乘法原碼一位乘法的主81⒈補(bǔ)碼與真值的轉(zhuǎn)換關(guān)系X=-X0+0.X1X2…Xn

⒈補(bǔ)碼與真值的轉(zhuǎn)換關(guān)系82⒉補(bǔ)碼的右移在補(bǔ)碼運(yùn)算的機(jī)器中,不論數(shù)的正負(fù),連同符號(hào)位將數(shù)右移一位,并保持符號(hào)位不變,相當(dāng)于乘1/2(或除2)。其證明如下:設(shè)[X]補(bǔ)=X0.X1X2…Xn

⒉補(bǔ)碼的右移83=-X0+0.X0X1X2…Xn

[X/2]補(bǔ)=X0.X0X1X2…Xn

計(jì)算機(jī)組成原理與系統(tǒng)結(jié)構(gòu)-第2章-運(yùn)算方法及運(yùn)算器課件84⒊補(bǔ)碼一位乘法設(shè)被乘數(shù)[X]補(bǔ)=X0.X1X2…Xn,乘數(shù)[Y]補(bǔ)=Y0.Y1Y2…Yn,則有:

即[X·Y]補(bǔ)=[X]補(bǔ)·[Y]補(bǔ)

⒊補(bǔ)碼一位乘法85證明如下:(1)被乘數(shù)X符號(hào)任意,乘數(shù)Y符號(hào)為正。根據(jù)補(bǔ)碼定義,可得[X]補(bǔ)=2+X=2n+1+X(mod2)[Y]補(bǔ)=Y所以[X]補(bǔ)·[Y]補(bǔ)=2n+1·Y+X·Y=2(Y1Y2…Yn)+X·Y其中Y1Y2…Yn是大于0的正整數(shù)。根據(jù)模運(yùn)算性質(zhì)有2(Y1Y2…Yn)=2(mod2)所以[X]補(bǔ)·[Y]補(bǔ)=2+X·Y=[X·Y]補(bǔ)(mod2)即[X]補(bǔ)·[Y]補(bǔ)=[X·Y]補(bǔ)(mod2)

證明如下:86(2)被乘數(shù)X符號(hào)任意,乘數(shù)Y符號(hào)為負(fù)。[X]補(bǔ)=X0.X1X2…Xn[Y]補(bǔ)=1.Y1Y2…Y=2+Y(mod2)因?yàn)閅=[Y]補(bǔ)-2=0.Y1Y2…Yn-1所以X·Y=X(0.Y1Y2…Yn)-X[X·Y]補(bǔ)=[X(0.Y1Y2…Yn)]補(bǔ)+[-X]補(bǔ)又(0.Y1Y2…Yn)>0[X(0.Y1Y2…Yn)]補(bǔ)=[X]補(bǔ)·(0.Y1Y2…Yn)所以[X·Y]補(bǔ)=[X]補(bǔ)(0.Y1Y2…Yn)補(bǔ)+[-X]補(bǔ)

(2)被乘數(shù)X符號(hào)任意,乘數(shù)Y符號(hào)為負(fù)。87(3)被乘數(shù)X和乘數(shù)Y符號(hào)任意。將(1)(2)兩種情況綜合起來(lái),得到補(bǔ)碼乘法的統(tǒng)一算式,即[X·Y]補(bǔ)=[X]補(bǔ)(0.Y1Y2…Yn)補(bǔ)-[X]補(bǔ)·Y0=[X]補(bǔ)(-Y0+0.Y1Y2…Yn)

(3)被乘數(shù)X和乘數(shù)Y符號(hào)任意。將(1)(2)兩種情88為了推導(dǎo)出邏輯實(shí)現(xiàn)的分步算法,將上式展開(kāi)得到各項(xiàng)部分積累加的形式:[X·Y]補(bǔ)=[X]補(bǔ)·[-Y0+Y12-1+Y22-2+…+Yn2-n]=[X]補(bǔ)·[-Y0+(Y1-Y12-1)+(Y22-1-Y22-2)+…+(Yn2-(n-1)-Yn2-n)]=[X]補(bǔ)·[(Y1-Y0)+(Y2-Y1)2-1+…+(Yn-Yn-1)2-(n-1)+(0-Yn)2-n]

為了推導(dǎo)出邏輯實(shí)現(xiàn)的分步算法,將上式展開(kāi)得到各項(xiàng)部分積累加的89式中Yn+1是增設(shè)的附加位,初始值為0。上式為部分積累加的形式。若定義[Z0]補(bǔ)為初始部分積,[Z1]補(bǔ)…[Zn]補(bǔ)依次為各步求得的累加并右移后的部分積,則上式可改寫(xiě)為接近于分步運(yùn)算邏輯實(shí)現(xiàn)的遞推關(guān)系:[Z0]補(bǔ)=0[Z1]補(bǔ)=2-1{[Z0]補(bǔ)+(Yn+1-Yn)[X]補(bǔ)}[Z2]補(bǔ)=2-1{[Z1]補(bǔ)+(Yn-Yn-1)[X]補(bǔ)}…[Zn]補(bǔ)=2-1{[Zn-1]補(bǔ)+(Y2-Y1)[X]補(bǔ)}

式中Yn+1是增設(shè)的附加位,初始值為0。上90這種根據(jù)相鄰兩位比較結(jié)果決定運(yùn)算操作的方法稱為“比較法”,也稱Booth算法。開(kāi)始時(shí),部分積為0,即[Z0]補(bǔ)=0,然后每一步都是在前次部分積的基礎(chǔ)上,由(Yi+1-Yi)(i=0,1,2,…,n)決定對(duì)[X]補(bǔ)的操作,再右移一位,得到新的部分積。如此重復(fù)n+1步,最后一步不移位,便得到[X·Y]補(bǔ)。

這種根據(jù)相鄰兩位比較結(jié)果決定運(yùn)算操作的方法稱為“91實(shí)現(xiàn)這種補(bǔ)碼乘法規(guī)則時(shí),在乘數(shù)最末位Yn后面要增加一位補(bǔ)充位Yn+1。開(kāi)始時(shí)Yn+

1=0,由YnYn+1判斷第一步該怎么操作;然后再由Yn-1Yn判斷第二步該怎么操作。因?yàn)槊孔鲆徊揭乙埔晃?,故做完第一步后Yn-1Yn正好移到原來(lái)YnYn+1的位置上。依此類推,所以每步都用YnYn+1位置進(jìn)行判斷,故YnYn+1兩位稱為判斷位。如果判斷位YnYn+1=01,則Yi+1-Yi=1,做加[X]補(bǔ)操作。如果判斷位YnYn+1=10,則Yi+1-Yi=-1,做減法,即做加[-X]補(bǔ)操作。如果判斷位YnYn+1=11或00,則Yi+1-Yi=0,[Zi]加0,即保持不變。

實(shí)現(xiàn)這種補(bǔ)碼乘法規(guī)則時(shí),在乘數(shù)最末位Yn后面要增92歸納布斯公式運(yùn)算規(guī)則如下:乘數(shù)補(bǔ)碼末位補(bǔ)一個(gè)0①Yi+1Yi=00或11,部分積加0,右移一位②Yi+1Yi=10,部分積加[X]補(bǔ),右移一位③Yi+1Yi=01,部分積加[-X]補(bǔ),右移一位這樣重復(fù)進(jìn)行n+1步,但最后一步不移位。包括一位符號(hào)位,所得乘積為2n+1位,其中n為數(shù)值位數(shù)。

歸納布斯公式運(yùn)算規(guī)則如下:93計(jì)算機(jī)組成原理與系統(tǒng)結(jié)構(gòu)-第2章-運(yùn)算方法及運(yùn)算器課件94例2.22X=-0.1101,Y=0.1011,用補(bǔ)碼一位乘求X*Y。解:[X]補(bǔ)=11.0011,[Y]補(bǔ)=0.1011,[-X]補(bǔ)=00.1101

例2.22X=-0.1101,Y=0.1011,用95

部分積乘數(shù)注釋

0000000.1011001,加[-X]補(bǔ)

+001101

00110100011010101111,加0

+000000

00011000001101010110,加[X]補(bǔ)

+11001111011011101100101001,加[-X]補(bǔ)

+00110100100000010000010110,加[X]補(bǔ)部分積乘數(shù)96000100000101+110011

1101110001結(jié)果:[X*Y]補(bǔ)=1.01110001X*Y=-0.10001111000100972.3.3原碼兩位乘法

根據(jù)乘數(shù)每?jī)晌坏娜≈登闆r,一次求出對(duì)應(yīng)于該兩位的部分積。此時(shí),只需要增加少量邏輯電路,就可使乘法速度提高一倍。

兩位乘數(shù)有以下四種組合:00——相當(dāng)于0*X。部分積右移2位01——相當(dāng)于1*X。部分積+X,右移2位10——相當(dāng)于2*X。部分積+2X,右移2位11——相當(dāng)于3*X。部分積+3X,右移2位

2.3.3原碼兩位乘法根據(jù)乘數(shù)每?jī)晌?8+3X一般不能一次完成,解決方法是:用4X–X來(lái)代替+3X,本次運(yùn)算–X,4X留到下一步執(zhí)行,因?yàn)椴糠址e已經(jīng)右移了兩位,到了下一步就變成了+X。原碼兩位乘所需要的硬件支持是加一個(gè)觸發(fā)器C來(lái)記錄是否欠一個(gè)4X,如果欠下一個(gè)4X,則C=1,否則C=0。因此實(shí)際操作用Yi-1、Yi、C三位來(lái)控制,運(yùn)算規(guī)則如表2.4所示。表2.4中Zi為部分積。

+3X一般不能一次完成,解決方法是:用4X–X來(lái)代替+399表2.4原碼兩位乘法規(guī)則

表2.4原碼兩位乘法規(guī)則100例2.23X=0.100111,Y=0.100111用原碼兩位乘計(jì)算X*Y解:[-X]補(bǔ)=1.011001

例2.23X=0.100111,Y=0.10011101部分積乘數(shù)欠位

000000001001110+[-X]補(bǔ)1101100111011001111101100110011

+2X0100111001000100000100010001100+2X

010011100101111100010111110001

0

部分積乘數(shù)欠位102X0Y0=0

∴[X*Y]原=0.010111110001+X0Y0=0+1032.3.4陣列乘法

在科學(xué)計(jì)算用的計(jì)算機(jī)中,乘法運(yùn)算大約占了全部算術(shù)運(yùn)算操作的1/3。因此,采用高速乘法部件,對(duì)提高計(jì)算機(jī)的計(jì)算速度和計(jì)算效率都是十分必要的。硬件乘法器的常規(guī)設(shè)計(jì)采用“串行移位”和“并行加法”相結(jié)合的方法,這種方法不需要很多器件。然而加法-移位的方法實(shí)在太慢,執(zhí)行一次乘法的時(shí)間至少是執(zhí)行一次加法時(shí)間的n倍,不能滿足當(dāng)前科學(xué)和工程對(duì)高速乘法提出的要求。自從大規(guī)模集成電路問(wèn)世以來(lái),高速的單元陣列乘法器應(yīng)運(yùn)而生,出現(xiàn)了各種形式的陣列乘法器,提供了極快的計(jì)算速度。

2.3.4陣列乘法在科學(xué)計(jì)算用的計(jì)算機(jī)中,乘法104為了進(jìn)一步提高乘法運(yùn)算速度,可采用類似于人工計(jì)算的方法,用圖2.6所示的一個(gè)陣列乘法器完成X·Y乘法運(yùn)算(X=X1X2X3X4,Y=Y1Y2Y3Y4)。陣列的每一行送入乘數(shù)Y的每一位數(shù)位,而各行錯(cuò)開(kāi)形成的每一斜列則送入被乘數(shù)的每一數(shù)位。圖中每一個(gè)方框包括一個(gè)與門(mén)和一位全加器。該方案所用加法器數(shù)量很多,但內(nèi)部結(jié)構(gòu)規(guī)則性強(qiáng),適于用超大規(guī)模集成電路實(shí)現(xiàn)。

為了進(jìn)一步提高乘法運(yùn)算速度,可采用類似于人工計(jì)算105圖2.6陣列乘法器

圖2.6陣列乘法器1062.4定點(diǎn)除法運(yùn)算

除法運(yùn)算是計(jì)算機(jī)的基本運(yùn)算之一。雖然定點(diǎn)除法指令的執(zhí)行頻度很?。ㄒ话銥?.2%),但它是算術(shù)運(yùn)算不可缺少的基本運(yùn)算。除法運(yùn)算的方法很多,如原碼除法、補(bǔ)碼除法、跳0跳1法和迭代法等,在本節(jié)中我們只介紹原碼除法和補(bǔ)碼除法。

2.4定點(diǎn)除法運(yùn)算除法運(yùn)算是計(jì)算機(jī)的基本運(yùn)1072.4.1定點(diǎn)原碼除法

兩個(gè)原碼表示的數(shù)相除時(shí),商的符號(hào)由兩個(gè)數(shù)的符號(hào)按位異或求得,商的數(shù)值部分由兩數(shù)的數(shù)值部分相除求得。設(shè)被除數(shù)[X]原=X0.X1X2…Xn,除數(shù)[Y]原=Y0.Y1Y2…Yn。則商Q=X/Y,其原碼為[Q]原=(X0⊕Y0).(X1X2…Xn/Y1Y2…Yn)式中,X0為被除數(shù)的符號(hào)位,Y0為除數(shù)的符號(hào)位。商的符號(hào)運(yùn)算Q0=X0⊕Y0,與原碼乘法一樣。商的數(shù)值部分的運(yùn)算實(shí)質(zhì)上是兩個(gè)正數(shù)求商的運(yùn)算。

2.4.1定點(diǎn)原碼除法兩個(gè)原碼表示的108根據(jù)十進(jìn)制除法運(yùn)算方法,很容易得到二進(jìn)制數(shù)除法的運(yùn)算方法,區(qū)別在于,在二進(jìn)制中,商的每一位不是“1”就是“0”,其算法則更簡(jiǎn)單。商的數(shù)值部分的運(yùn)算,由于定點(diǎn)小數(shù)的絕對(duì)值小于1,如果被除數(shù)大于或等于除數(shù),則商就大于或等于1,因而會(huì)產(chǎn)生溢出,這是不允許的。因此,在執(zhí)行除法以前,先要判別是否有溢出,無(wú)溢出時(shí)才執(zhí)行除法運(yùn)算,否則不進(jìn)行,由程序進(jìn)行處理。判別溢出的方法是被除數(shù)的絕對(duì)值減去除

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論