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

下載本文檔

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

文檔簡(jiǎn)介

第二章運(yùn)算方法與運(yùn)算器計(jì)算機(jī)中的數(shù)據(jù)表示,熟悉包括定點(diǎn)數(shù)、浮點(diǎn)數(shù)、字符、十進(jìn)制數(shù)的表示方法;原碼、補(bǔ)碼、反碼、移碼等碼制之間的關(guān)系以及各碼制之間真值數(shù)的轉(zhuǎn)換;補(bǔ)碼的加減運(yùn)算,定點(diǎn)原碼一位乘、除運(yùn)算,定點(diǎn)補(bǔ)碼一位乘、除運(yùn)算及其邏輯結(jié)構(gòu);變形補(bǔ)碼、運(yùn)算方法(尤其是補(bǔ)碼)的理解,溢出、進(jìn)位等問題的出現(xiàn)和解決方法;定點(diǎn)數(shù)的變形補(bǔ)碼加減運(yùn)算;原、補(bǔ)碼乘法和除法運(yùn)算;浮點(diǎn)運(yùn)算方法和浮點(diǎn)數(shù)的規(guī)格化及其邏輯結(jié)構(gòu);運(yùn)算器的基本結(jié)構(gòu)和設(shè)計(jì)方法,解已知芯片功能。本章要求:主要內(nèi)容:2.1數(shù)據(jù)與文字的表示方法。2.2定點(diǎn)加、減法運(yùn)算。

2.3定點(diǎn)乘法運(yùn)算。2.6浮點(diǎn)運(yùn)算方法與浮點(diǎn)運(yùn)算器。2.5定點(diǎn)運(yùn)算器的組成與結(jié)構(gòu)2.4定點(diǎn)除法運(yùn)算。2.1數(shù)據(jù)信息的表示方法2.1.1

數(shù)據(jù)數(shù)值的表示方法2.1.2

非數(shù)據(jù)數(shù)值的表示方法2.1.1數(shù)值數(shù)據(jù)的表示正、負(fù)符號(hào)二進(jìn)制的絕對(duì)值真值機(jī)器數(shù)0或1二進(jìn)制的絕對(duì)值符號(hào)數(shù)值部分1.真值與機(jī)器數(shù)1.真值與機(jī)器數(shù)例:設(shè)機(jī)器字為8b字長(zhǎng),數(shù)N1的真值為(+1001110)2,數(shù)N2的真值為(-1001110)2,則N1

、N2對(duì)應(yīng)的機(jī)器數(shù)為:0N1100111011001110N2符號(hào)數(shù)值部分2.數(shù)的機(jī)器碼表示通常有四種表示法:原碼表示法補(bǔ)碼表示法反碼表示法移碼表示法(1)原碼表示法0或1二進(jìn)制的絕對(duì)值純小數(shù)原碼表示定義純整數(shù)原碼表示定義原碼純小數(shù)原碼表示定義純小數(shù)時(shí),設(shè)x=x0.x1x2…

xn-1,其中x0為符號(hào)位,共n位字長(zhǎng),則

X0≤X≤1-2-(n-1)

1-X=1+|x|-(1-2-(n-1))≤X≤0

[X]原=例如,若x1=+0.1011x2=-0.1011,字長(zhǎng)為8b,則其原碼分別為:[x1]原=0.1011000[x2]原=1+0.1011000=1.1011000零的原碼有正零和負(fù)零兩種形式:[+0]原=0.00...00[-0]原=1.00...00純整數(shù)原碼表示定義純整數(shù)時(shí),設(shè)x=x0x1x2…

xn-1,其中x0為符號(hào)位,共n位字長(zhǎng),則

X0≤X≤2(n-1)-1

2(n-1)-X=2(n-1)+|x|-(2(n-1)-

1)≤X≤0

[X]原=例如,若x1=+1011x2=-1011,字長(zhǎng)為8b,則其原碼分別為:[x1]原=00001011[x2]原=27+00001011=10001011零的原碼有正零和負(fù)零兩種形式:[+0]原=000...00[-0]原=100...00采用原碼表示法簡(jiǎn)單易懂,但它的最大缺點(diǎn)是加法運(yùn)算復(fù)雜。當(dāng)兩數(shù)相加時(shí),如果是同號(hào)則數(shù)值相加;如果是異號(hào),則要進(jìn)行減法。而在進(jìn)行減法時(shí)還要比較絕對(duì)值的大小,然后大數(shù)減去小數(shù),最后還要給結(jié)果選擇符號(hào)。(2)補(bǔ)碼表示法計(jì)算機(jī)中,運(yùn)算結(jié)果≥模數(shù)時(shí),說明該值已超出機(jī)器的表示范圍,模數(shù)自然丟掉。模/模數(shù):計(jì)算器具的容量。計(jì)算機(jī)中,機(jī)器數(shù)表示數(shù)據(jù)的字長(zhǎng)即位數(shù)是固定的。n位數(shù)的模數(shù)=n位數(shù)全為1后,再在最末位加1n位整數(shù)的模數(shù)=2n

n位小數(shù)的模數(shù)=2純小數(shù)補(bǔ)碼表示定義純小數(shù)時(shí),設(shè)x=x0.x1x2…

xn-1,其中x0為符號(hào)位,共n位字長(zhǎng),則

X0≤X≤1-2-(n-1)

2+X=2-|x|-1

≤X≤0

[X]補(bǔ)=例如,若x1=+0.1011x2=-0.1011,字長(zhǎng)為8b,則其原碼分別為:[x1]補(bǔ)=0.1011000[x2]補(bǔ)=2-0.1011000=1.0101000補(bǔ)碼的零只有一個(gè),即0.0000000。補(bǔ)碼1.0000000表示負(fù)1(mod2)純整數(shù)補(bǔ)碼表示定義純整數(shù)時(shí),設(shè)x=x0x1x2…

xn-1,其中x0為符號(hào)位,共n位字長(zhǎng),則

X0≤X≤2(n-1)-1

2n+X=2n-|x|-2(n-1)≤X≤0

[X]補(bǔ)=例如,若x1=+1011x2=-1011,字長(zhǎng)為8b,則其原碼分別為:[x1]補(bǔ)=00001011[x2]補(bǔ)=28-00001011=11110100(mod2n)對(duì)補(bǔ)碼進(jìn)行運(yùn)算,可將加、減運(yùn)算統(tǒng)一成加法運(yùn)算,降低了對(duì)計(jì)算機(jī)運(yùn)算器的要求,因此得到廣泛的應(yīng)用。原碼求補(bǔ)碼的方法:正數(shù),不變(相同)即原碼=補(bǔ)碼;負(fù)數(shù),符號(hào)位不變,數(shù)值位按位取反加1。補(bǔ)碼求真值方法:正數(shù),[x]補(bǔ)=[x]原負(fù)數(shù),對(duì)[[x]補(bǔ)]補(bǔ)=

