《計算機組織與系統結構》-第3章計算機中的數值運算與運算器_第1頁
《計算機組織與系統結構》-第3章計算機中的數值運算與運算器_第2頁
《計算機組織與系統結構》-第3章計算機中的數值運算與運算器_第3頁
《計算機組織與系統結構》-第3章計算機中的數值運算與運算器_第4頁
《計算機組織與系統結構》-第3章計算機中的數值運算與運算器_第5頁
已閱讀5頁,還剩72頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章計算機中的數值運算與運算器

本章學習目標

本章將介紹數據與文字在計算機中的表示方法,詳細講解數值數據

的原碼、補碼和反碼表示法以及它們之間的相互轉換,定點表示法、

浮點表示法、定點運算法、浮點運算方法和運算器的組成。通過本章

的學習,應該重點掌握和理解以下內容:

■了解數據、文字在計算機中的表示方法

-掌握原碼、補碼和反碼的表示方法,以及它們之間的相互轉換

■掌握定點表示法和浮點表示法

-掌握定點四則運算和浮點四則運算

第三章12011-12-31

3.1數值數據的表示

3.1.1無符號數和帶符號數

在計算機中,數據可分為無符號數和帶符號數。所謂無符號數,是

指正整數,機器字長的全部數位均用來表示數值的大小,相當于數的絕

對值。例如有兩個二進制數N1和N2。

Nl=01011表示十進制數11

N2=11011表示十進制數27

對于字長為n位的無符號數的表示范圍是0?2n-l。

一般計算機中都設有無符號數的運算和處理指令,還有一些轉移指

令也是專門針對無符號數的。

然而,我們在日常生活中會大量用到帶符號的數,即正數和負數,

我們用“+”、“一”號加絕對值來表示數值的大小。用這種形式表示的

數值在計算機技術中稱為“真值”。

第三章22011-12-31

但是,機器是無法識別符號“+”、“一”的,由于“+”、“一”恰

好是兩種截然不同的狀態,如果用“0”表示“+”,用“I”表示“一”,

這樣符號就被數字化了,并且規定將它放在有符號數的前面,這樣就組

成了有符號數。這種在計算機中使用的、包括符號位在內都被數字化了

的數稱為“機器數”或“機器碼”。機器數有三種不同的表示形式:原

碼、補碼和反碼。

對于帶符號數而言,上面例子中的兩個機器數Nl、N2的含義發生了

變化。

Nl=01011表示十進制數+n

N2=11011根據編碼的不同分別表示不同的值,如原碼時表示十進

制數一11

第三章32011-12-31

3.1.2原碼表示法

原碼表示法是一種最簡單的機器數表示法,用最高位表示符號位,

符號位為“o”表示該數為正數,符號位為“1”表示該數為負數,數值跟

隨其后,并以絕對值形式給出,這是與真值最接近的一種表示形式。

1.定點小數的原碼形式

設定點小數為±0了其…Xn,它的原碼形式為Xs%X2…Xn,其中Xs表

示符號位。原碼的定義為:

X0<X<1

[x]原

1-X=1+IXI-1<X<0

式中:X表不真值,[X]原表示原碼。

例如:X=0.0101,[X]原=X=0.0101

X=-0.0101,[X]原=1-X=1-(-0.0101)=1+0.0101=1.0101

第三章42011-12-31

2.定點整數的原碼形式

設定點整數為±%X2…X。,它的原碼形式為Xs,XJ2…X。,其中Xs

表示符號位。原碼的定義為:

X0<X<2n

2n-X=2n+|X|-2n<X<0

式中:X表示真值,[X]原表示原碼,n為整數的位數。

例如:X=0101,[X]原=X=00101

n4

x=—0101,[X]hi,=2-X=2-(-0101)=10000+0101=10101

在原碼表示法中,真值0有兩種不同的表示形式:

[+0]原=0,00...0

[―0]原=1,00...0

第三章52011-12-31

原碼表示法的優點是簡單易懂,機器數和真值之間的相互轉換非常

容易,用原碼實現乘、除運算的規則很簡單。但它的缺點是實現加、減

運算的規則較復雜,這是因為,當兩個數相加時,如果是同號則數值相

加,如果是異號,則兩數相減。而在進行減法運算時,還要比較絕對值

的大小,然后用大數減小數,最后還要給結果選擇恰當的符號,為了解

決這些矛盾,人們引入了補碼表示法。

3.1.3補碼表示法

補碼表示法的設想是:使符號位參加運算,從而簡化了加、減法的

運算規則;使減法運算轉化為加法運算,從而簡化了機器的運算器電路。

我們先以鐘表對時為例說明補碼的概念。假設有一只表的時間停在8點

鐘,而現在的正確時間為3點整,要校準時間,可以采用兩種方法:

(1)將時針順時針方向正撥7小時:8+7=15=12+3=3(mod12)

(2)將時針逆時針方向倒撥5小時:8-5=3o

