版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第二章運算方法與運算器
2.1數據與文字的表示方法
2.2定點加法、減法運算
2.3定點乘法運算
2.4定點除法運算
2.5定點運算器的組成
2.6浮點運算方法和浮點運算器☆☆二進制數便于計算機存儲及物理實現(xiàn)特點:逢二進一,由0和1兩個數碼組成,基數為2,各個位權以2k表示二進制數:
anan-1…a1a0.b1b2…bm=
an×2n+an-1×2n-1+…+a1×21+a0×20
+b1×2-1+b2×2-2+…+bm×2-m
其中ai,bj非0即1十六進制數用于表達二進制數,相互轉換簡單基數16,逢16進位,位權為16k,16個數碼:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(xiàn)十六進制數:
anan-1…a1a0.b1b2…bm=
an×16n+an-1×16n-1+…+a1×161+
a0×160 +b1×16-1+b2×16-2+…+bm×16-m
其中ai,bj是0~F中的一個數碼二進制數或十六進制數轉換為十進制數方法:按權展開二進制數轉換為十進制數
0011.1010B
=1×21+1×20+1×2-1+0×2-2+1×2-3
=3.625十六進制數轉換為十進制數 1.2H
=1×160+2×16-1
=1.125十六進制數用后綴字母H二進制數用后綴字母B十進制整數轉換為二或十六進制數整數部分轉換:用除法十進制數整數部分不斷除以基數2或16,并記下余數,直到商為0為止由最后一個余數起逆向取各個余數,則為轉換成的二進制和十六進制數
126=01111110B 126=7EH十進制小數轉換為二或十六進制數小數部分轉換:用乘法分別乘以各自的基數,記錄整數部分,直到小數部分為0為止
0.8125=0.1101B 0.8125=0.DH小數轉換會發(fā)生總是無法乘到為0的情況可選取一定位數(精度)將產生無法避免的轉換誤差真值和機器數真值:現(xiàn)實中真實的數值機器數:計算機中用0和1數碼組合表達的數值無符號數:只表達0和正整數的定點整數有符號數:表達負整數、0和正整數的定點整數符號位需要占用一個位,常用機器數的最高位0表示正數、1表示負數具有原碼、反碼、補碼、移碼沒有符號位,使用全部字長來表示數值大小字長N=8時,編碼:00000000~11111111
取值范圍:0~255(28-1)字長N=16時,編碼:0000~FFFFH
取值范圍:0~65535(216-1)字長N=32時,編碼:00000000~FFFFFFFFH
取值范圍:0~232-1無符號數的表示2.1
數據與文字的表示方法2.1.1數據格式2.1.2數的機器碼表示2.1.3字符與字符串的表示方法2.1.4漢字的表示方法2.1.5校驗碼計算機中常用的數據表示格式有兩種,一是定點格式,二是浮點格式定點格式容許的數值范圍有限,但要求的處理硬件比較簡單浮點格式容許的數值范圍很大,但要求的處理硬件比較復雜2.1.1
數據格式1、定點數的表示方法定點表示:約定機器中所有數據的小數點位置是固定不變的。通常將數據表示成純小數或純整數定點數x=x0x1x2…xn
在定點機中表示如下(x0表示符號位,0代表正號,1代表負號)定點整數的小數點位置定點小數的小數點位置定點數例例:X=+1010110.純整數:X=01010110.正數,符號位取0Y=-1101001.純整數:Y=11101001.(原碼)負數,符號位取1X=+0.11011Y=-0.10101符號位取0純小數:X=0.11011符號位取1純小數:X=1.10101(原碼)定點整數的表示范圍純整數的表示范圍為(x1x2…xn各位均為0時最?。桓魑痪鶠?時最大,x0為符號位)
0≤|x|≤2n
-1例如:n=8,最大值編碼:11111111
表示:11111111=100000000-1
=28-1目前計算機中多采用定點純整數表示,因此將定點數表示的運算簡稱為整數運算定點小數的表示范圍純小數的表示范圍為(x1x2…xn各位均為0時最??;各位均為1時最大,x0為符號位)
0≤|x|≤1-2-n例如,n=8,最大值編碼:0.11111111
表示:0.11111111=1.0-0.00000001
=1-2-82、浮點數的表示方法電子質量(克):9×10-28=0.9×10-27
太陽質量(克):2×1033=0.2×1034
采用定點很難表示,而且不容易計算??數的小數點位置隨比例因子的不同而在一定范圍內自由浮動
一個十進制數N可以寫成
N=10e×M一個R進制數N可以寫成
N=Re×MM
尾數e
指數R 基數數的科學表達法階碼和尾數用定點小數表示,給出有效數字,決定了浮點數的表示精度表達指數部分用整數形式表示,指明小數點在數據中的位置決定浮點數的表示范圍早期計算機表達法浮點數的機器表示方法32位單精度浮點數E:含階符的階碼,8位階碼采用移碼方式(方便比較和對階)來表示正負指數,采用這種方式時,將浮點數的指數真值e變成階碼E時,應將指數e加上一個固定的偏移值127(01111111),即E=e+127。
S:1位符號位0表示正數1表示負數M:尾數,23位小數表示,小數點放在尾數域最前面IEEE754標準64位雙精度浮點數S:1位符號位M:尾數,52位小數IEEE754標準E:含階符的階碼,11位階碼采用移碼方式(方便比較和對階)來表示正負指數,采用這種方式時,將浮點數的指數真值e變成階碼E時,應將指數e加上一個固定的偏移值1023(01111111111),即E=e+1023。
浮點數的規(guī)格化例:156.78 =15.678×101 =
1.5678×102 =0.15678×103=RE×M對于二進制數1011.1101 =0.10111101×2+4 =10.111101×2+2 =1.0111101×2+3(規(guī)格化表示法)
=1.0111101×2+11(規(guī)格化表示法)
=RE×M那么,計算機中究竟采用哪種數據形式?多種數據形式二進制數IEEE754標準小數點左邊這個1在機器里可以省略(少存一位)尾數最高有效位為1,隱藏,并且隱藏在小數點的左邊(即:1≤M<2)32位單精度浮點數規(guī)格化表示 x=(-1)s×(1.M)×2E-127 e=E-127(E=e+127)64位雙精度浮點數規(guī)格化表示 x=(-1)s×(1.M)×2E-1023 e=E-1023(E=e+1023)指數真值e用移碼形式表示為階碼E尾數規(guī)格化表示原則IEEE754標準④X=(-1)s×1.M×2e
=+(1.011011)×23 =+1011.011=(11.375)10②指數e=階碼-127=10000010-01111111
=00000011=(3)10③包括隱藏位1的尾數1.M=1.011011例1:浮點機器數(41360000)16,求真值①十六進制數展開成二進制數010000010011011000000000
0000
0000S階碼E(8位)尾數M(23位)例2:真值20.59375,求32位單精度浮點數①分別將整數和分數部分轉換成二進制數
20.59375=10100.10011②移動小數點,使其在第1、2位之間10100.10011=1.010010011×24e=4S=0E=4+127=131=10000011M=010010011③得到32位浮點數的二進制存儲格式為:0
100000110100100110000000000
0000=(41A4C000)16二進制:010000011010000110000000,,,S=0e=10000011-01111111=100=4M=1.01000011真值=+(1.01000011)×24
=+10100.0011=20.187510練習題:若浮點機器為(41A18000)16,求真值?3、十進制數據表示人們習慣于用十進制表示數據,而計算機則采用二進制表示和處理數據。所以向計算機輸入數據時,需要進行十進制數到二進制數的轉換;輸出數據時,則要進行二進制數到十進制數的轉換處理。在數據量較小的情況下,這樣的轉換對機器運行效率的影響不是很大。但是,在某些應用領域,運算簡單而數據量很大,進行這些轉換所占用的時間比例比較大。所以為了提高機器的運行效率,計算機可以用十進制來表示和處理數據。一個十進制數位是用若干位二進制編碼表示。用四位二進制代碼的不同組合來表示一個十進制數碼的編碼方法,稱為二—十進制編碼,也稱BCD碼(BinaryCodedDecimal)。常用這種編碼作為十進制數轉換成二進制數的中間過渡。即先將一個十進制數用BCD碼來表示,再把它們送入機器。BCD碼(BinaryCodedDecimal)二進制編碼的十進制數一個十進制數位用4位二進制編碼來表示常用8421BCD碼:低10個4位二進制編碼表示0~9BCD碼很直觀BCD碼:0100100101111000.000101001001十進制真值: 4978.149BCD碼便于輸入輸出,表達數值準確
十進制數串的表示方法1.字符串形式每個十進制的數位或符號位都用一個字節(jié)存放+12-38-382.壓縮的十進制數串形式一個字節(jié)存放兩個十進制的數位,符號位占半個字節(jié),數位加符號位之和必須為偶數(例如用C表示正,D表示負)+12123
C012D+123-12
每個數位可用BCD碼1.原碼表示法定點整數的原碼形式為x0x1x2…xn
X
2n
>X≥0
[X]原=
2n-X=2n+|X|
0≥X>-2n使用8位二進制:[105]10=[01101001]2X=+105,則[X]原=01101001X=-105,則[X]原=111010010使用原碼有兩種表達形式
[+0]原
=00000000
[-0]原
=10000000符號位2.1.2數的機器碼表示具有原碼、反碼、補碼、移碼原碼缺點進行加減運算十分麻煩比較數的絕對值的大小大數減小數符號跟大數2/6/20235:13AM
現(xiàn)在是北京時間3點整,而時鐘卻指向5點。5-2=35+10=15=3(12自動丟失。12就是模)2、補碼表示法2/6/20235:13AM繼續(xù)推導:
5-2=5+10(MOD12)
-2=10(MOD12)結論:可以說:在模為12的情況下,-2的補碼就是10。一個負數用其補碼代替,可以把減法轉換為加法來實現(xiàn)。2.補碼表示法定點整數的補碼形式為x0x1x2…xn
X
2n
>X≥0
[X]補=
2n+1+X=2n+1-|X|
0≥x≥-2n定點整數的補碼方法有符號整數在計算機中默認采用補碼最高位表示符號:正數用0,負數用1正數補碼:直接表示數值大小(=原碼=無符號數)負數補碼:符號位不變,將對應數值取反加1 [105]補碼=+1101001=01101001 [-105]補碼=-[1101001]取反+1
=-0010110+1=-0010111=10010111為什么是補碼證明:[-105]補=2n+1+X=28+(-1101001)=100000000+(-1101001)=100101113、定點整數的反碼反碼:二進制的各位數碼0變?yōu)?,1變?yōu)?有符號整數采用反碼最高位表示符號:正數用0,負數用1正數反碼:直接表示數值大?。ǎ皆a=補碼)負數反碼:將對應正數反碼取反
[105]反碼=01101001 [-105]反碼=[1101001]取反=100101104、定點整數的移碼(偏移碼)移碼通常用于表示浮點數的階碼有符號整數采用移碼最高位表示符號:正數用1,負數用0(跟其他碼相反)移碼的傳統(tǒng)定義:
[X]移碼=2n+X
2n
>X≥-2n [105]移碼=10000000+1101001=1,1101001 [-105]移碼=10000000-1101001=0,0010111相對于偏移一半傳統(tǒng)定義與標準浮點數階碼的定義不同真值原碼反碼補碼移碼-128
1000000000000000-12711111111100000001000000100000001...............-110000001111111101111111101111111-010000000111111110000000010000000+000000000000000000000000010000000+100000001000000010000000110000001...............+12701111111011111110111111111111111例8
設機器字長16位,定點表示,尾數15位,數符1位,問:
⑴
定點原碼整數表示時,最大正數是多少?最小負數是多少?
⑵
定點原碼小數表示時,最大正數是多少?最小負數是多少?例8之解⑴定點原碼整數表示最大正數值=(215-1)10=(+32767)10
最小負數值=-(215-1)10
=(-32767)10
⑵定點原碼小數表示最大正數值=(+0.111...11)2
=(1-2-15)10最小負數值=(-0.111..11)2=-(1-2-15)100
11111111111
1111
1
11111111111
1111
例9假設由S,E,M三個域組成的一個32位二進制字所表示的非零規(guī)格化浮點數x,真值表示為(非IEEE754標準):
x=(-1)s×(1.M)×2E-128
問:它所表示的規(guī)格化的最大正數、最小正數、最大負數、最小負數是多少?(1)最大正數01111111111111111111
1111
1111
1111x=[1+(1-2-23)]×2127(2)最小正數000000000000000000
000
000
000
00000x=1.0×2-128(3)最小負數111111111111111111
111
111
111
11111x=-[1+(1-2-23)]×2127(4)最大負數
100000000000000000
000
000
000
00000x=-1.0×2-128
同一代碼的不同含義一個代碼,采用不同編碼,其數值不一樣計算機內一個二進制數: 10000001不同的含義無符號二進制數: 1298421BCD碼: 81有符號整數的原碼: -1有符號整數的反碼: -126有符號整數的補碼: -127數的機器碼表示小結正數的原碼、反碼、補碼等于真值,只有負數才分別有不同的表示方法采用補碼,減法運算可以用加法運算實現(xiàn),節(jié)省硬件,目前機器中廣泛采用補碼表示法有些機器用原碼進行存儲和傳送,運算時改用補碼有些機器做加減法時用補碼,做乘除法時用原碼移碼表示法主要用于表示浮點數的階碼,可以直接比較大小。表示范圍和補碼相同,只有最高位相反ASCII碼(美國標準信息交換碼)標準ASCII碼用8位二進制編碼,最高位為偶校驗位,其余7位構成128個編碼可顯示和打印的字符:20H后的94個編碼數碼0~9:30H~39H大寫字母A~Z:41H~5AH小寫字母a~z:61H~7AH空格:20H2.1.3字符和字符串(非數值)的表示方法表2.1ASCII字符編碼表0000010100111001011101110000NULDELSP0@P`p0001SOHDC1!1AQaq0010STXDC2"2BRbr0011ETXDC3#3CScs0100EOTDC4$4DTdt0101ENQNAK%5EUeu0110ACKSYN&6FVfv0111BELETB'7GWgw1000BSCAN(8HXhx1001HTEM)9IYiy1010LFSUB*:JZjz1011VTESC+;K[k{1100FFFS,<L\1|1101CRGS-=M]m}1110SORS.>N^n~1111SIUS/?O_oDEL0-3位4-6位字符串的表示方法字符串是指連續(xù)的一串字符,通常占用主存中連續(xù)的多個字節(jié),每個字節(jié)存一個字符
IFA>BTHENREAD(C)字符串的存放方法1.漢字的輸入編碼數字編碼國標區(qū)位碼,用數字串代表一個漢字輸入
拼音碼以漢字拼音為基礎的輸入方法字形編碼用漢字的形狀(筆劃)來進行的編碼例如五筆字形2.1.4漢字的表示方法
2、漢字內碼漢字內碼是用于漢字信息的存儲、檢索等操作的機內代碼,一般采用兩個字節(jié)表示漢字內碼有多種方案,常以國標碼為基礎進行編碼例如,將國標碼兩字節(jié)的最高位置1后形成漢字“啊”的CCDOS系統(tǒng)漢字內碼
3021H(0011000000100001)對應的漢字內碼
B0A1H(1011000010100001)字模碼漢字的字模碼為:16位×16位=32字節(jié)漢字字模點陣及編碼3、漢字字模碼-用于對漢字進行顯示輸出漢字的表示方法漢字的輸入編碼、漢字內碼、字模碼是計算機中用于輸入、內部處理、交換、輸出四種不同用途的編碼,不要混為一談
顯示輸出打印輸出機內碼向字形碼轉換機內碼輸入碼向機內碼轉換字符代碼化(輸入)2.1.5校驗碼校驗碼:能夠發(fā)現(xiàn)甚至糾正信息傳輸或存儲過程中出現(xiàn)錯誤的編碼檢錯碼:僅能檢測出錯誤的編碼糾錯碼:能夠發(fā)現(xiàn)并糾正錯誤的編碼最簡單且應用廣泛的檢錯碼:奇偶校驗碼奇校驗:使包括校驗位在內的數據中為“1”的個數恒為奇數偶校驗:使包括校驗位在內的數據中為“1”的個數恒為偶數(包括0)只能檢測出奇數個位出錯的情況,不能糾錯例7:用奇校驗和偶校驗進行編碼數據1010101001010100000000000111111111111111偶校驗碼101010100010101001000000000011111111111111110奇校驗碼1010101010101010000000000010111111101111111112.2運算方法和運算器2.2定點加法、減法運算2.3定點乘法運算2.4定點除法運算2.5定點運算器的組成2.6浮點運算方法和浮點運算器2.2.1補碼加法補碼加法公式
[x]補+[y]補=[x+y]補
(mod2n+1)
在模2n+1意義下,任意兩數的補碼之和等于該兩數之和的補碼。補碼加法特點符號位要作為數的一部分一起參加運算要在模2n+1的意義下相加,即超過2n+1的進位要丟掉[x]補+[y]補=[x+y]補證明假設采用定點整數表示現(xiàn)分四種情況來證明(1)x﹥0,y﹥0,則x+y﹥0[x]補=x,[y]補=y,[x+y]補=x+y所以等式成立.(2)x﹥0,y﹤0,則x+y>0或x+y<0[x]補=x,[y]補=2n+1+y,[x]補+[y]補=x+y+2n+1
當x+y>0時,2n+1
+(x+y)>2n+1,進位2n+1必丟失,又因(x+y)>0,故[x]補+[y]補=x+y=[x+y]補
當x+y<0時,2n+1
+(x+y)<2n+1,又因(x+y)<0,故[x]補+[y]補=2n+1
+(x+y)=[x+y]補
所以上式成立[x]補+[y]補=[x+y]補證明(3)x<0,y>0,則x+y>0或x+y<0
這種情況和第2種情況一樣,把x和y的位置對調即得證。(4)x<0,y<0,則x+y<0相加兩數都是負數,則其和也一定是負數。∵[x]補=2n+1
+x,
[y]補=2n+1
+y∴[x]補+[y]補=2n+1+x+2n+1+y=2n+1+(2n+1
+x+y)上式右邊分為”2n+1”和(2n+1+x+y)兩部分.既然(x+y)是負數,那么(2n+1
+x+y)進位”2n+1”必丟失.又因(x+y)<0,所以[x]補+[y]補=2n+1
+(x+y)=[x+y]補
例11:x=+1001,y=+0101,求x+y[x]
補=01001,[y]
補=00101
[x]
補
01001+[y]
補
00101
[x+y]
補
01110
所以x+y=01110
例9:x=+1011,y=-0101,求x+y[x]
補=01011,[y]
補=11011
[x]
補
01011+[y]
補
11011
[x+y]
補
100110
所以x+y=001102.2.2補碼減法補碼減法運算公式[x-y]補=[x]補-[y]補=[x]補+[-y]補[x-y]補=[x]補-[y]補=[x]補+[-y]補只要證明[-y]補=-[y]補,上式即得證。現(xiàn)證明如下:∵[x+y]補=[x]補+[y]補
(mod2n+1)∴[y]補=[x+y]補-[x]補
(2.19a)∵[x-y]補=[x+(-y)]補=[x]補+[-y]補∴[-y]補=[x-y]補-[x]補
(2.19b)將式(2.19a)與(2.19b)相加,得
[-y]補+[y]補=[x+y]補+[x-y]補-[x]補-[x]補=[x+y+x-y]補-[x]補-[x]補=[x+x]補-[x]補-[x]補=0故[-y]補=-[y]補(mod2n+1)(2.20)
從[y]補求[-y]補的法則是:對[y]補包括符號位“求反且最末位加1”,即可得到[-y]補。寫成運算表達式,則為[-y]補=﹁[y]補+2-n
其中符號﹁表示對[y]補作包括符號位在內的求反操作,2-n表示最末位的1[x1]補=10010[-x1]補=﹁[x1]補+2-4
=01101+00001=01110[x2]補=01101[-x2]補=﹁[x2]補+2-4
=10010+00001=10011
例13:已知x1=-1110,x2=+1101
求:[x1]補,[-x1]補,[x2]補,[-x2]補例14:x=+1101,y=+0110,求x-y[x]補=01101,[y]補=00110[-y]補=11010
[x]
補01101
+[-y]
補
11010
[x-y]
補
100111
所以x-y=+01112.2.3
溢出概念與檢驗方法兩個正數相加,結果為負(即:大于機器所能表示的最大正數),稱為正溢。兩個負數相加,結果為正(即:小于機器所能表示的最小負數),稱為負溢。運算出現(xiàn)溢出,結果就是錯誤的[例15]
x=+1011,y=+1001,求x+y。[解:]
[x]補=01011,[y]補=01001[x]補
01011+[y]補
01001[x+y]補
10100
兩正數相加,結果為負,顯然錯誤。--運算中出現(xiàn)了“正溢”[例16]x=-1101,y=-1011,求x+y
。
解:[x]補=10011,[y]補=10101
[x]補
10011
+[x]補
10101
——————————————
[x+y]補
01000
兩個負數相加的結果成為正數,表示負溢。2/6/20235:13AM1)兩個數太大:產生進位而改變了符號位;
1、兩異號數相加或兩同號數相減是否會產生溢出?2、僅當兩同號數相加或兩異號數相減時才有可能產生溢出?問題:決不會產生溢出正確2、溢出原因:“溢出”檢測方法:第一種方法:采用雙符號位法,
稱為“變形補碼”或“模4補碼”。用“00”表示正數,“11”表示負數,兩個符號位同時參加運算,如果運算結果兩符號位相同,則沒有溢出發(fā)生。如果運算結果兩符號位不同,則表明產生了溢出。“10”表示負溢出(下溢出),說明運算結果為負數,“01”表示正溢出(上溢出),說明運算結果為正數。[例17]x=+1100,y=+1000,求x+y
。
解:[x]補=001100,[y]補=001000
[x]補00
1100
+[y]補001000
————————————————
[x+y]補010100
(表示正溢)
[例18]x=-1100,y=-1000,求x+y
。
解:[x]補=110100,[y]補=111000
[x]補110100
+[y]補111000
————————————————
[x+y]補101100
(表示負溢)
第二種方法:單符號位法當最高有效位產生進位而符號位無進位時,產生上溢;當最高有效位無進位而符號位有進位時,產生下溢。故溢出邏輯表達式為V=Cf⊕C0,其中Cf為符號位產生的進位,C0為最高有效位產生的進位。(見例15、16)2.2.4基本的二進制加法/減法器在計算機中完成兩個二進制數相加的基本加法器有半加器和全加器。半加器在完成兩數相加時,不需要考慮低位進位。全加器用來完成兩個二進制數相加,并且同時考慮低位的進位,即全加器完成三個一位數相加的功能。2.2.4基本的二進制加法/減法器全加器邏輯圖CiAiBiSiCi+1FACiAiBiSiCi+1輸出輸入0110100001101000100010100010111010111111表2-2全加器真值表2.2.4基本的二進制加法/減法器全加器的表達式為:
Si=AiBi
Ci
Ci+1=AiBi+BiCi
+AiCi
一位全加器內部邏輯圖
BCSiCi+1ABCAAiBiCi2.2.4基本的二進制加法/減法器利用全加器可以實現(xiàn)兩數的和或差1、串行加法:從低位開始,每步只完成一位運算的加法。串行加法器只需要全加器計算兩個n位數之和,需要n+1步(1位符號位),或n+2步(2位符號位)運算。高位運算只有等低位運算完成后才能進行,速度較慢2.2.4基本的二進制加法/減法器圖2-2
行波進位補碼加法/減法器FAFAFAFAFAS0S1Sn-1Bs1As1Bs2As2Cs2Cs1Ss2Ss1Bn-1An-1Cn-1Cn-2B1A1B0A0C1C2C0溢出M方式控制M=1減M=0加2.3定點乘法運算2.3.1原碼并行乘法2.3.2補碼并行乘法2.3.1原碼并行乘法1.人工算法與機器算法的同異性設n位被乘數和乘數用定點整數表示
被乘數[x]原=xf
xn-1…x1x0
乘數[y]原=yf
yn-1…y1y0
則乘積
[z]原=(xf⊕yf)+(xn-1…x1x0)(yn-1…y1y0)兩個原碼表示的數相乘的運算規(guī)則是:乘積的符號位由兩數的符號位按異或運算得到,而乘積的數值部分則是兩個正數相乘之積。數值部分的運算方法與普通的十進制乘法類似。 設x=1101,y=1011.讓我們用人工算法求其乘積,其過程如下:2/6/20235:13AM人工算法11011011×1101110100001101+10001111
2.3.1原碼乘法缺點將多個數一次相加,機器難以實現(xiàn)。一般的加法器,只能把兩個輸入數相加,多個位積的同時輸入是無法實現(xiàn)的。乘積位數增長了一倍,即2n,而機器字長只有n位所以需要改進方法一:硬件實現(xiàn)方法(串行的“加法和移位”),硬件結構簡單,速度太慢(時間延遲太長).方法二:不帶符號位的陣列乘法器2.不帶符號的陣列乘法器m×n位不帶符號的陣列乘法器邏輯圖
每一個部分乘積項aibj叫做一個被加數。這m×n個被加數可以用m×n個“與”門并行地產生。
不帶符號的全加器(FA)陣列斜線為進位輸出和輸入行波進位加法器n(n-1)個全加器n×n個與門play5位×5位陣列乘法器的邏輯電路圖[例19]已知不帶符號的二進制整數A=11011,B=10101,求每一部分乘積項aibj的值與p9p8…p0的值。解:
11011=A(2710)
×
10101=B(2110)
————————————
11011
a4b0=1,a3b0=1,a2b0=0,a1b0=1,a0b0=1
00000
a4b1=0,a3b1=0,a2b1=0,a1b1=0,a0b1=0
11011
a4b2=1,a3b2=1,a2b2=0,a1b2=1,a0b2=1
00000
a4b3=0,a3b3=0,a2b3=0,a1b3=0,a0b3=0
+11011
a4b4=1,a3b4=1,a2b4=0,a1b4=1,a0b4=1
————————————
1000110111=P
P=p9p8p7p6p5p4p3p2p1p0=1000110111(56710)
3、帶符號位的陣列乘法器陣列乘法器使用的求補電路
原理:采用按位掃描技術,則從數最右端往左邊掃描,直到第一個1的時候,該位和右邊各位保持不變,左邊各數值位按位取反。
3.帶符號的陣列乘法器
(1)對2求補器電路
進行求補的方法就是從數的最右端a0開始,由右向左,直到找出第一個“1”,其以左的每一個輸入位都求反。
E為“1”→對a求補
E為“0”→輸出=輸入
符號位可作控制信號E數值位play101001101
3.帶符號的陣列乘法器
當乘積為負時,將運算結果變成帶符號數(補碼)符號位用做使能控制信號符號位異或的結果,用做使能控制*既適用于原碼乘法—
輸入為原碼,算前和算后求補不做任何動作。*也適用于補碼乘法—輸入為補碼,算前轉換為原碼和算后求補。*符號單獨處理。*
A·B=P=p2n-1…p1p0
p2n=an⊕bn解:[x]原=01111,[y]原=11101,|x|=1111,|y|=1101
符號位運算:0⊕1=1
1111
×
1101
————————————
1111
0000
1111
+1111
————————————
11000011
乘積符號為1,算后求補器輸出11000011,[x×y]原=111000011
換算成二進制數真值是x·y=(-11000011)2=(-195)10
[例20]設x=+15,y=-13,用帶求補器的原碼陣列乘法器求出乘積x·y=?乘積符號位單獨運算:x0⊕y0=1⊕1=0算后求補器輸出為11000011,最后補碼乘積值為[x·y]補=011000011=+195[例21]設x=-15,y=-13,用帶求補器的補碼陣列乘法器求出乘積x·y=?〔解〕輸入數據用補碼表示:
[x]補=10001,[y]補=10011
尾數部分算前求補器輸出為|x|=1111,|y|=1101。1111×11011111000011111111110000112.4定點除法運算2.4.1原碼除法算法原理
主要內容:原碼除法兩個原碼表示的數相除時,商的符號由兩數的符號“異或”求得,即同號時為正,異號為負。商的數值可由兩數的絕對值相除求得。手工算除法x=–0.1011y=0.1101求x÷y0.10110.1101⌒0.011010.010010.0011010.0001010.000011010.00000111
1商符單獨處理心算上商余數不動低位補“0”減右移一位的除數x÷y=–0.1101余數
0.0000011100.101000
??2.4.1原碼除法筆算特點:(1)每次都是由心算來比較余數和除數的大小,余數大時,商1;余數小時,商0。(2)每做一次減法,總是保持余數不動,而除數向右移一位。(3)商的符號單獨處理。機器實現(xiàn):機器必須通過減法,余數為正夠減,余數為負表示不夠減。不夠減,則加上除數,這叫恢復余數法;不夠減,下次加除數,這叫加減交替法(即不恢復余數法)。
0.101001+[-y]補
1.0011.110001+[y]補
0.1110.101001+[-y]補×2-1
1.10010.001101+[-y]補×2-2
1.110011.111111+[y]補×2-2
0.00111
0.001101+[-y]補×2-3
1.1110010.000110例,x=0.101001,y=0.111,求x/y。
[x]補
=0.101001[y]補
=0.111[-y]補
=1.001∴q=q0.q1q2q3=0.101r=0.000110恢復余數恢復余數不夠減的次數不固定。注意:減法在機器中是通過補碼加法完成的。q0=0q1=1q2=0q3=1恢復余數法假設要計算x÷y,,當上商qi時,x減的是y×2-i,余數為r;r<0,表示不夠減,上商0,并恢復余數,即r=r+y×2-i,下次減y×2-(i+1);∵
r+y×2-i-y×2-(i+1)=r+y×2-(i+1)
∴可不恢復余數,下次對余數做加法。
這種不恢復余數除法,叫做加減交替法。加減交替法的原理
0.101001+[-y]補
1.0011.110001+[y]補×2-1
0.01110.001101+[-y]補×2-2
1.110011.111111+[y]補×2-30.0001110.000110例,x=0.101001,y=0.111,求x/y。
[x]補=0.101001,[y]補=0.111,[-y]補=1.001補碼移1位補碼移2位補碼移3位q=q0.q1q2q3=0.101r=0.000110加減法的步數固定!每步實際是做補碼加法!余數<0,商0,下次加;余數≥0,商1,下次減。q0=0q1=1q2=0q3=1加減交替法(結果和恢復對比)2.4.2并行除法器
1.可控加、減法(CAS)單元P=0,這時A+B+Ci,Ci是進位怎樣實現(xiàn)A-B?P=1,這時A+B+Ci,Ci是借位P=0,加P=1,減加減交替法的陣列除法器P=1,首次做減法。反饋線做最右邊CAS的Ci輸入!當P=1,C3=1,實現(xiàn)+[-B]補當P=0,C4=0,實現(xiàn)+[B]補
0.101001+[-y]補
1.0011.110001+[y]補×2-1
0.01110.001101+[-y]補×2-2
1.110011.111111+[y]補×2-30.0001110.0001102.5定點運算器的組成運算器的基本組成算術/邏輯運算單元(ALU)、數據緩沖寄存器、通用寄存器、多路轉換器、數據總線等。2.5.1
邏輯運算計算機中除了進行加、減、乘、除等基本算術運算外,還可對兩個或一個邏輯數進行邏輯運算。所謂邏輯數是指不帶符號的二進制數。利用邏輯運算可以進行兩個數的比較,或者從某個數中選取某幾位等操作。主要有邏輯非(反)、邏輯加(或)、邏輯乘(與)、邏輯異或四種基本運算。2/6/20235:13AM1.邏輯非運算
邏輯非也稱求反。如:
x1=01001011,x2=11110000,求x1,x2。x1=10110100x2=000011112.邏輯加運算按位求它們的“或”x=10100001,y=10011011,求x+y。
10100001x
+
10011011y
10111011z3.邏輯乘運算按位求它們的“與”
x=10111001,y=11110011,求x*y。
10111001x
*
11110011y
10110001z2/6/20235:13AM4.邏輯異運算按位求它們的模2和x=10101011,y=11001100,求x⊕y。[解:]
10101011x
⊕11001100y
01100111z即x⊕y=011001112.5.2多功能算術邏輯運算單元行波進位加法器只能完成加、減法,不能完成多樣的算術運算,同時,還不能完成邏輯運算。對全加器的輸入先進行多樣化組合——一位算數/邏輯運算單元。S0S1YiS2S3Xi00Ai00101AiBi01Ai+Bi10AiBi10Ai+Bi11011Ai邏輯表達式控制參數S0,S1,S2,S3
分別控制輸入Ai
和Bi,產生Yi和Xi的函數。Yi是受S0,S1控制的Ai和Bi的組合函數。Xi是受S2,S3控制的Ai和Bi組合函數。2.5.2多功能算術邏輯運算單元Xi、Yi與控制參數(S0~S3)、輸入量(Ai、Bi)的關系歸納S0S1YiS2S3Xi00Ai00101AiBi01Ai+Bi10AiBi10Ai+Bi11011Ai一個ALU芯片包含多位算邏運算電路,如4位、8位等。片內第0位向第1位的進位公式:片內第1位向第2位的進位公式:片內第2位向第3位的進位公式:片內第3位的進位(即整個4位的進位)公式:令則G稱為進位發(fā)生輸出,P稱為進位傳遞輸出。行波進位中,Ci依賴Ci-1;而這里的G、P使Cn+4只依賴X,Y,從而可快速產生高位ALU的進位輸入?!舫斑M位加法器(解決進位問題)2.5.2多功能算術邏輯運算單元playM=1執(zhí)行邏輯運算74181ALU功能表十六位的ALU74181是4位先行進位ALU,若用4片74181串聯(lián),即上面實現(xiàn)的是,片內先行進位,片間串行進位。如果將四片74181的G、P輸出端送入到74182先行進位部件(CLA),可實現(xiàn)第二級的先行進位,即組與組之間的先行進位。74181741817418174181CnCn+4CnCnCnCn+4Cn+4Cn+474181741817418174181CnCnCnCn+xCn+474182GPGPGPG0P0Cn+yG1P1Cn+zG2P2CnCnG3P3Cn+4G*P*此結構實現(xiàn)16的全先行進位。2.5.2多功能算術邏輯運算單元
74182實現(xiàn)了什么?74182是先行進位部件(CLA)。Cn+x=G0+P0CnCn+y=G1+P1Cn+x
=G1+G0P1+P0P1CnCn+z=G2+P2Cn+y
=G2+G1P2+G0P1P2+P0P1P2CnCn+4=G3+P3Cn+z=G3+G2P3+G1P2P3+G0P1P2+P0P1P2P3CnG*=G3+G2P3+G1P2P3+G0P1P2;P*=P0P1P2P374181741817418174181CnCnCnCn+xCn+474182GPGPGPG0P0Cn+yG1P1Cn+zG2P2CnCnG3P3Cn+4G*P*play例:利用74181、74182組成32位全先行進位ALU。分析:每片181是4位ALU,∴需要8片74181。每片182支持4片181先行進位,兩片182可實現(xiàn)用兩個16位全先行進位部件級聯(lián)組成的32位ALU。串聯(lián)起來的32位ALU不是32位全先行進位ALU。74181741817418174181CnCnCnCn+xCn+474182GPGPGPG0P0Cn+yG1P1Cn+zG2P2CnCnG3P3Cn+4G*P*16位內進位先行2個16位之間串行進位181181181181181181181181182182CoutCin2.5.3內部總線總線:將多個部件聯(lián)系起來,支持任兩個部件間的數據傳送。內部總線:CPU中的部件間總線。外部總線:即系統(tǒng)總線,是CPU、存儲器、IO子系統(tǒng)之間的連線。單向總線:總是沿著一個方向傳送數據的總線。雙向總線:分時進行兩個方向傳送數據的總線。play2.5.4定點運算器的基本結構基本結構包括:ALU、陣列乘除器、寄存器、多路開關、三態(tài)緩沖器、數據總線等。結構設計要點:部件間如何傳送數據!單總線結構總線*任何時刻,只能有一個數據在總線上;*
ALU需要兩個緩沖器,送兩個操作數需要兩次;*當操作數都來自寄存器,執(zhí)行慢。*控制簡單。2.5.4定點運算器的基本結構雙總線結構任何時刻,可有兩個數據在總線上。送兩個操作數到ALU,只需一個操作,但結果不能直接送總線;如果在ALU出端設緩沖器,則結果可直接連到總線。特殊寄存器分為兩組,通用寄存器的數據可送至任何一個特殊寄存器。2.5.4定點運算器的基本結構三總線結構算術邏輯運算可以一步完成。注意,輸出選通脈沖要考慮ALU的計算延遲。旁路器可用于總線間的直接傳送。play2.6浮點運算方法和運算器2.6.1浮點加法、減法運算2.6.2浮點乘法、除法運算2.6.3浮點運算流水線2.6.1浮點加法、減法運算運算規(guī)則:浮點加/減法操作流程:0操作數檢查對階,“小階向大階看齊”尾數求和結果規(guī)格化,“向左規(guī)格化”、“向右規(guī)格化”舍入處理溢出判斷2.6.1浮點加法、減法運算浮點加/減法操作流程0操作數檢查對于x±y,計算機先判斷x和y是否為浮點數零;如x=0,z=±y;如y=0,z=x。都不是零,進入“對階”階段。對階先求;若,進入“尾數求和”階段。否則,“小階向大階看齊”。假設,將Mx右移位,Ex置為Ey。若大階向小階看齊,尾數左移,可能引起最高有效位的丟失,造成較大誤差。例:1.0110,左移2位,101.1010;右移2位,0.0101102.6.1浮點加法、減法運算浮點加/減法操作流程尾數求和加法:[Mx+My]補=[Mx]補+[My]補減法:[Mx-My]補=[Mx]補-[My]補=[Mx]補+[-My]補
尾數結果為什么要規(guī)格化?
尾數加/減運算之后得到的數可能不是規(guī)格化數,為了增加有效數字的位數,提高運算精度,必須進行結果規(guī)格化操作。例如:0.00011101或111.0011為非規(guī)格化數結果規(guī)格化
1/2≤|M|<1(跟IEEE754區(qū)分開) 對于原碼尾數最高位為1,對于補碼負數尾數最高位為0,設尾數用雙符號位表示,經過加/減運算之后,可能出現(xiàn)以下幾種情況:對于原碼00.1xx…x和11.1xx…x情況就是標準的規(guī)格化數。對于補碼00.1xx…x和11.0xx…x情況就是標準的規(guī)格化數。怎樣規(guī)格化?非規(guī)格化數據的處理
對于原碼表示的00.0xx…x和11.0xx…x需要使尾數左移以實現(xiàn)規(guī)格化.
對于補碼表示的00.0xx…x和11.1xx…x需要使尾數左移以實現(xiàn)規(guī)格化,這個過程稱為左規(guī)。尾數每左移一位,階碼相應減1直至成為規(guī)格化數為止。
左規(guī)可以進行多次。對于01.xxx…x和10.xxx…x這兩種情況在定點加減運算中稱為溢出;但浮點加減運算中,只表明此時尾數的絕對值大于1,而并非真正的溢出。這種情況應將尾數右移以實現(xiàn)規(guī)格化。這個過程稱為右規(guī)。尾數右移一位,階碼相應加1
右規(guī)最多只有一次。非規(guī)格化數據的處理練習原碼00.001010111.0101011補碼00.010111111.1010111溢出01.111011110.10110112.6.1浮點加法、減法運算浮點加/減法操作流程舍入處理對階、結果向右規(guī)格化時,尾數右移;尾數存儲長度有限!右移m次,會使尾數的最低m位丟失!0舍1入法最后移出1,則尾數末位加1;移出0,不做修正。恒置1法只要右移,尾數末尾恒置1。IEEE754中的四種舍入處理就近舍入(即四舍五入)若移出10010,即>10000,則尾數末位加1;若移出01111,即<10000,則直接截掉!若移出10000,若尾數末位為0,則截掉;反之,末位加1SE(8)M(23位)10010101+111001+10111SE…10111000SE…11002.6.1浮點加法、減法運算浮點加/減法操作流程舍入處理IEEE754中的四種舍入處理朝0舍入向尾數絕對值變小方向舍入,即截掉移出部分。朝+∞舍入對于正數,只要移出的數位有1,則尾數末位加1;對于負數,直接截掉!朝-∞舍入對于正數,直接截掉!對于負數,只要移出的數位有1,則尾數末位加1。2.6.1浮點加法、減法運算浮點加/減法操作流程溢出處理階碼上溢浮點數的指數e超出機器階碼表示的最大值。結合數符,可判定浮點數為+∞或-∞。階碼下溢浮點數的指數e超出機器階碼表示的最小值??膳卸ǜ↑c數0。尾數上溢尾數求和時,產生向小數點左側的進位,可右規(guī)消除!尾數下溢尾數右移時,尾數最低位流出,可舍入處理!浮點加/減法操作流程※0操作數檢查※對階,“小階向大階看齊”※尾數求和※結果規(guī)格化,“左規(guī)”、“右規(guī)”※舍入處理※溢出判斷例28:x=2010×0.11011011,y=2100×(-0.10101100),求x+y。解:階碼采用雙符號位,階碼、尾數采用補碼表示
[x]?。?0010,0.11011011;[y]?。?0100,1.01010100
1)對階。
x對階(小階向大階看齊):[x]浮=00100,0.00110110(11)2)尾數求和。3)規(guī)格化。[Mx+My]補=1.10001010(11)0.00110110(11)+1.010101001.10001010(11)[Mx+My]補=1.00010101(10)4)舍入處理。采用0舍1入法,得:00011,1.000101105)判溢出。階碼符號位為00,不溢出。最后結果:
x+y=2011×(-0.11101010)
00011,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年臨時員工派遣協(xié)議范本
- 2025年借殼上市交易合作協(xié)議
- 2025年倉儲干果堅果保管合同
- 2025年售房合同解除協(xié)議
- 2025年死因贈與合同的咨詢平臺
- 2025年食堂食材采購與社區(qū)支持農業(yè)合同范本大全3篇
- 2025版生物質木屑顆粒燃料買賣合同4篇
- 二零二五年度不動產抵押擔保物業(yè)管理合同樣本3篇
- 2025版微股東眾籌入股協(xié)議書-新能源開發(fā)項目專用3篇
- 二零二五年度科研實驗室租賃合同租金調整與設備配置補充協(xié)議
- 《中華民族多元一體格局》
- 2023年四川省綿陽市中考數學試卷
- 南安市第三次全國文物普查不可移動文物-各鄉(xiāng)鎮(zhèn)、街道分布情況登記清單(表五)
- 選煤廠安全知識培訓課件
- 項目前期選址分析報告
- 急性肺栓塞搶救流程
- 《形象價值百萬》課件
- 紅色文化教育國內外研究現(xiàn)狀范文十
- 中醫(yī)基礎理論-肝
- 小學外來人員出入校門登記表
- 《土地利用規(guī)劃學》完整課件
評論
0/150
提交評論