[x]原原碼求真值:[x]原符號(hào)位0→+,1→-。補(bǔ)碼的運(yùn)算結(jié)果仍為補(bǔ)碼。(3)反碼表示法對(duì)于正數(shù)來說,反碼=原碼=補(bǔ)碼。對(duì)于負(fù)數(shù)來說,符號(hào)位:與原碼、補(bǔ)碼的符號(hào)位定義相同。數(shù)值:將原碼的數(shù)值位按位變反。例如,若x1=+0.1011x2=-0.1011,字長(zhǎng)為8b。[x1]反=0.1011000=[x1]原=[x1]補(bǔ)[x2]反=1.0100111[x2]補(bǔ)=1.0101000[x2]原=1.1011000反碼的零有兩個(gè)0.0000和1.11111(4)移碼移碼也叫增碼,常用來表示整數(shù)形式的計(jì)算機(jī)浮點(diǎn)數(shù)的階碼(表示指數(shù))。若純整數(shù)X為n位(包括符號(hào)位),則其移碼定義為:

[x]移=2n-1+[x]補(bǔ)-2n-1≤X≤2n-1-1方法:補(bǔ)碼將符號(hào)位求反可得移碼設(shè)字長(zhǎng)為8b,若x1=+1000(2),

x2=-1000(2),

[x1]補(bǔ)=00001000[x1]移=10001000[x2]補(bǔ)=11111000[x2]移=01111000原、反、補(bǔ)、移碼轉(zhuǎn)換方法正數(shù)原碼=反碼=補(bǔ)碼移碼=補(bǔ)碼符號(hào)位取反,數(shù)值位不變負(fù)數(shù)反碼=原碼符號(hào)位不變,數(shù)值位取反補(bǔ)碼=反碼末位加1移碼=補(bǔ)碼符號(hào)位取反,數(shù)值位不變3.?dāng)?shù)的定點(diǎn)表示計(jì)算機(jī)中小數(shù)的小數(shù)點(diǎn)并不是用某個(gè)數(shù)字來表示的,而是用隱含的小數(shù)點(diǎn)的位置來表示。根據(jù)小數(shù)點(diǎn)的位置是否固定,又可分為定點(diǎn)表示定點(diǎn)小數(shù)表示形式定點(diǎn)整數(shù)表示形式浮點(diǎn)表示3.?dāng)?shù)的定點(diǎn)表示

⑴定點(diǎn)小數(shù)將小數(shù)點(diǎn)固定在符號(hào)位d0之后、數(shù)值最高位d-1之前,這就是定點(diǎn)小數(shù)形式。其格式如下所示:⑵定點(diǎn)整數(shù)將小數(shù)點(diǎn)固定在數(shù)的最低位d-(n-1)之后,這就是定點(diǎn)整數(shù)形式。其格式如下所示:d0d-1d-2……………d-(n-1)△d0d-1d-2…………….d-(n-1)△①設(shè)字長(zhǎng)為8b,用原碼表示時(shí),其表示范圍如下:

最小負(fù)數(shù)最大負(fù)數(shù)最小正數(shù)最大正數(shù)

1.11111111.00000010.00000010.1111111-(1-2-7)-2-72-71-2-7定點(diǎn)小數(shù)的表示范圍:②設(shè)字長(zhǎng)為8b,用補(bǔ)碼表示時(shí),其表示范圍如下:

最小負(fù)數(shù)最大負(fù)數(shù)最小正數(shù)最大正數(shù)

1.00000001.11111110.00000010.1111111

-1-2-72-71-2-7①設(shè)字長(zhǎng)為8b,用原碼表示時(shí),其表示范圍如下:

最小負(fù)數(shù)最大負(fù)數(shù)最小正數(shù)最大正數(shù)

11111111100000010000000101111111-(27-1)=-127-1

+1

27-1=127②設(shè)字長(zhǎng)為8b,用補(bǔ)碼表示時(shí),其表示范圍如下:

最小負(fù)數(shù)最大負(fù)數(shù)最小正數(shù)最大正數(shù)

10000000111111110000000101111111

-27=-128-1

+1

27-1=127定點(diǎn)整數(shù)的表示范圍:4.?dāng)?shù)的浮點(diǎn)表示法⑴浮點(diǎn)數(shù)的表示格式浮點(diǎn)表示法把字長(zhǎng)分成階碼(表示指數(shù))和尾數(shù)(表示數(shù)值)兩部分。X=D×RE階碼E:用整數(shù)形式表示,指明小數(shù)點(diǎn)在數(shù)據(jù)中的位置,決定了浮點(diǎn)數(shù)的表示范圍。尾數(shù)D:用定點(diǎn)小數(shù)表示,給出有效數(shù)字的位數(shù)決定了浮點(diǎn)數(shù)的表示精度;階碼的底R(shí):一般為2、8或16,且隱含規(guī)定,在浮點(diǎn)數(shù)表示中不出現(xiàn),通常取2;JEm-1…E1SD-1…D-(n-1)階符階碼值數(shù)符尾數(shù)值決定范圍決定精度第一種浮點(diǎn)格式補(bǔ)碼定點(diǎn)整數(shù)形式補(bǔ)碼定點(diǎn)小數(shù)表示形式浮點(diǎn)數(shù)另一種格式:

SJEm-1…E1D-1…D-(n-1)階符階碼值數(shù)符尾數(shù)值存儲(chǔ)的數(shù)X可表示為X=D×2E。補(bǔ)碼定點(diǎn)整數(shù)形式⑵浮點(diǎn)數(shù)的規(guī)格化為了使浮點(diǎn)表示法有盡可能高的精度:措施之一,是增加位數(shù),或者是在字長(zhǎng)一定的情況下,將階碼和尾數(shù)所占的位數(shù)協(xié)調(diào)好;措施之二,是采用浮點(diǎn)數(shù)規(guī)格化表示。即充分利用尾數(shù)的二進(jìn)制數(shù)位來表示更多的有效數(shù)字。浮點(diǎn)數(shù)規(guī)格化①原碼規(guī)格化后正數(shù)為0.1×……×的形式。負(fù)數(shù)為1.1×……×的形式。②補(bǔ)碼規(guī)格化后正數(shù)為0.1×……×的形式。負(fù)數(shù)為1.0×……×的形式。通過調(diào)整階碼,使其尾數(shù)D滿足下面形式的數(shù):當(dāng)尾數(shù)的值不為0時(shí),尾數(shù)域的最高有效位應(yīng)為1,否則以修改階碼同時(shí)左右移小數(shù)點(diǎn)的辦法,使其變成這一表示形式。⑶浮點(diǎn)數(shù)的表示舉例某機(jī)用32b表示一個(gè)數(shù),階碼部分占8b(含一位符號(hào)位),尾數(shù)部分占24b(含一位符號(hào)位)。設(shè)x1=-256.5,x2=127/256,試寫出x1和x2的兩種浮點(diǎn)數(shù)表示格式。例2.1

①x1=-256.5=-(100000000.1)2=-29×0.1000000001

階碼的補(bǔ)碼為(+9)補(bǔ)=00001001