第三章62011-12-31

因為鐘表的一周為12個小時,12相當于鐘表的進位值,在數學中

稱為“模”,記作(mod12)o上例中7和一5對鐘表而言,它們的作用

相同,即加7和減5是等價的,我們稱7是一5對模12的補碼。可以用數學

公式表示為:-5=+7(mod12)

從這個例子可以得到一個啟示,對于一個確定的模來說,某數減去

小于模的另一個數,總可以用加上模與該數的絕對值之差來代替,即負

數用補碼表示,這樣可以將減法運算轉化為加法運算了。這樣,在計算

機中實現起來就比較方便了。

例如:9-6=9+(-6)=9+(12-6)=9+6=3(mod12)

65-25=65+(-25)=65+(100-25)=65+75=40(mod100)

在定點小數機器中的數最大不超過1,也就是負的小數對“產的補

碼是等價的。但實際上,負數的符號位還有一個“1”,要把它看成的數

的一部分,所以要對2求補碼,即以2為模。

第三章72011-12-31

1.定點小數的補碼形式

若定點小數為±0.X]X2…Xn,它的原碼形式為Xs.xp(2…Xn,其中表

示符號位,則補碼表示的定義為:

X0<X<1

(mod2)

2+X=2—|X|-1<X<0

式中[X]補為機器數,X為真值。

例如,X=+0.0101,則[X]補=0.0101

x=-o.0101,則[X]補=10+X=10.0000-0.0101=1.1011

一般情況下,對于正數X=+0.X]X2…Xn,則有

補=

[X]0X^2,..xn

對于負數X=—0.X/2…Xn,則有

[X]補=10.00???0—O.XiX2???Xn(mod2)

注意,0的補碼表示只有一種形式,即[+0]補二[一0]補=0.0000。

第三章82011-12-31

2.定點整數的補碼形式

若定點整數為±XR2…Xn,它的補碼形式為Xs,乂止2…Xn,其中Xs表

示符號位,則補碼表示的定義為:

X0<X<2n

(mod2/z+1)

2n+1+X=2n+1-|^|-2n<X<0

式中:X表示真值,n為整數的位數。

例如,X=+0101,則[X]補=00101

X=-0101,則[X]補=2n+1+X=25+(—0101)=25-0101=100000-

0101=1,1011

采用補碼表示法進行減法運算就比原碼方便多了,因為不論是正數

還是負數,機器總是做加法,減法運算可轉換成加法運算。但根據補碼

的定義,求負數的補碼要從2減去|X|。為了用加法代替減法,結果還要

在求補碼時做一次減法,這顯然是不方便的。下面介紹的反碼表示法可

以解決負數的求補問題。

第三章92011-12-31

3.1.4反碼表示法

所謂反碼,就是二進制數的各位數碼由o變為1,由1變為0。也就是

說,若Xj=l,則反碼七二0;若X/0,則反碼Xj=l。數值上面的橫線表示反

碼的意思。反碼表示法與補碼表示法有相似之處,正數的反碼就等于真

值,負數的反碼是把其原碼除符號位以外的各位按位取反。

在計算機中用觸發器寄存數碼,若觸發器Q端輸出表示原碼,則其端

輸出就是反碼。由此可見,反碼是容易得到的。

1.定點小數的反碼形式

對定點小數,反碼表示的定義為:

0<x<1

-2-n)+X-1<X<0

其中n代表數的位數。

第三章102011-12-31

下面我們來證明第二個式子。SX=-0X1X2...Xn,則有[X]反O現在

將X的絕對值|X|和[X]反相加,則得

[X]反+|X|=1.11...1=10.00...0-0.00...1=2-2-n

所以

[X]反二(2-2-n)-|x|=(2-2一n)+X

一般情況下,對于正X=+0.X/2…Xn,則有

[X]反二0印2…Xn

對于負數X=-0力也…Xn,則有

1.X1X2…Xn

對于0,有[+0]反和[—0]反之分:

[+0]反=0.00...0

[―0]反=1.11...1

第三章112011-12-31

例如,X=+0.0101,則如]反=0.0101

X=-0.0101,則[X]反=(2-2-4)+X=1.1111+(一

0.0101)=1.1111-0.0101=1.1010

我們比較反碼與補碼的公式

[X]反=(2-2-n)+X

[X]補=2+X

可以得到

兇補=[X]反+2-n

由這個公式可知,求一個負數的補碼,其方法是符號位為1,其余各位0

變1,1變0,然后在最末位(2-n)上加1。

第三章122011-12-31

2.定點整數的反碼形式

對定點整數,反碼表示的定義是

0<X<2n

-1)+X-2n<X<0

例如,X=+0101,則[X]反=00101

X=-0101,貝MX]反二(2n+1-l)+X=(25-1)+(-0101)

=(100000-1)-0101

=11111-0101

=11010

第三章132011-12-31

3.1.5三種碼制的比較與轉換

1.比較

三種碼制既有共同點,又有各自不同的性質,主要區別有以下幾點:

(1)對于正數,它們都等于真值本身,而對于負數各自有不同的表示。

(2)最高位都表示符號位,補碼和反碼的符號位可作為數值的一部分看

待,和數值位一起參加運算;但原碼的符號位不允許和數值位同等看待,

必須分開處理。

(3)對于真值0,原碼和反碼各有兩種不同的表示形式,而補碼只有唯

一的一種表示形式。

(4)原碼、反碼表示的正、負數范圍相對零來說是對稱的;但補碼負數

表示范圍較正數表示范圍大,能多表示一個絕對值最大的數,其值等于一

2-n(定點整數)或一1(定點小數)。

第三章142011-12-31

表3-1給出了以4位二進制數為例,表示三種不同碼制時的十進制真值。

表3-1三種不同碼制時的十進制真值

二進制數原碼補碼反碼

0000000

0001111

0010222

0011333

0100444

0101555

0110666

0111777

1000~0-8-7

1001一]一7

1010一6^5

1011-3~4

1100-4-3

1101______-3-2

1110-6-2--1

1111-7-1-0

第三章152011-12-31

2.轉換

三種不同碼制以及真值之間的轉換關系如圖3-1所示。

從圖3-1可看出,真值X與補碼或反碼之間的轉換通常是通過原碼實

現的,也可以直接完成真值與補碼或反碼之間的轉化。

若已知機器的字長,則機器數的位數應補夠相應的位數,例如機器

字長為8位則:

X=1011[X]原=00001011[X]補=00001011[X]反=00001011

X=-1011[X]B=10001011[x]補二iinoioi[X]^=11110100

X=0.1011[X].原g=0.1011000[X],k=0.1011000[X]^=0.1011000

x=-o.1011[X]原=1.10110000101000[X]反二1.0100111

第三章162011-12-31

[X]補

符號位不變

當Xs=o時數值位不變

當Xs=l日寸數值位變反+1

符號+/-變成0/1

[X]真值

數值位不變

符號位不變

當Xs=0口寸數值位不變

當Xs=l時數值位變反

[X]反

圖3-1三種不同碼制以及真值之間的轉換關系

第三章172011-12-31

3.2數的定點表示與浮點表示

在計算機中,小數點不用專門的器件表示,而是按約定的方式標出。

根據小數點的位置是否固定,在計算機中有兩種數據格式:定點表示和

'4學點表示o

3.2.1定點表示法

定點數是指小數點固定在某個位置上的數值。通常有小數和整數兩

種表示形式。

1.定點小數

小數點的位置固定在最高有效數位之前、符號位之后時,機器內的

數稱為純小數。記作Xs.X】X2…X。,其中表示符號位,這個數是一個純

小數,如圖3-2所示。定點小數的小數點位置是隱含約定的,小數點并不

需要真正占據一個二進制位。

第三章182011-12-31

當Xs=O、X.l、Xz=l、…、x『l時,X為最大正數,即X最大正數=(l-2n)

當X§=0、X]=0、…、Xn_j=0>X01時,X為最小正數,即X最小正數=2華

當Xs=l時,表示X為負數,此時情況比較復雜,因為在計算機中帶符號

的數可以用補碼表示,也可以用原碼表示。如前所述,原碼與補碼所表示

的絕對值最大的負數是不同的,所以原碼和補碼的表示范圍有一些差別。

設機器字長有n位,貝I」:

原碼定點小數表示位的范圍為:一(1—2-n)?(1—2-n)。

補碼定點小數表示位的范圍為:一1?(1—2-n)o

圖3-2定點小數格式

第三章192011-12-31

2.定點整數

小數點的位置隱含固定在最低有效數位之后時,機器內的數稱為純

整數。記作XsX]X2…Xn,這是一個純整數,如圖3-3所示。

圖3-3定點整數格式

n

原碼定點整數表示位的范圍為:一(2n—1)?(2—1)O

11n

補碼定點整數表示位的范圍為:-2?(2—1)o

X最小正數二1

第三章202011-12-31

在定點表示法中,參加運算的數以及運算的結果都必須保證在該

定點數所能表示的數值范圍內。如遇到絕對值小于最小正數的數,被

當作機器0處理,稱為“下溢”;而大于最大正數和小于絕對值最大的

負數的數,統稱為“溢出”。這時計算機將暫時中斷運算操作,去進

行溢出處理。

只能處理定點數的計算機稱為定點計算機。由于小數點的位置固

定不變,因此當機器處理的數不是純小數或純整數時,必須設定一個

比例因子,把原始的數縮小成定點小數或擴大成定點整數后再進行處

理,所得到的運算結果還必須根據比例因子還原成實際的數值。選擇

合適的比例因子非常重要,必須保證參加運算的初始數據、中間結果

和最后結果都在定點數的表示范圍之內,否則將會產生“溢出”。