階碼的移碼為(+9)移=10001001

尾數(shù)=1.01111111110000000000000(規(guī)格化補(bǔ)碼)第一種浮點(diǎn)表示的格式為

00001001,1.01111111110000000000000

第二種浮點(diǎn)表示的格式為

1,10001001,01111111110000000000000解:移碼補(bǔ)碼②x2=127/256=(1111111)2×2-8=2-1×0.1111111

階碼的補(bǔ)碼為(-1)補(bǔ)=11111111

階碼的移碼為(-1)移=01111111

尾數(shù)=0.11111110000000000000000(規(guī)格化補(bǔ)碼)第一種浮點(diǎn)表示的格式為

11111111,0.11111110000000000000000

第二種浮點(diǎn)表示的格式為

0,01111111,11111110000000000000000解⑷浮點(diǎn)數(shù)的表示范圍

設(shè)階碼和尾數(shù)各為4b(各包含一個(gè)符號(hào)位),則其浮點(diǎn)數(shù)的表示表示范圍分別為:①階碼范圍

最小負(fù)數(shù)最大負(fù)數(shù)最小正數(shù)最大正數(shù)

1000111100010111 -27=-8-1

+1

23-1=7②規(guī)格化尾數(shù)表示范圍

最小負(fù)數(shù)最大負(fù)數(shù)最小正數(shù)最大正數(shù)

1.0001.0110.1000.111-1-(2-3+2-1)

2-11-2-3二進(jìn)制補(bǔ)碼十進(jìn)制真值二進(jìn)制補(bǔ)碼十進(jìn)制真值

最小負(fù)數(shù)最大負(fù)數(shù)最小正數(shù)最大正數(shù)

20111×1.00021000×1.01121000×0.10020111×0.11121111×1.00020000×1.01120000×0.10021111×0.111-27×1-2-8×(2-3+2-1)

2-8×2-127×(1-2-3)③規(guī)格化浮點(diǎn)數(shù)表示范圍二進(jìn)制補(bǔ)碼階碼用移碼十進(jìn)制真值這里規(guī)格化尾數(shù)的最大負(fù)數(shù)的補(bǔ)碼是1.01…1的形式,而不是1.10…0的形式,是因?yàn)?.10…0不是規(guī)格化數(shù),所以規(guī)格化尾數(shù)的最大負(fù)數(shù)應(yīng)是:

-(0.10…0+0.0…01)=-0.10…01,而[-0.10…1]補(bǔ)=1.01…1,即-(2-(n-1)+2-1)注意:(5)溢出問題定點(diǎn)形式判斷溢出的辦法是對(duì)數(shù)值本身進(jìn)行判斷,浮點(diǎn)數(shù)是對(duì)規(guī)格化后的階碼進(jìn)行判斷。當(dāng)一個(gè)浮點(diǎn)數(shù)階碼大于機(jī)器的最大階碼,稱為上溢;機(jī)器產(chǎn)生上溢時(shí),不能再繼續(xù)運(yùn)算,一般要進(jìn)行中斷處理。而小于最小階碼時(shí),稱為下溢。出現(xiàn)下溢時(shí),一般規(guī)定把浮點(diǎn)數(shù)各位強(qiáng)迫為零(當(dāng)做零處理),機(jī)器仍可繼續(xù)進(jìn)行運(yùn)算。2.1.2非數(shù)值數(shù)據(jù)的表示非數(shù)值數(shù)據(jù):文字和符號(hào)(字符)、圖像、聲音等非數(shù)值數(shù)據(jù)的表示:對(duì)其進(jìn)行二進(jìn)制編碼1、字符編碼2、漢字編碼1、字符編碼字符的表示:采用字符編碼,即用規(guī)定的二進(jìn)制數(shù)表示文字和符號(hào)的方法。ASCII碼(AmericanStandardCodeForInformationInterchange):美國(guó)標(biāo)準(zhǔn)信息交換碼,為國(guó)際標(biāo)準(zhǔn)。常用的7位ASCII碼的每個(gè)字符都由7個(gè)二進(jìn)制位b6~b0

表示,有128個(gè)編碼,最多可表示128種字符;其中包括:10個(gè)數(shù)字‘0’~‘9’:30H~39H,順序排列■26個(gè)小寫字母‘a(chǎn)’~‘z’:61H~7AH,順序排列■26個(gè)大寫字母‘A’~‘Z’:41H~5AH,順序排列■各種運(yùn)算符號(hào)和標(biāo)點(diǎn)符號(hào)等。ASCII碼編碼表0000010100111001011101110000NULDLESP0