第三章212011-12-31

322浮點表示法

i.浮點數的表示形式

使用定點表示法能表示以o為中心的一定范圍的正、負的整數或小數。

實際上計算機中處理的數不一定是純小數或純整數,而且有些數據的數

值范圍相差很大,它們都不能直接用定點數表示,但均可用浮點數表示。

浮點數即小數點的位置可以浮動的數,如

325.78=3.2578X102=3257.8XIO-1=0.32578X103

顯然,這里小數點的位置是變化的,但因為分別乘上了不同的10的

方幕,因此值不變。通常浮點數可表示成

N=MXrE

式中M為尾數(可正可負),E為階碼(可正可負),r是基數(或基

值)。在大多數計算機中,尾數為純小數,常用原碼或補碼表示;階碼

為定點整數,常用補碼表示;基數可取2、4、6、8、16等,通常廠2。

第三章222011-12-31

浮點數在機器中的形式如圖3-4所示。采用這種數據格式的機器稱

為浮點機。浮點數的基數是隱含的,在整個機器數中不出現。階碼的符

號位為es,階碼的大小反映了在數N中小數點的實際位置;尾數的符號位

為叫,它也是整個浮點數的符號位,表示了該浮點數的正、負。

可見,浮點數有階碼和尾數兩部分組成。浮點數的表示范圍主要由

階碼決定,有效數字的精度主要由尾數就決定。

1位<k位>1位<n位

m

0

階碼E尾數M

圖3?4浮點數的一般格式

第三章232011-12-31

2.浮點數的表示范圍

設某浮點數的格式如圖3-4所示,k和n分別表示階碼和尾數的位數

(不包括符號位),尾數和階碼均用補碼表示。

當es=O,ms=0,階碼和尾數的數值位各位都為1(即階碼和尾數都為

最大正數)時,該浮點數為最大正數:

X最大正數=(1-2?2

當e§=l,ms=0,尾數的最低位irin=l,其余各位為0(即階碼為絕對

值最大的負數,尾數為最小正數)時,該浮點數為最小正數:

ck

X最小正數=2、2-2

當es=0,階碼的數值位全為1;ms=l,尾數的數值位全為0(即階碼

為絕對值最大的正數,尾數為絕對值最大的負數)時,該浮點數為絕對

值最大負數:

V—_]*?2T

八絕對值最大的負數一n

第三章242011-12-31

3.浮點數的規格化

為了提高浮點數的精度,必須充分利用尾數的有效位數,通常采取

浮點數規格化形式,即規定尾數的最高位數必須是一個有效數值。如果

不是規格化數,就要通過修改階碼并同時左右移尾數的方法,使其變成

規格化數。將非規格化數轉換成規格化數的過程叫做規格化。對于基數

不同的浮點數,因其規格化數的形式不同規格化過程也不同。

一個浮點數的表示形式不是唯一的。例如二進制數0.0001011可表

示為0.001011X2T、0.01011X2-2>0.1011X2—3…,而其中只有

0.10HX2-3是規格化數。

在尾數用原碼表示時,規格化浮點數的尾數的最高數位總等于1。

第三章252011-12-31

3.2.3浮點數階碼的移碼表示法

浮點數的階碼是帶符號的定點整數,因此它可以用前面介紹的任何

一種機器數的表示方法來表示。但在大多數計算機中,多采用補碼表示

法或另外一種編碼方法——移碼表示法。

設定點整數的移碼形式為X0X]X2…Xn,字長為n+1位,則移碼的定義為

[X]移=2n+X-2n<X<2n

式中:[X]移表示移碼,X為真值。

根據定義可知,移碼就是真值X加一個常數2%相當于X在數軸上向

正方向平移了2n個單位,由此而得“移碼”之稱。移碼也可稱為增碼或

偏碼,常數2n稱為偏置量或偏置值。

將移碼的定義和補碼的定義相比較,可以找出移碼和補碼之間的關系:

X0<X<2n

因為

2n+,+X=2n+,-IXI-2"<X<0

第三章262011-12-31

表3-2給出了移碼、補碼和真值之間的關系。

表3?2移碼、補碼和真值之間的關系

真值X(十進制)真值X(二進制)[X]補[X]移

-128-100000001000000000000000

-127-11111111000000100000001

????????????

-1-00000011111111101111111

000000000000000010000000

100000010000000110000001

????????????

12711111110111111111111111

第三章272011-12-31

從表3-2中,可看出移碼具有以下特點:

(1)在移碼中,最高位為“0”表示負數,最高位為“1”表示正數,這

與原碼、補碼、反碼的符號位取值相反;

(2)移碼全為0時,它所對應的真值最小;全為1時所對應的真值最大。

因此移碼的大小直觀地反映了真值得大小,有助于兩個浮點數進行階碼

的大小比較;

(3)真值0在移碼中的表示形式也是唯一的,即[+0]補二[-0]補

=100...0;

(4)移碼把真值映射到一個正數域,所以可將移碼視為無符號數,直

接按無符號數規則比較大小;

(5)同一數值的移碼和補碼除最高位相反外,其他各位相同。

(6)移碼的偏置量并不唯一,根據所要表示的移碼值范圍來選擇不同

的偏置量,需要注意的是IEEE754的標準中8位二進制的偏移量的取值為

127。

第三章282011-12-31

3.2.4實用浮點數舉例

在現代計算機中,浮點數一般采用國際標準IEEE754,這種標準的

形式如圖3-5所不。

ms階碼(含階符)尾數

數符小數點位置

圖3-5IEEE754標準的浮點數形式

第三章292011-12-31

按照IEEE754標準,常用的浮點數有三種,它們具體的格式見表3-3。

表3?3IEEE754標準中的三種浮點數

類型數符階碼尾數總位數偏置值

r^3

短浮點數18327FH

長浮點數11152643FFH

臨時浮點數11564r^o3FFFH

下面以32位的短浮點數為例,討論浮點代碼與真值之間的關系。最高

位為數符位;其后是8位階碼,以2為底,階碼的偏置值為127;其余23位

是尾數。為了使尾數部分能表示多一位的有效值,IEEE754標準采用隱含

尾數最高數位1的方法(即這一位1不表示出來),因此尾數實際上是24位。

需要注意的是,隱含的1是一位整數(即位權為2。)。在浮點格式中表示

出來的23位尾數是純小數,并用原碼表示。

第三章302011-12-31

例3-3:將(56.25)I。轉換成短浮點數。

解:(1)把十進制數轉換成二進制數

(56.25)10二(111000.01)2

(2)規格化二進制數

111000.01=1.1100001X25

(3)算出移碼(階碼真值+偏置值)

101+01111111-10000100

(4)短浮點數格式存儲該數

因為

符號位二0

階碼二10000100

尾數二11000010000000000000000

所以短浮點數代碼為:0;10000100;11000010000000000000000

表示為十六進制的代碼為:42610000Ho

第三章312011-12-31

例3-4:把短浮點數C1C90000H轉換成十進制數。

(1)把十六進制數轉換成二進制數,并分離出符號位、階碼和尾數

因為C1C90000H二11000001110010010000000000000000

所以,符號位二1

階碼二10000011

尾數二10010010000000000000000

(2)計算出階碼真值(移碼一偏置值)

10000011-01111111=100

(3)以規格化二進制數形式寫出此數

1.1001001X24

(4)寫成非規格化二進制數形式

11001.001

(5)轉換成十進制數,并加上符號位

(11001.001)2二(25.125)10

所以,該浮點數為-25.125

第三章322011-12-31

3.3數值運算

3.3.1定點四則運算

定點四則運算包括加、減、乘、除運算。

1.補碼加法運算

上一節我們介紹了數的補碼表示法,負數用補碼表示后,就可以和

正數一樣來處理。這樣,運算器里只需要一個加法器就可以了,不必為

了負數的加法運算,再配一個加法器。

補碼加法的公式是:

[X]補+[Y]補=[X+Y]補(mod2)

上述公式表明,在模2意義下,任意兩個數的補碼之和等于該兩個

數之和的補碼。這是補碼加法的理論基礎,其結論也適用定點整數。

補碼加法有以下特點:一是符號位要作為數的一部分一起參加運算;

二是要在模2的意義下相加,即超過2的進位要舍去。

第三章332011-12-31

2.補碼減法運算

負數的加法要利用補碼化為加法來做,減法運算當然也要設法化為

加法來做。之所以使用這種方法而不直接使用減法,是因為它可以和常

規的加法運算使用同一個加法器電路,從而簡化了計算機的設計。

補碼減法運算的公式為:

[X—Y]補=[X]補一[Y]補=[X]補+[—Y]補(mod2)

因此,若機器數采用補碼,當求X—Y時,只需先求LY]補(稱[—

Y]補為“變補”后的減數),就可以按照補碼加法規則進行運算。而[—

Y]補由[Y]補連同符號位在內,每位取反,末位加1而得。

第三章342011-12-31

3.溢出判斷

在定點小數機器中,數的表示范圍為|X|VI。在運算過程中如出現

大于1的現象,稱為“溢出”。在定點中,正常情況下溢出是不允許的。

兩個正數相加,結果大于機器所能表示的最大正數,成為正溢。而

兩個負數相加,結果小于機器所能表示的最小負數,成為負溢。如圖3-

6所示,對定點正數而言,也同樣存在正溢、負溢問題。

負溢<一可表示的數一》正溢

-10+1

圖3-6定點小數的溢出

第三章352011-12-31

為了保證計算的正確性,我們必須要對溢出進行檢測。判斷“溢出”

是否發生,可采用兩種檢測方法。第一種方法是采用雙符號位法,這稱

為“變形補碼”或“模4補碼”,從而使模2補碼所能表示的數的范圍擴