P‵p0001SOHDC1!1AQaq0010STXDC2“2BRbr0011ETXDC3#3CScs0100EOTDC4¥4DTdt0101ENQNAK%5EUeu0110ACKSYN&6FVfv0111BELETB′7GWgw1000BSCAN(8HXhx1001HTEM)9IYiy1010LFSUB*:JZjz1011VTESC+;K[k{1100FFFS,〈L、l|1101CRGS-=M]m}1110SORS.〉N^n~1111SIUS/?O_oDEL其中95個(gè)編碼,對(duì)應(yīng)著計(jì)算機(jī)終端能敲入并且可以顯示的95個(gè)字符,打印機(jī)設(shè)備也能打印這95個(gè)字符,如大小寫各26個(gè)英文字母,0—9這10個(gè)數(shù)字符,通用的運(yùn)算符和標(biāo)點(diǎn)符號(hào)+,-,*,/,>,=,<等等。在計(jì)算機(jī)中,用1B(一個(gè)字節(jié))表示一個(gè)ASCII碼,其最高一位(b7位)填0,余下的7b可以給出128個(gè)編碼,表示128個(gè)不同的字符和控制碼。另外的33個(gè)字符,其編碼值為0—31和127,則不對(duì)應(yīng)任何一個(gè)可以顯示或打印的實(shí)際字符,它們被用作控制碼,控制計(jì)算機(jī)某些外圍設(shè)備的工作特性和某些計(jì)算機(jī)軟件的運(yùn)行情況。2、漢字編碼對(duì)于漢字,計(jì)算機(jī)的處理技術(shù)必須解決三個(gè)問題:漢字輸入漢字儲(chǔ)存與交換漢字輸出它們分別對(duì)應(yīng)著漢字輸入碼、內(nèi)碼、字模碼的概念。因此,漢字編碼系統(tǒng)存在以下三種編碼:1、漢字輸入碼2、漢字內(nèi)碼3、漢字字模碼(1)漢字輸入碼漢字輸入碼也稱外碼,是為了將漢字輸入計(jì)算機(jī)而編制的代碼,是代表某一漢字的一串鍵盤符號(hào)。漢字輸入碼種類:數(shù)字編碼:如區(qū)位碼、國(guó)標(biāo)碼、電報(bào)碼等。拼音編碼:如全拼碼、雙拼碼、簡(jiǎn)拼碼等。字形編碼:如王碼五筆、鄭碼、大眾碼等。音形編碼:如表形碼、智能ABC等。兩種典型的數(shù)字編碼:區(qū)位碼:是將國(guó)家標(biāo)準(zhǔn)局公布的6763個(gè)兩級(jí)漢字分為94個(gè)區(qū),每個(gè)區(qū)分94位,實(shí)際上把漢字表示成二維數(shù)組,每個(gè)漢字在數(shù)組中的下標(biāo)就是區(qū)位碼。例如“中”字位于54區(qū)48位,“中”字的區(qū)位碼即為“5448”。國(guó)標(biāo)碼:將區(qū)位碼加2020H,占用兩個(gè)字節(jié)。例如“中”字的國(guó)標(biāo)碼為區(qū)位碼5448的區(qū)碼和位碼轉(zhuǎn)化為16進(jìn)制,為3630H,再加2020H得國(guó)標(biāo)碼5650H。(1)漢字輸入碼(2)漢字機(jī)內(nèi)碼漢字內(nèi)碼是用于漢字信息的存儲(chǔ)、交換、檢索等操作的機(jī)內(nèi)代碼,一般采用兩個(gè)字節(jié)表示。漢字可以通過不同的輸入法輸入,但其內(nèi)碼在計(jì)算機(jī)中是唯一的。英文字符的機(jī)內(nèi)代碼是7位的ASCII碼,當(dāng)用一個(gè)字節(jié)表示時(shí),最高位為“0”。為了與英文字符能相互區(qū)別,漢字機(jī)內(nèi)代碼中兩個(gè)字節(jié)的最高位均規(guī)定為“1”。機(jī)內(nèi)碼等于漢字國(guó)標(biāo)碼加上8080H。例如“中”字的機(jī)內(nèi)碼為D6D0H。(3)漢字字模碼漢字字模碼又稱漢字字形碼,它是將漢字字形經(jīng)過點(diǎn)陣數(shù)字化后形成的一串二進(jìn)制數(shù),用于漢字的顯示和打印。根據(jù)漢字輸出的要求不同,點(diǎn)陣有以下幾種:簡(jiǎn)易型漢字:16×16,32字節(jié)/漢字普通型漢字:24×24,72字節(jié)/漢字提高型漢字:32×32,128字節(jié)/漢字。漢字字庫:將所有漢字的字模點(diǎn)陣代碼按內(nèi)碼順序集中起來,構(gòu)成了漢字庫。漢字輸入碼漢字交換碼(國(guó)標(biāo)碼)漢字輸入法程序漢字字模碼字形檢索程序漢字顯示漢字打印漢字內(nèi)碼+8080H2.2定點(diǎn)加、減運(yùn)算2.2.1定點(diǎn)補(bǔ)碼加、減法與溢出2.2.2基本的二進(jìn)制加、減法器2.2.1定點(diǎn)補(bǔ)碼加、減法與溢出在計(jì)算機(jī)中,常將數(shù)值轉(zhuǎn)換成補(bǔ)碼后再進(jìn)行加減運(yùn)算。其優(yōu)點(diǎn)是,可將減法運(yùn)算轉(zhuǎn)化為加法運(yùn)算,這樣可以簡(jiǎn)化機(jī)器內(nèi)部硬件電路的結(jié)構(gòu)。補(bǔ)碼運(yùn)算的特點(diǎn)是,符號(hào)位和數(shù)值位一起參加運(yùn)算。補(bǔ)碼加減運(yùn)算公式(1)補(bǔ)碼的加法運(yùn)算其公式為:[x]補(bǔ)+[y]補(bǔ)=[x+y]補(bǔ)(2)補(bǔ)碼的減法運(yùn)算其公式為:[x]

補(bǔ)

-[y]

補(bǔ) =[x-y]

補(bǔ)

=[x+(-y)]

補(bǔ)

=[x]

補(bǔ)

+[-y]

補(bǔ)[x]補(bǔ)+[y]補(bǔ)=[x+y]補(bǔ)(mod2)(2-1)

(1)補(bǔ)碼加法的公式是現(xiàn)分4種情況來證明。假設(shè)采用定點(diǎn)小數(shù)表示,因此證明的先決條件是︱x︱﹤1,︱y︱﹤1,︱x+y︱﹤1。①x﹥0,y﹥0,則x+y﹥0。

相加兩數(shù)都是正數(shù),故其和也一定是正數(shù)。正數(shù)的補(bǔ)碼和原碼是一樣的,可得:

[x]補(bǔ)+[y]補(bǔ)=x+y=[x+y]補(bǔ)

(mod2)②x﹥0,y﹤0,則x+y>0或x+y<0。相加的兩數(shù)一個(gè)為正,一個(gè)為負(fù),因此相加結(jié)果有正、負(fù)兩種可能。根據(jù)補(bǔ)碼定義,

[x]補(bǔ)=x,[y]補(bǔ)=2+y

∴[x]補(bǔ)+[y]補(bǔ)=x+2+y

=2+(x+y)當(dāng)x+y>0時(shí),2+(x+y)>2,進(jìn)位2必丟失,又因(x+y)>0,故[x]補(bǔ)+[y]補(bǔ)=x+y=[x+y]補(bǔ)

(mod2)當(dāng)x+y<0時(shí),2+(x+y)<2,又因(x+y)<0,故

[x]補(bǔ)+[y]補(bǔ)=2+(x+y)

=[x+y]補(bǔ)

(mod2)③x<0,y>0,則x+y>0或x+y<0。這種情況和第2種情況一樣,把x和y的位置對(duì)調(diào)即得證。④x<0,y<0,則x+y<0。相加兩數(shù)都是負(fù)數(shù),則其和也一定是負(fù)數(shù)?!遊x]補(bǔ)=2+x,[y]補(bǔ)=2+y∴[x]補(bǔ)+[y]補(bǔ) =2+x+2+y

=2+(2+x+y)上式右邊分為”2”和(2+x+y)兩部分。由于(x+y)是負(fù)數(shù),且其絕對(duì)值又小于1,那么(2+x+y)就一定是小于2而大于1的數(shù),進(jìn)位”2”必丟失。又因(x+y)<0,所以[x]補(bǔ)+[y]補(bǔ)=(2+x+y)

2+(x+y)

=[x+y]補(bǔ)(mod2)[x]補(bǔ)+[y]補(bǔ)=2+(2+x+y)[例]x=+0.1011,y=-0.0101,求x+y。[解:][x]補(bǔ)=0.1011,[y]補(bǔ)=1.1011[x]補(bǔ)0.1011+[y]補(bǔ)1.1011

[x+y]補(bǔ)10.0110

所以x+y=0.0110數(shù)用補(bǔ)碼表示時(shí),減法運(yùn)算的公式為[x-y]補(bǔ)=[x]補(bǔ)-[y]補(bǔ)=[x]補(bǔ)+[-y]補(bǔ)(2-2)只要證明[-y]補(bǔ)=-[y]補(bǔ),上式即得證。

(2)補(bǔ)碼的減法運(yùn)算證明