大了一倍。采用變形補碼后,任何小于1的正數,兩位符號位都是“0”;

任何大于一的1負數,兩個符號位都是“1”,兩個數相加后,其結果的

符號出現“01”或“10”兩個組合時,表示發生溢出。這是因為兩個絕對

值小于1的數相加,其結果不會大于或等于2,而最高符號位永遠表示結

果的正確符號。

第三章362011-12-31

我們可以得出如下結論:

(1)當以模4補碼運算,運算結果的兩個符號位相異時,表示溢出;

相同時,表示未溢出。所以溢出邏輯表達式為V二SfRf2,其中$門和S’2分

別表示為最高符號位和第二符號位。此邏輯表達式可用異或門實現。

(2)模4補碼相加的結果,不論是否溢出,最高符號位始終表示正確

的符號。

(3)第二種溢出檢測的方法是采用單符號位法。從例9和例10中可看

出,當最高有效位產生進位而符號位無進位時,產生正溢;當最高有效

位無進位而符號位有進位時,產生負溢。所以溢出邏輯表示式為V=CfC0,

其中Cf表示符號位產生的進位,C。表示最高有效位產生的進位。此邏輯

表達式也可用異或門實現。

在定點機中,當運算結果發生溢出時,機器通過邏輯電路自動檢測

出這種益處,并進行中斷處理。

第三章372011-12-31

4.乘法運算

與加法和減法相比,無論是用硬件還是用軟件來完成。乘法都是一

個復雜的操作。各種各樣的算法已用于各類計算機中。我們先介紹兩個

無符號整數相乘的過程,然后再介紹實現兩個補碼表示數的乘法的最普

遍的技術。

(1)無符號整數乘法

由圖3?7所示的手工乘法過程,可得到如下幾點重要結論:

1011被乘數11

X1101乘數13

1011

0000

1011

1011

10001111

圖3-7無符號二進制乘法

第三章382011-12-31

1)乘法涉及到部分積的生成,乘數的每一位對應一個部分積。然后,

部分積相加得到最后的乘積。

2)部分積是容易確定的。當乘數的位是0時,其部分積也是0;當乘

數的位是1時,其部分積是被乘數。

3)部分積通過求和而得到最后乘積。為此,后面的部分積總要比它

前面的部分積左移一個位置。

4)兩個n位二進制整數的乘法導致其積的長度為2n位。

與手工演算相比,計算機能做幾件事使操作更有效。首先,可以邊產

生部分積邊做加法,而不是等到最后再相加。這就取消了存儲所有部分

積的需求;只需要少數幾個寄存器。其次,我們能節省某些部分積的生

成時間,對于乘數的每個1,需要加和移位兩個操作;但對于每個0,則

只需移位操作。

第三章392011-12-31

圖3-8表示了一種采用此方式的實現方案。

乘數和被乘數分別裝入兩個寄存器(Q和M)。還需要第三個寄存

器A,初始設置為0。還需要一個1位寄存器C,初始值為0,用于保存加

法可能產生的進位。

被乘數

乘數

圖3-8無符號二進制乘法實現硬件

第三章402011-12-31

乘法器的操作如下。控

制邏輯每次讀乘數的一位。

若Qo是1,則被乘數與A寄存

器相加并將結果存于A寄存

器。然后,C、A和Q各寄存

器的所有位向右移一位,于

是C位進入A。/,進入Qz,

而Qo丟失。若Qo是0,則只

需進位,無需完成加法。對

原始的乘數每一位重復上述

過程。產生的2n位積存于A

和Q寄存器。這種操作的流積在A,Q中

程圖如圖3-9所示。

圖3-9無符號二進制乘法流程圖

第三章412011-12-31

(2)補碼乘法

在計算機中帶符號數一般都用補碼表示,補碼的加減法非常簡單,

在以加減運算為主的通用機中,操作數都用補碼表示,所以這類計算機

在做乘法時也使用補碼。

最常用的補碼乘法算法是Booth算法,又稱比較法。

設被乘數[X]補=Xs.XRz…X/乘數[Y]補=Ys.YM…Yn。在乘數的最低位

置后增加一位附加位Ya,它初值為3增加附加位不會影響運算結果。

每次運算取決于乘數相鄰兩位Yj+1的值,把它們稱為乘法的判斷

位。這種運算是根據乘數相鄰兩位的比較結果(Yi+1—Yj)來確定運算操

作,因此稱為比較法。

第三章422011-12-31

Booth算法規則如下:

1)參加運算的數用補碼表示;

2)符號位參加運算;

3)由于每求一次部分積要右移一位,所以乘數的最低兩位Yn、Yn+1的

值決定了每次執行的操作,如表3-4所示;

4)移位按補碼右移規則進行,右移前:XX]X2…X,右移后:XX

X]???Xn_2Xn_p

5)共需要進行n+1次累加,n次移位。

表3-4Booth乘法運算操作