:∵[x+y]補(bǔ)=[x]補(bǔ)+[y]補(bǔ)

(mod2)∴[y]補(bǔ)=[x+y]補(bǔ)-[x]補(bǔ)

(2-3)∵[x-y]補(bǔ)=[x+(-y)]補(bǔ)

=[x]補(bǔ)+[-y]補(bǔ)∴[-y]補(bǔ)=[x-y]補(bǔ)-[x]補(bǔ)

(2-4)將式(2-3)與(2-4)相加,得

[-y]補(bǔ)+[y]補(bǔ)=[x+y]補(bǔ)+[x-y]補(bǔ)-[x]補(bǔ)-[x]

=[x+y+x-y]補(bǔ)-[x]補(bǔ)-[x]補(bǔ)=[x+x]補(bǔ)-[x]補(bǔ)-[x]補(bǔ)=0

故[-y]補(bǔ)=-[y]補(bǔ)(mod2)(2-5)

另一種證明方法:利用補(bǔ)碼加法公式,[0]補(bǔ)=0[y]補(bǔ)+

[-y]補(bǔ)=[y+(-y)]補(bǔ)

=[y

-y

]補(bǔ) =[0

]補(bǔ)=0故[-y]補(bǔ)=-

[y]補(bǔ)

對(duì)于定點(diǎn)小數(shù)和定點(diǎn)整數(shù)都適用[-y]補(bǔ)的含義:是將[y]補(bǔ)的各位(包括符號(hào)位)全部取反,末位加“1”。從[y]補(bǔ)求[-y]補(bǔ)的法則是:

對(duì)[y]補(bǔ)各位(包括符號(hào)位)求反且最末位加1,即可得到[-y]補(bǔ)。寫成運(yùn)算表達(dá)式,則為

[-y]補(bǔ)=﹁[y]補(bǔ)+2-n

其中:

符號(hào)﹁表示對(duì)[y]補(bǔ)作包括符號(hào)位在內(nèi)的求反操作,2-n表示最末位的1。[例1]

已知x1=-0.1110,x2=+0.1101,

求:[x1]補(bǔ),[-x1]補(bǔ),[x2]補(bǔ),[-x2]補(bǔ)。[解:]

[x1]補(bǔ)=1.0010

[-x1]補(bǔ)=﹁[x1]補(bǔ)+2-4

=0.1101+0.0001=0.1110

[x2]補(bǔ)=0.1101

[-x2]補(bǔ)=﹁[x2]補(bǔ)+2-4

=1.0010+0.0001=1.0011[例2]

x=+0.1101,y=+0.0110,求x-y。[解:][x]補(bǔ)=0.1101,[y]補(bǔ)=0.0110,[-y]補(bǔ)=1.1010[x]補(bǔ)0.1101+[-y]補(bǔ)1.1010

[x-y]補(bǔ)10.0111所以

x-y=+0.0111參加運(yùn)算的數(shù)都用補(bǔ)碼表示。數(shù)據(jù)的符號(hào)與數(shù)據(jù)一樣參加運(yùn)算。求差時(shí)將減數(shù)求補(bǔ),用求和代替求差。運(yùn)算結(jié)果為補(bǔ)碼。如果符號(hào)位為0,表明運(yùn)算結(jié)果為正;如果符號(hào)位為1,則表明運(yùn)算結(jié)果為負(fù)。符號(hào)位的進(jìn)位為模值,應(yīng)該丟掉。⑶加減法運(yùn)算規(guī)則3.溢出判斷法機(jī)器定點(diǎn)小數(shù)表示在定點(diǎn)小數(shù)機(jī)器中,數(shù)的表示范圍為|x|<1。在運(yùn)算過程中如出現(xiàn)大于1的現(xiàn)象,稱為“溢出”。在定點(diǎn)機(jī)中,正常情況下溢出是不允許的。[例]

x=+0.1011,y=+0.1001,求x+y。[解:]

[x]補(bǔ)=0.1011[y]補(bǔ)=0.1001

[x]補(bǔ)0.1011+[y]補(bǔ)0.1001[x+y]補(bǔ)1.0100兩個(gè)正數(shù)相加的結(jié)果成為負(fù)數(shù),這顯然是錯(cuò)誤的。[例]

x=-0.1101,y=-0.1011,求x+y。[解:][x]補(bǔ)=1.0011[y]補(bǔ)=1.0101

[x]補(bǔ)1.0011+[y]補(bǔ)1.0101[x+y]補(bǔ)0.1000兩個(gè)負(fù)數(shù)相加的結(jié)果成為正數(shù),這同樣是錯(cuò)誤的。之所以發(fā)生錯(cuò)誤,是因?yàn)檫\(yùn)算結(jié)果產(chǎn)生了溢出。兩個(gè)正數(shù)相加,結(jié)果大于機(jī)器所能表示的最大正數(shù),稱為上溢。而兩個(gè)負(fù)數(shù)相加,結(jié)果小于機(jī)器所能表示的最小負(fù)數(shù),稱為下溢。為了判斷“溢出”是否發(fā)生,可采用兩種檢測(cè)的方法。第一種方法是采用雙符號(hào)位法(變形補(bǔ)碼法,或“模4補(bǔ)碼”)。第二種方法是進(jìn)位判斷法(單符號(hào)位法)

。(1)雙符號(hào)法(變形補(bǔ)碼法)用兩個(gè)相同的符號(hào)位Sf1Sf2表示一個(gè)數(shù)的符號(hào)。左邊第一位為第一符號(hào)位Sf1,相鄰的為第二符號(hào)位Sf2。

雙符號(hào)位的含義為:00表示正號(hào);11表示負(fù)號(hào);01表示產(chǎn)生正向溢出;10表示產(chǎn)生負(fù)向溢出。雙符號(hào)位可用邏輯異或來判斷溢出情況:V=Sf1⊕Sf2,此邏輯表達(dá)式可用異或門實(shí)現(xiàn)。若V=0,則無溢出;V=1,則有溢出。第一符號(hào)位永遠(yuǎn)是結(jié)果的真正符號(hào)位。例1:已知x=0.1011,

y=0.0111,

求x+y=?解:[x]

補(bǔ)=00.1011,[y]

補(bǔ)=00.0111[x]

補(bǔ)=00.1011+[y]

補(bǔ)=00.0111[x+y]

補(bǔ)=01.0010

兩符號(hào)位為01,表示出現(xiàn)正向溢出。例2:已知x=-0.1011,

y=0.0111,

求x-y=?解:[x]

補(bǔ)=11.0101,[-y]

補(bǔ)=11.1001[x]

補(bǔ)=11.0101+[-y]

補(bǔ)=11.1001[x-y]

補(bǔ)=110.1110