判斷位丫口、Y/]I

0~0原部分積右移一位

。1原部分積加[X]補后右移一位

10原部分積加[—x]補后右移一位

11原部分積右移一位

第三章432011-12-31

圖3-10給出了Booth算法的框圖。被乘數和乘數分別放入B和C寄存

器內。乘法的結果將出現在A和C寄存器中。A和附加位CM初始化為0。

運算過程中,控制邏輯每次掃描C寄存器中的最低兩位CnG+i。若兩位

相同(11或00),則A、C寄存器的所有位向右移一位。若兩位不同,當

時,則A寄存器的內容加B寄存器的內容(即被乘數);當

CnCn+i=l。時,A寄存器的內容減去B寄存器的內容被乘數(即加上B寄

存器中內容的反),加減之后再右移。無論哪種情況,右移是這樣進行

的:A的最左位,即A一位,不僅要移入A。?,而且還要保留在A-中。

這要求保留A和C中的符號。這種移位方式稱為算術移位(Arithmetic

Shift),因為它保留了符號位。

第三章442011-12-31

圖3-10補碼乘法的Booth算法

第三章452011-12-31

5.除法運算

除法要比乘法更復雜,但也是基于同樣的通用原則。如上所述,算法

的基礎是紙和筆的演算方法,而且操作涉及到重復的移位和加減法。

00001101商

除數1011)10010011被除數

1011

部分余001110

1011

001111

________1011

100余數

圖3-11無符號二進制整數除法

第三章462011-12-31

圖3-11表示的是一個無符號二進制整數長除的例子。首先,從左到右

檢查被除數的位,直到被檢查的位所表示的數大于或等于除數;這被稱

為除數能去“除”此數。直到這個事件出現之前,一串0從左到右放入

商中,。當事件出現時,一個1放入商并且由此部分被除數中減去除數。

結果被稱為部分余(PartialRemainder),由此開始除法呈現一種循

環樣式。在每一循環中,被除數的其他位續加到部分余上,直到結果大

于或等于除數。同前,由這個數減去除數并產生新的部分余。此過程繼

續下去,直到被除數的所有位都被用完。

事實上,機器的運算過程和人畢竟不同,人會心算,一看就知道夠不

夠減。但機器卻不會心算,必須先做減法,若余數為正,才知道夠減;

若余數為負,才知道不夠減。不夠減時必須恢復原來的余數,以便再繼

續往下運算,這種方法稱為恢復余數法。

第三章472011-12-31

要恢復原來的余數,只要當前的余數加上除數即可。但由于要恢復余

數,使除法進行過程的步數不固定,因此控制比較復雜。實際中常用不

恢復余數法,又稱加減交替法。其特點是運算過程中如出現不夠減,則

不必恢復余數,根據余數符號,可以繼續往下運算,因此步數固定,控

制簡單。

加減交替法的規則是:當余數為正時,商“1”,余數左移一位,減除

數;當余數為負時,商“0”,余數左移一位,加除數。

第三章482011-12-31

3.3.2浮點四則運算

1.浮點加法、減法運算

設有兩個浮點數X和Y,它們分別為

X=2LxX

Y=。Yx2EY

其中Ex和Ey分別為數X和Y的階碼,Mx和%為X和Y的尾數。

兩個浮點數進行加法和減法的運算規則是:

EX-EYEY

Z=X±Y=(MxX2±MY)X2EX<EY

由于浮點數尾數的小數點均固定在第一數值位前,所以尾數的加減運算

規則與定點數完全相同。但由于其階碼的大小有直接反映尾數有效值的

小數點位置,因此當浮點數階碼不等時,因兩尾數小數點的實際位置不

一樣,尾數部分無法直接進行加減運算,因此必須先進行“對階”,

使兩數的小數點位置對齊。

第三章492011-12-31

完成浮點數加減法運算的操作過程大體分為四個基本步驟:

(1)0操作數檢查;

(2)比較階碼并完成對階;

(3)尾數進行加或減運算;

⑷規格化結果并進行舍入處理。

圖3?12所示為浮點數加減運算的操作流程圖。

第三章502011-12-31

圖3-12浮點加減運算的操作流程

第三章512011-12-31

第一步為0操作數檢查,如果判知兩個操作數X或Y中有一個數為0,那

么另一個數即為運算結果,而沒有必要再進行后續的一系列操作,以節

省運算時間。

第二步是使兩個操作數的指數相同。兩個浮點數進行加減,首先要

看兩個數的階碼是否相同,即小數點位置是否對齊。若兩個數階碼相同,

表示小數點是對齊的,就可以進行尾數的加減運算。反之,若兩個數階

碼不同,表示小數點位置沒有對齊,此時必須使兩個數階碼相同,這個

過程叫做對階。

第三步是尾數求和運算,包括它們的符號。不論是加法還是減法,都

按加法進行操作,其方法與定點加減運算完全相同。