已超出模值,丟掉兩符號(hào)位為10,表示出現(xiàn)負(fù)向溢出。⑵進(jìn)位判斷法判斷規(guī)則:設(shè)Cn-1為最高數(shù)值位向符號(hào)位的進(jìn)位值產(chǎn)生的進(jìn)位,Cn為符號(hào)位產(chǎn)生的進(jìn)位。當(dāng)兩補(bǔ)碼進(jìn)行加減運(yùn)算(減法轉(zhuǎn)化為加法進(jìn)行)時(shí),如果兩個(gè)進(jìn)位值Cn-1Cn相同,則沒有溢出發(fā)生如果兩個(gè)進(jìn)位值不同,則有溢出發(fā)生。若Cn-1=1,

Cn

=0時(shí),則發(fā)生正溢若Cn-1=0,

Cn

=1時(shí),則發(fā)生負(fù)溢其判斷溢出表達(dá)式如下:V=Cn⊕Cn-1

,此邏式可用異或門實(shí)現(xiàn)例如:[x]

補(bǔ)=1.0101+[y]

補(bǔ)=1.1001[x+y]

補(bǔ)=10.1110

最高有效位沒有進(jìn)位,即C=0,符號(hào)位有進(jìn)位,即S=1,故V=1⊕0=1,有溢出發(fā)生。

[x]

補(bǔ)=1.1101+[y]

補(bǔ)=0.1001[x+y]

補(bǔ)=10.0110

最高有效位有進(jìn)位,即C=1,符號(hào)位有進(jìn)位,即S=1,故V=1⊕1=0,無溢出發(fā)生,x+y=+0.0110。返回2.2.2基本的二進(jìn)制加法/減法器設(shè)字長(zhǎng)為n位,兩個(gè)操作數(shù)分別為

x=x0.x1x2…

xn-1y=y(tǒng)0.y1y2…

yn-1

其中x0,y0為符號(hào)位。補(bǔ)碼運(yùn)算的二進(jìn)制加法/減法器(采用的變形補(bǔ)碼運(yùn)算)的邏輯結(jié)構(gòu)圖2-3演示∑0C∑0∑0∑0∑0∑0…=1x0y0=1x1y1=1x2y2=1xn-2=1yn-2xn-1yn-1S0S1S2Sn-2Sn-1C1C2C3Cn-2Cn-1CnP=0加P=1減C0=1V一位加法器2.3定點(diǎn)乘法運(yùn)算

2.3.1原碼一位乘法

2.3.2補(bǔ)碼一位乘法

2.3.3原碼兩位乘法

2.3.4補(bǔ)碼兩位乘法2.3.1原碼一位乘法例:求A=0.1101B=0.1011兩數(shù)乘積

0.1101×0.10111101A×20不移位1101A×21左移1位0000A×22左移2位1101A×23左移3位0.100011111.人工計(jì)算乘法2.計(jì)算機(jī)實(shí)現(xiàn)乘法運(yùn)算A·B=A·(0.1011)=0.1A+0.00A+0.001A+0.0001A=0.1A+0.00A+0.001(A+0.1A)=0.1A+0.01[0A+0.1(A+0.1A)]=0.1{A+0.1[0A+0.1(A+0.1A)]}=2-1{A+2-1[0A+2-1(A+2-1A)]}=2-1{A+2-1[0A+2-1(A+2-1(A+0)]}將乘法變成加法和右移的結(jié)合。3.原碼一位乘法的運(yùn)算規(guī)則設(shè)x=xf.x1x2...xn

,y=y(tǒng)f.y1y2...yn

,乘積為P,乘積的符號(hào)位為Pf,則有

Pf=xf⊕yf

,|P|=|x|.|y|求|P|的運(yùn)算規(guī)則為:(1)被乘數(shù)和乘數(shù)均取絕對(duì)值參加運(yùn)算,符號(hào)位單獨(dú)考慮。(2)被乘數(shù)取雙符號(hào),部分積的長(zhǎng)度與被乘數(shù)的長(zhǎng)度相同,初值為0。(3)從乘數(shù)的最低位的yn位開始對(duì)乘數(shù)進(jìn)行判斷,若yn=1,則部分積加上被乘數(shù)|x|,然后右移一位;若yn=0,則部分積加上0,然后右移一位。(4)重復(fù)(3)判斷n次。例1x=-0.1101,y=-0.1011,求:[x×y]原=?解:|x|=00.1101(用雙符號(hào)表示)|y|=0.1011(用單符號(hào)表示)

部分積乘數(shù)yn

說明

00.00000.1011

+00.1101yn=1,加|x|00.110100.011010.101

右移一位得P1+00.1101yn=1,加|x|01.0011100.1001110.10

右移一位得P2+00.0000yn=0,加000.10011100.01001110.1

右移一位得P3+00.1101yn=1,加|x|01.000111100.100011110右移一位得P4P1P2P3P4由于Pf=xf⊕yf=1⊕1=0,|P|=|x|.|y|=0.10001111所以[x×y]原=0.10001111T部分積R0

R1乘積yyn計(jì)數(shù)器I移位信號(hào)SR2&被乘數(shù)xyn=1Pfxfyf&F

QRS結(jié)束

啟動(dòng)+1原碼一位乘法硬件邏輯結(jié)構(gòu)圖R0和R1都具有右移功能并且連通2.3.2補(bǔ)碼一位乘法補(bǔ)碼一位乘法方法:是在原碼一位乘法的基礎(chǔ)上發(fā)展起來的比較法,由英國(guó)Booth夫婦首先提出,故又稱為Booth乘法,它是現(xiàn)在廣泛采用的補(bǔ)碼乘法。2.3.2補(bǔ)碼一位乘法補(bǔ)碼一位乘法的運(yùn)算規(guī)則符號(hào)位參與運(yùn)算,運(yùn)算的數(shù)均以補(bǔ)碼表示。被乘數(shù)一般取雙符號(hào)位參加運(yùn)算,部分積初值為0。乘數(shù)可取單符號(hào)位,以決定最后一步是否需要校正,即是否要加[-x]補(bǔ)。乘數(shù)末位增設(shè)附加位yn+1,且初值為0。按表2-2所示進(jìn)行操作。按照上述算法進(jìn)行n+1步操作,但第n+1步不再移位,僅根據(jù)y0與y1的比較結(jié)果作相應(yīng)的運(yùn)算即可。補(bǔ)碼移位規(guī)則:部分積為正,右移時(shí)有效位最高位補(bǔ)0;為負(fù)時(shí)最高位補(bǔ)1。

yn(高位)yn+1(低位) 操作

00部分積右移一位

01部分積加x補(bǔ),右移一位

10部分積加[-x]補(bǔ),右移一位

11部分積右移一位乘數(shù)末位表2-2補(bǔ)碼一位乘法算法解:[x]補(bǔ)=11.0011,[-x]補(bǔ)=00.1101(用雙符號(hào)表示)[y]補(bǔ)=0.1011(用單符號(hào)表示)

部分積乘數(shù)ynyn+1

說明

00.00000.10110

+00.1101ynyn+1=10,加[-x]補(bǔ)

00.110100.011010.1011

右移一位得P100.0011010.101ynyn+1=11,右移一位得P2+11.0011ynyn+1=01,加[x]補(bǔ)

11.01100111.10110010.10

右移一位得P3+00.1101ynyn+1=10加[-x]補(bǔ)

00.100000100.010000010.1

右移一位得P4+11.0011ynyn+1=01,

加[x]補(bǔ)

11.01110001最后一步不移位即[x×y]補(bǔ)=1.01110001例2x=-0.1101,y=0.1011,求:[x×y]補(bǔ)=?ynyn+1T部分積R0

R1乘積yyn計(jì)數(shù)器I移位信號(hào)

SCI被乘數(shù)x&

QRS+1多路開關(guān)R2&10ynyn+1&+1yn+101反原結(jié)束啟動(dòng)F2.3.3原碼兩位乘法為了提高乘法的執(zhí)行速度,可以考慮每次對(duì)乘數(shù)的兩位進(jìn)行判斷以確定相應(yīng)的操作,這就是兩位乘法。原碼兩位乘法的運(yùn)算規(guī)則為:

1)符號(hào)位不參加運(yùn)算,最后的符號(hào)Pf=xf⊕yf

。

2)部分積與被乘數(shù)均采用三位符號(hào),乘數(shù)末位增加一位C,其初值為0。

3)按表2.3所示的操作。

4)若尾數(shù)n為偶數(shù),則乘數(shù)用雙符號(hào),最后一步不移位。若尾數(shù)n為奇數(shù),則乘數(shù)用單符號(hào),最后一步移一位。表2-3原碼兩位乘法算法

yn-1yn

C

操作

000

加0,右移兩位,0→C001加x,

右移兩位,0→C

010加x,

右移兩位,0→C011加2x,

右移兩位,0→C100加2x,

右移兩位,0→C

101減x,

右移兩位,1→C110減x,

右移兩位,1→C111加0,右移兩位,1→C解:|x|=000.11012|x|=001.1010(用三符號(hào)表示)|y|=00.0110(用雙符號(hào)表示)

部分積乘數(shù)C說明

000.000000.01100

+001.1010yn-1ynC=100,加2|x|001.1010000.01101000.011

右移兩位0→C+001.1010yn-1ynC=011,加2|x|010.000010000.1000001000.0

右移兩位0→C

yn-1ynC=000,最后一步不移位故[x×y]原=0.10000010例3x=-0.1101,y=0.0110,求[x×y]原=?2.3.4補(bǔ)碼兩位乘法運(yùn)算規(guī)則:(1)符號(hào)位參加運(yùn)算,兩數(shù)均用補(bǔ)碼表示。(2)部分積與被乘數(shù)均采用三位符號(hào)表示,乘數(shù)末位增加一位yn+1,其初值為0。(3)按表2-4所示的操作。(4)若尾數(shù)n為偶數(shù),則乘數(shù)用雙符號(hào),最后一步不移位。若尾數(shù)n為奇數(shù),則乘數(shù)用單符號(hào),最后一步移一位。表2-4補(bǔ)碼兩位乘法算法

yn-1yn

yn+1

操作

000

加0,右移兩位

001加[x]補(bǔ),

右移兩位

010加

[x]補(bǔ),

右移兩位

011加2[x]補(bǔ),

右移兩位

100加2[-x]補(bǔ)

,

右移兩位

101加[-x]補(bǔ)

,

右移兩位

110加[-x]補(bǔ)

,

右移兩位

111加0,右移兩位解:[x]補(bǔ)=111.1101,2[-x]補(bǔ)=001.1010,2[x]補(bǔ)=110.0110(用三符號(hào)表示)[y]補(bǔ)=00.0110(用雙符號(hào)表示)例4x=-0.1101,y=0.0110,求[x×y]補(bǔ)=?部分積乘數(shù)yn+1

說明

000.000000.01100

+001.1010yn-1ynyn+1=100,加2[-x]補(bǔ)

001.1010000.01101000.011

右移兩位

+110.0110 yn-1ynyn+1y=011,加2[x]補(bǔ)

110.110010111.1011001000.0

右移兩位

yn-1ynyn+1y=000,最后一步不移位故[x×y]補(bǔ)=1.101100102.4定點(diǎn)除法運(yùn)算2.4.1原碼一位除法2.4.2補(bǔ)碼一位除法2.4.1原碼一位除法設(shè)被除數(shù)[x]原=xf.x1x2...xn

,除數(shù)[y]原=y(tǒng)f.y1y2...yn

,則商的符號(hào):Qf=xf⊕yf商的數(shù)值:|Q|=|x|/|y|兩個(gè)用原碼表示的數(shù)相除時(shí),商的符號(hào)通過兩個(gè)數(shù)的符號(hào)異或求得,而商的數(shù)值部分通過兩個(gè)數(shù)的數(shù)值部分按正數(shù)求商得到。設(shè)被除數(shù)x=0.1001,除數(shù)y=0.1011,模仿十進(jìn)制除法運(yùn)算。2-1y2-2y2-3y2-4y1.判斷x是否小于y?現(xiàn)在x<y,故商的整數(shù)位商“0”,x的低位補(bǔ)0,得余數(shù)r0。2.比較r0和2-1y,因r0>2-1y,表示夠減,小數(shù)點(diǎn)后第一位商“1”,作r0-2-1y,得余數(shù)r1。3.比較r1和2-2y,因r1>2-2y,表示夠減,小數(shù)點(diǎn)后第二位商“1”,作r1-2-2y,得余數(shù)r2。4.比較r2和2-3y,因r2<2-3y,不夠減,小數(shù)點(diǎn)后第三位商“0”,不作減法,得余數(shù)r3(=r2)。5.比較r3和2-4y,因r3>2-4y,表示夠減,小數(shù)點(diǎn)后第四2位商“1”,作r3-2-4y,得余數(shù)r4,共求四位商,至此除法完畢。上面的筆算過程可敘述如下:手工除法算法X=+0.1011,Y=-0.1101X÷Y改進(jìn)手工算法即可適合機(jī)器運(yùn)算:計(jì)算機(jī)通過做減法測(cè)試來實(shí)現(xiàn)判斷:結(jié)果大于等于0,表明夠減,商1;結(jié)果小于0,表明不夠減,商0。計(jì)算機(jī)將余數(shù)左移一位,再直接與不右移的除數(shù)相減?;謴?fù)余數(shù)法:先作減法,若余數(shù)為正,夠減;若余數(shù)為負(fù),不夠減。不夠減時(shí)必須恢復(fù)原來的余數(shù),以便再繼續(xù)往下運(yùn)算。加減交替法:運(yùn)算過程中出現(xiàn)不夠減,則不必恢復(fù)余數(shù),根據(jù)余數(shù)符號(hào),可以繼續(xù)往下運(yùn)算。求|Q|的加減交替法(不恢復(fù)余數(shù)法)運(yùn)算規(guī)則為:(1)符號(hào)位不參加運(yùn)算,并要求|x|<|y|