最后一步是規格化結果。若尾數部分得到的結果不是規格化數,必須把

它變成規格化數。對于雙符號來說,規格化數的形式是001義…X或

110X...Xo

第三章522011-12-31

規格化處理的規則如下:

1)結果尾數的兩個符號位值不同(01或10),這就表明尾數運算結果

溢出,應進行右規格化處理,即將結果尾數向右移一位,并將階碼值加

lo

2)若結果尾數運算不溢出,但最高數位值與符號位的值相同,這就表

明不符合規格化規則,應進行左規格化處理,這時應將結果尾數重復左

移,每移一位階碼減1,知道出現最高數值位與符號位的值不同為止。

在對階或向右規格化時,尾數要向右移位。這樣被移位的尾數的低位

部分就會被丟掉,從而造成一定的誤差,因此要進行舍入處理。簡單的

舍入如處理方法有兩種:一種是“0舍1入”法,即如果右移時被丟掉的

數位的最高位為0則舍去,為1則將尾數的末位加1。另一種方法是“恒

置1”法,即只要數位被移掉,就在尾數的末位恒置1。

第三章532011-12-31

在IEEE754標準中,舍入處理提供了四種可選方法:

?就近舍入:結果被舍入成最近的可表示的數。其實質就是通常所說

的“四舍五入”。例如,尾數超出規定的23位的多余位數字是10010,

多于位的值超過規定的最低有效位值的一半,故最低有效位應增1。若

多余的5位是01111,則簡單的截尾即可。對多余的5位10000這種特殊情

況:若最低有效位現在為0,則截尾;若最低有效位現為1,則向上進1

位使其變為0。

?朝+8舍入:結果向正無窮大方向取舍。對正數來說,只要多余位不

全為0,則向最低有效位進1;對負數來說,則是簡單的截尾。

?朝一8舍入:結果向負無窮大方向取舍。對正數來說,則是簡單的截

尾;對負數來說,只要多余位不全為0,則向最低有效位進1。

?朝0舍入:結果朝0取舍。即朝數軸原點方向舍入,就是簡單的截尾。

無論尾數是正數還是負數,截位都使取值的絕對總值比原值的絕對值小。

這種方法容易導致誤差。

第三章542011-12-31

2.浮點乘法、除法運算

(1)浮點乘法、除法運算規則

設有兩個浮點數X和Y:

可見,乘積的尾數是相乘兩數的尾數之積,乘積的階碼是相乘兩數的

階碼之和。當然,這里也有規格化和舍入等步驟。

設有兩個浮點數X和Y:

第三章552011-12-31

(2)浮點乘法、除法運算步驟

浮點數的乘除運算大體可分為四步:第一步,0操作數檢查;第二步,

階碼加/減操作;

第三步,尾數乘/除操作;第四步,結果規格化及舍入處理。

圖3-13所示為浮點乘法的流程圖。無論哪個操作數為0,乘積即為0。

下一步是指數相加。若指數是移碼(偏移值指數)形式,指數的和將會

有雙倍的偏置值,故應從和中減去一個偏置值。可能會出現指數上溢或

下溢,此時應結束算法并報告。

若積的指數在一個恰當的范圍內,則下一步應是有效數相乘,包括它

們的符號一起考慮。有效數相乘與整數相乘的方法相同。積的長度將是

被乘數和乘數的長度的兩倍,多余的位將在舍入期間丟失掉。

得出乘積之后,下一步則是結果的規格化和舍入處理,同加、減法所做

的一樣。注意,規格化可能導致指數下溢出現。

第三章562011-12-31

圖3-13浮點乘法的流程圖

第三章572011-12-31

圖3-14所示為浮點除除法

法流程圖。第一步是測試

x=o?A階碼相減

0,若除數為0,或報告出

Y,V

加偏移

錯,或認為是一個無窮大Z

的數,取決于具體的實現。

工A溢出報告

返回工酚碼溢出?

若被除數是0,則結果是0。K7

下一步是被除數的指數減爸碼下溢?>報告下溢

除數的指數。這個過程把V

\r

偏置值去掉了,所以必須尾數相除I返回

加上偏置值。然后對指數規格化

上溢或下溢進行測試。▼

舍入

V

返回

圖3/4浮點除法流程圖

第三章582011-12-31

3.4算術邏輯運算單元ALU

針對每一種算術運算,都必須有一個相應的基本硬件配置,其核心部

分是加法器和寄存器。當需要完成邏輯運算時,勢必需要配置相應的邏

輯電路,而ALU電路是既能完成算術運算又能完成邏輯運算的部件

3.4.1ALU電路

圖3-15是ALU框圖。圖中Aj和瑪為輸入變量;彩為控制信號,&的不同

取值可決定該電路做哪種邏輯運算;Fj是輸出函數。

圖3-15ALU框圖

第三章592011-12-31

為了實現算術/邏輯多功能運算,則必須對全加器(F

溫馨提示

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

評論

0/150

提交評論