(2)先用被除數(shù)減去除數(shù),當(dāng)余數(shù)為正時(shí),商上1,余數(shù)左移一位,再減去除數(shù)。當(dāng)余數(shù)為負(fù)時(shí),商上0,余數(shù)左移一位,再加上除數(shù)。(3)當(dāng)?shù)趎+1步余數(shù)為負(fù)時(shí),需加上|y|得到第n+1步正確的余數(shù)。最后余數(shù)為rn×2-n(余數(shù)與被除數(shù)同號(hào))。原碼不恢復(fù)余數(shù)法算法流程圖如圖2-8所示。解:|x|=00.1001,|y|=00.1011[-|y|]補(bǔ)=11.0101

被除數(shù)x/余數(shù)r商數(shù)q說明

00.1001+[-|y|]補(bǔ)

11.0101減去除數(shù)

11.11100余數(shù)為負(fù),商上011.11000r和q左移一位

+[|y|]補(bǔ)

00.1011加上除數(shù)

00.01110.1余數(shù)為正,商上100.11100.1r和q左移一位

+[-|y|]補(bǔ)

11.0101減去除數(shù)

00.00110.11余數(shù)為正,商上100.01100.11r和q左移一位

+[-|y|]補(bǔ)

11.0101減去除數(shù)

11.10110.110余數(shù)為負(fù),商上011.01100.110r和q左移一位

+[|y|]補(bǔ)

00.1011加上除數(shù)

00.00010.1101余數(shù)為正,商上1例1x=-0.1001,y=-0.1011,求[x/y]原=?

Qf=xf+yf=1+1=0,[x/y]原=0.1101,余數(shù)[r]原=1.0001×2-4(余數(shù)與被除數(shù)同號(hào))。2.4.2補(bǔ)碼一位除法符號(hào)位參加運(yùn)算,除數(shù)與被除數(shù)均用雙符號(hào)補(bǔ)碼表示。被除數(shù)與除數(shù)同號(hào)時(shí),被除數(shù)減去除數(shù)。被除數(shù)與除數(shù)異號(hào)時(shí),被除數(shù)加上除數(shù)。商符號(hào)位的取值見第③步。余數(shù)與除數(shù)同號(hào)時(shí),商上1,余數(shù)左移一位減去除數(shù);余數(shù)與除數(shù)異號(hào)時(shí),商上0,余數(shù)左移一位加上除數(shù)。注意:余數(shù)左移加上或減去除數(shù)后就得到了新余數(shù)。

采用校正法包括符號(hào)位在內(nèi),應(yīng)重復(fù)規(guī)則③(n+1)次。

1.補(bǔ)碼不恢復(fù)余數(shù)法的算法規(guī)則(比較上商)如下:補(bǔ)碼一位除法運(yùn)算規(guī)則由比較上商規(guī)則、商的校正規(guī)則和余數(shù)校正規(guī)則組成。商的校正原則:①當(dāng)剛好能除盡(即運(yùn)算過程其中任一步余數(shù)為0)

時(shí),如果除數(shù)為正,則商不必校正;若除數(shù)為負(fù),則商需要校正,即加2-n進(jìn)行修正。②當(dāng)不能除盡時(shí),如果商為正,則不必校正;若商為負(fù),則商需要加2-n進(jìn)行修正。求得n位商后,得到的余數(shù)往往是不正確的。正確的余數(shù)常需要根據(jù)具體情況作適當(dāng)?shù)奶幚聿拍塬@得,處理方法一般如下:余數(shù)的處理①若商為正,則當(dāng)余數(shù)與被除數(shù)異號(hào)時(shí),應(yīng)將余數(shù)加上除數(shù)進(jìn)行修正才能獲得正確的余數(shù)。②若商為負(fù),則當(dāng)余數(shù)與被除數(shù)異號(hào)時(shí),余數(shù)需要減去除數(shù)進(jìn)行校正。余數(shù)之所以需校正,是因?yàn)樵谘a(bǔ)碼不恢復(fù)余數(shù)除法運(yùn)算過程中先比較后上商的緣故??梢?,如果要保存余數(shù)必須根據(jù)具體情況對(duì)余數(shù)作相應(yīng)處理,否則余數(shù)不一定正確。例3x=0.1001,y=-0.1001,求[x/y]補(bǔ)=?解:[x]補(bǔ)=0.1001,[y]補(bǔ)=11.0111,[-y]補(bǔ)=00.1001(用雙符號(hào)表示)

被除數(shù)x/余數(shù)r商數(shù)q說明

00.1001+[y]補(bǔ)11.0111x和y異號(hào),x補(bǔ)+y補(bǔ)

00.00000余數(shù)與y異號(hào),商上000.00000r和q左移一位

+[y]補(bǔ)11.0111加上除數(shù)

11.01110.1余數(shù)與y同號(hào),商上110.11100.1r和q左移一位

+[-y]補(bǔ)

00.1001減去除數(shù)

11.01110.11余數(shù)與y同號(hào),商上110.11100.11r和q左移一位

+[-y]補(bǔ)

00.1001減去除數(shù)

11.01110.111余數(shù)與y同號(hào),商上110.11100.111r和q左移一位

+[-y]補(bǔ)00.1001減去除數(shù)

11.01110.1111余數(shù)與y同號(hào),商上1中間有一步余數(shù)為零表示能除盡,除數(shù)為負(fù),需校正,

[x/y]補(bǔ)=1.1111+0.0001=1.0000

余數(shù)與被除數(shù)異號(hào),需校正,余數(shù)[r]補(bǔ)=(11.0111+

00.1001)×2-4

=0.0000×2-4。例4x=-0.1001,y=0.1011,求[x/y]補(bǔ)=?解:[x]補(bǔ)=11.0111[y]補(bǔ)=00.1011,[-y]補(bǔ)=11.0101(用雙符號(hào)表示)

被除數(shù)x/余數(shù)r商數(shù)q說明

11.0111+[y]補(bǔ)00.1011x和y異號(hào),[x]補(bǔ)+[y]補(bǔ)

00.00101余數(shù)與y同號(hào),商上100.01001r和q左移一位

+[-y]補(bǔ)

11.0101減去除數(shù)

11.10011.0余數(shù)與y異號(hào),商上011.00101.0r和q左移一位

+[y]補(bǔ)00.1011加上除數(shù)

11.11011.00余數(shù)與y異號(hào),商上011.10101.00r和q左移一位

+[y]補(bǔ)

00.1011加上除數(shù)

00.01011.001余數(shù)與y同號(hào),商上100.10101.001r和q左移一位

+[-y]補(bǔ)

11.0101減去除數(shù)

11.11111.0010余數(shù)與y異號(hào),商上0不能除盡,商為負(fù),需校正,

[x/y]補(bǔ)=1.0010+0.0001=1.0011

余數(shù)與被除數(shù)同號(hào)不需校正,余數(shù)[r]補(bǔ)=1.1111×2-4(余數(shù)與被除數(shù)同號(hào))。2.5定點(diǎn)運(yùn)算器的組成與結(jié)構(gòu)

ALU(

溫馨提示

  • 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)論