數據的表示和運算_第1頁
數據的表示和運算_第2頁
數據的表示和運算_第3頁
數據的表示和運算_第4頁
數據的表示和運算_第5頁
已閱讀5頁,還剩38頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第2章數據的表示和運算主要內容:數制與編碼定點數的表示和運算定點數的表示:無符號數的表示;有符號數的表示。定點數的運算:定點數的移位運算;補碼定點數的加/減運算;定點數的乘/除運算;溢出概念和判別方法。浮點數的表示和運算算術邏輯單元

ALU2.2定點數的表示和運算定點數:在計算機中,小數點位置固定不變的數。(1)無符號數的表示 機器字長的全部位數均用來表示數值的大小,相當于數的絕對值。對于字長為n位的無符號數的表示范圍為:0—2n-1。(2)帶符號數的表示在計算機中將數的符號數碼化。一般規定二進制的最高位為符號位,最高位為“0”表示該數為正,為“1”表示該數為負。這種在機器中使用符號位也被數碼化的數稱為機器數。根據符號位和數值位的編碼方法不同,機器數分為原碼、補碼和反碼等。定點整數、定點小數2.2.1定點數的表示數值范圍和數據精度數值范圍數值范圍是指一種類型的數據所能表示的最大值和最小值。數據精度通常指實數所能給出的有效數字位數;對浮點數來說,精度不夠會造成誤差,誤差大量積累會出問題。定點小數表示:X=X0X-1X-2…X-(n-1)[X]原=X

1-X

-(1-2-(n-1))≤

X≤0-1

≤X≤0Mod20≤X≤

1-2-(n-1)(純小數)原碼,反碼,補碼的定義n位字長(1位符號位,n-1位數值位)X(2-2-(n-1))+X[X]反=X

2+X[X]補=

-(1-2-(n-1))≤

X≤00≤X≤

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

1-2-(n-1)實例:X1=0.1011-0.10110.0000[X]原

=01011110110000010000

說明:原碼是符號位加數的絕對值,符號0正1負

原碼零有兩個編碼,+0和-0的編碼不同

原碼難以用于加減運算,但乘除方便(純小數)原碼的定義與說明定義:[X]原=X

1-X

-(1-2-(n-1))≤

X≤00≤X≤

1-2-(n-1)實例:X1=0.1011-0.10110.0000[X]補

=01011

10101

00000說明:補碼最高一位是符號位,符號0正1負

補碼表示為:2×符號位+數的真值

補碼零只有一個編碼,故能表示-1

補碼能很好地用于加減(乘除)運算(純小數)補碼的定義與說明定義:X

2+X[X]補=-1

≤X≤0Mod20≤X≤

1-2-(n-1)補碼的一些補充說明由[X]補(X0X1X2…Xn)求真值X[X]補

=2X0+X→X=[X]補

-2X0=X0X1X2…Xn-2X0=-X0+(-X0+X0X1X2…Xn)=-X0+0.X1X2…Xn負數的[X]補與[X]反的關系由[X]反

=(2–2-n)+X,[X]補=2+X可得到:[X]補

=[X]反

+2-n補碼的一些補充說明得到一個數補碼表示的簡便辦法當X≥0時,[X]補的符號位取0,數值位取X的各數值位上的值,此時有[X]補=X

當X<0時,[X]補的符號位取1,將X的各數值位取反,再在最低位加1,以得到[X]補的各數值位上的值

(見負數[X]補與[X]反的關系)[X]原與[X]補的相互轉換簡便方法從[X]原求[X]補時,對正數或零,有[X]補=[X]原,對負數則符號位不變,各數值位變反后再在最低位執行加1操作由[X]補求[X]原時,對負數仍是符號位不變,各數值位變反后再在最低位執行加1操作已知[y]補如何簡單求[-y]補

<Ⅰ>[y]補

=0y1

y2

yn…y=0.y1y2

yn…y=0.y1

y2

yn…[y]補

=1y1

y2

yn+2-n…<Ⅱ>[y]補

=1y1

y2

yn…[y]原

=1y1y2

yn+2-n…

y=(0.y1y2

yn

+2-n)…

y=0.y1y2

yn+2-n……[y]補

=0y1

y2

yn+2-n每位取反,即得[y]補[y]補連同符號位在內,末位加1每位取反,即得[y]補[y]補連同符號位在內,末位加1整數的編碼表示整數的原碼

反碼

補碼表示與小數的三種表示基本相同差別僅表現在小數點的位置可以認為整數的小數點在最低數值位的右側因此整數的模與整數位數有關講課中不大用整數講原反補

碼定義例如:整數6位編碼(1位符號位,5位數值位)X=+01110[X]原=001110[X]補=001110X=-01110[X]原=101110[X]補=110010X為真值整數的機器數n位字長(1位符號位,n-1位數值位)[X]原=X

2n-1-X

-(2n-1-1)≤

X≤00≤X≤

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

-(2n-1-1)≤

X≤00≤X≤

2n-1-1X

2n+X[X]補=-2n-1

≤X≤00≤X≤

2n-1-1(mod2n)000000000000000100000010…011111111000000010000001111111011111111011111111…二進制代碼無符號數對應的真值原碼對應的真值補碼對應的真值反碼對應的真值128129012127…253254255…-128-127-3-2-1…0+1+2+127…-127-126-2-1-0…+0+1+2+127…-0-1-125-126-127…+0+1+2+127…設機器數字長為8位(含1位符號位),表示整數時,每個編碼分別代表無符號數、原碼、補碼和反碼的真值各為多少?整數的移碼表示(用于浮點數階碼)[X]移

=2n-1+X移碼定義:X為真值,若機器字長為n位移碼在數軸上的表示例如:n=8x=10100[x]移

=27+10100x=–10100[x]移

=27

–10100=10010100=01101100-2n-1

≤X≤

2n-1

-1[X]移2n–12n-12n-1

–1–2n-100真值X[X]移

=2n-1+X=2n+2n-1+X=2n-1+[X]補原、反、補、移碼表示小結正數的

原碼、反碼、補碼表示均相同,符號位為0,數值位同數的真值。0的原碼和反碼有2個編碼,補碼和移碼只1個碼負數的

原碼、反碼、補碼表示均不同,符號位為1,數值位:原碼為數的絕對值反碼為每一位均取反補碼為反碼再在最低位+1由[X]補求[-X]補:無論正、負,每一位取反后再在最低位+1同一個整數的移碼與補碼僅符號位相反。2.2.2定點數的運算(1)定點數的移位運算移位是一種常用的操作,例如,在乘法中需要右移,在除法中需要左移,在代碼處理中也經常需要移位操作。移位可分為算術移位和邏輯移位,有左移和右移之分。可以對寄存器或存儲單元中的數據進行移位。一次可以只移一位,也可以按指令中規定的次數移若干位。①算術移位:移位的對象是數值型數據,在移位后會發生數值大小的變化。對于二進制數,左移,絕對值擴大;右移,絕對值縮小。算術移位規則:符號位不變②邏輯移位:包括邏輯左移、邏輯右移、循環左移和循環右移等。邏輯移位使代碼序列進行循環移位或非循環移位,參與移位的對象被視為純邏輯意義上的代碼組合,邏輯移位只是使數碼位置發生變化,沒有正、負性質,也沒有數值大小問題。③算術移位和邏輯移位的區別:算術移位:帶符號數移位邏輯移位:無符號數移位(2)補碼定點數的加/減運算

n位字長①

加法

整數[X+Y]補=[X]補+[Y]補

(mod2n)小數[X+Y]補=[X]補+[Y]補

(mod2)②

減法整數[X-Y]補=

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

(mod2n)小數[X-Y]補=

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

(mod2)無需符號判定,數值位連同符號位一起相加,符號位產生的進位自然丟掉。關鍵是由[Y]補求[-Y]補,

[-Y]補=對[Y]補

逐位取反再在最低位加1。實現補碼加減運算的邏輯電路X←X+YX←X-YF←

XF←YX←F加F←XFs加法器(ALU)目的寄存器源寄存器選通門二選通門選通門F←1XYF←YX←F0101F←YFsOVRZC累加器YF←XF←YF←1X←

F減00000111實現補碼加運算的執行過程X←X+Y完成加運算,需要把被加數和加數送ALU的輸入端,運算結果要接收到累加器,需要給出命令:F←XF←YX←FF←XF←YX←FFs

加法器

0101011010110001選通門二選一選通門XYFsOVRZC被加數/和Y加數CP101100010101011000000111CP命令建立數據傳送加運算存結果命令建立00000111數據傳送命令建立實現補碼減運算的邏輯電路F←XF←YX←FFs

加法器

0101011011110001選通門二選一選通門XYFsOVRZC被減數/差Y減數CPCP命令建立數據傳送加運算存結果命令建立數據傳送命令建立F←1100001110

01100101

01010110

01100101

X←X–Y完成減運算,需要把被減數和減數送ALU的輸入端,運算結果要接收到累加器,需要給出命令:F←XF←Y,F←1X←F(3)溢出概念和判別方法當運算結果超出機器數所能表示的范圍時,稱為溢出。一旦溢出,運算結果就不正確了,因此必須將溢出的情況檢查出來。主要判別方法:①單符號位:當任意符號兩數相加時,設Cf為最高數值位的進位,Cs為符號位的進位,若Cf=Cs,運算結果正確;若Cf≠Cs

,則產生溢出。

溢出條件:OV=Cs⊕Cf

。②雙符號:變形補碼,第一符號位Sf1,第二符號位Sf2,正數的雙符號位為00,負數的雙符號位為11。符號位參與運算,當結果的兩個符號位不相同時為溢出。溢出條件OV=Sf1⊕Sf2

。補碼加減法溢出判斷方法一:單符號位:數值位有向符號位的進位,但符號位不產生向更高位的進位,數值位沒有向符號位的進位,但符號位產生向更高位的進位方法二:雙符號位:運算結果為01

(正溢)或10(負溢),最高符號位Sf1

代表其真正的符號判斷溢出的邏輯電路如何實現呢?補碼加減法運算實例X=0.1011y=-0.0101[X]補

=001011,[Y]補

=111011模

4補碼

[-Y]補

=000101

001011001011+111011+0001011000110010000X+Y(不溢出)X-Y(溢出)正數加負數不會溢出符號位和數值位都產生進位雙符號位結果相同不是溢出正數加正數結果為負是溢出數值位有進位符號位無進位是溢出雙符號位結果不相同是溢出判斷溢出的2套方案是一個事實的2種不同的表述單符號位判斷數值位向符號位有進位但符號位無進位輸出或數值位向符號位沒有進位但符號位本身有進位輸出是溢出雙符號位判斷運算結果的2個符號位的值不相同表明有溢出(4)定點數的乘法運算原碼一位乘法:兩個原碼數相乘,其乘積的符號為相乘兩數的異或值,數值為兩數絕對值之積。補碼一位乘法:乘法直接用補碼進行,以減少轉換次數。[X]原=X0.X1X2…Xn,X0為符號[Y]原=Y0.Y1Y2…Yn,Y0為符號①原碼一位乘運算方案符號位異或,絕對值相乘原碼一位乘運算方案0.1101*0.1011110111010000+11010.10001111

解決方案:

1.每次求出部分積,不是一次總累加

2.變每次左移被乘數為右移部分積,移出的部分保存起來(保存到哪?)3.乘數放到一個移位寄存器中,判乘數每一位的值用最低的一位線路該方案用于計算機會有問題:

1.加法器只有兩個數據輸入端

2.加法器與乘運算數據位數相同

3.如何判斷乘數每一位是0或者1例:X=0.1101,Y=0.1011,求X·Y=?最終乘積原碼表示:

010001111手工運算過程:實現原碼一位乘法的邏輯線路圖加法器部分積被乘數乘數

F最低位加運算移位線路每位1套第i位第i位第i+1位第i-1位F/2→XF→XF*2→X移位電路最高位三選一電路被乘數作為加數,用乘數最低位的值控制累加,結果右移一位存部分積寄存器,并且乘數同時右移一位。部分積的最低位移入到乘數的最高位計數器Cd原碼一位乘運算過程舉例X=0.1101Y=0.1011【例】設X=0.1101,Y=0.1011,求X·Y。其中寄存器B=X,計數器Cd=4。計算過程:00000010110011010011010001101101001101010011001001111000000000100100010011110011010100010010001111+x右移一位→+x右移一位→+0右移一位→+x右移一位→部分積A乘數C乘積高位乘積低位1(丟失)1(丟失)0(丟失)1(丟失)X?Y=0.10001111

原碼一位乘運算規則①操作數、結果用原碼表示②絕對值運算,符號單獨處理③

被乘數(B)、部分積(A)取雙符號位④

乘數末位(Cn)為判斷位,其狀態決定下步操作⑤作n次循環(累加、右移)特點絕對值運算邏輯移位用移位的次數判斷乘法是否結束原碼一位分步乘法每次將一位乘數所對應的部分積與原部分積的累加和相加,并移位。硬件:設置3個寄存器(具有右移位功能):

A:存放部分積累加和、乘積高位

B:存放被乘數

C:存放乘數、乘積低位

設置初值:

A=00.0000B=X=00.1101C=Y=.1011

一個全加器

算法流程0A、XB、YC、nCdCn=1?Cd=0?1/2(A+B)A,C1/2(A+0)A,C

Cd-1CdYYNNB0⊕C0

A0②定點補碼一位乘法原碼乘法存在的缺點是符號位需要單獨運算,并要在最后給乘積冠以正確的符號。補碼乘法是指采用操作數的補碼進行乘法運算,最后乘積仍為補碼,能自然得到乘積的正確符號。算法分析:

由已推導過的Y=-Y0+0.Y1Y2…Yn,得

[X·Y]補

=[X]補(0.Y1Y2…Yn)+[-X]補Y0符號位[X]補

=X0.X1X2…Xn[Y]補

=Y0.Y1Y2…Yn

展開為部分積的累加和形式:[X·Y]補=[X]補(0.Y1Y2…Yn)+[-X]補Y0

=[X]補(0.Y1Y2…Yn)-[X]補Y0

=[X]補(-Y0+2-1Y1+2-2Y2+…+2-nYn)=[X]補

=[X]補比較法—布斯(Booth)算法:用相鄰兩位乘數比較的結果決定加[X]補、[-X]補或0。

(-Y0+(Y1-2-1Y1)+(2-1Y2-2-2Y2)+…

+(2-(n-1)Yn-2-nYn))[(Y1-Y0)+2-1

(Y2-Y1)+2-2(Y3-Y2)+…

+2(0-Yn)-n

+2(0-Yn)-nYn+1

+2(0

-Yn)-nYn+1Yn(高位)Yn+1(低位)操作(A補為部分積累加和)00011011

1/2A補

1/2(A補+[X]補)1/2(A補+[-X]補)1/2A補(0)(1)(-1)(0)布斯算法:在乘數Yn后添加Yn+1=0。按照Yn+1,Yn相鄰兩位的三種情況,其運算規則如下:右移一位Booth算法運算規則①部分積A、被乘數B取雙符號位,符號位參加運算;②乘數C取單符號位,符號參加移位,以決定最后是否修正;③C末位設置附加位Cn+1,初值為0,CnCn+1組成判斷位,決定運算操作,作n步循環;④

第n+1步(可能不用)由(Y1-Y0)決定,僅修正,不移位。【例】X=-0.1101,Y=0.1011,求[X·Y]補。初值:A=00.0000,B=[X]補=11.0011,-B=[-X]補=00.1101,C=[Y]補=0.1011計算過程:0000000.10110初始值,最后一位補0001101Y4Y5=10+[-X]補001101000110101011右移一位000000Y3Y4=11+0000110000011010101右移一位110011Y2Y3=01+[X]補110110111011001010右移一位001101Y1Y2=10+[-X]補001000000100000101

右移一位110011Y0Y1=01+[X]補1101110001+→+→+→+→+部分積乘數YYiYi+1

說明乘積高位乘積低位[X·Y]補=1.01110001,X·Y=-0.10001111不移位(5)定點除法運算定點原碼一位除法恢復余數法:被除數(余數)減去除數,如果為0或者為正值時,上商為1,不恢復余數;如果結果為負,上商為0,再將除數加到余數中,恢復余數。余數左移1位。加減交替法:當余數為正時,商上1,求下一位商的辦法,余數左移一位,再減去除數;當余數為負時,商上0,求下一位商的辦法,余數左移一位,再加上除數。定點除法運算定點補碼一位除法(加減交替法)如果被除數與除數同號,用被除數減去除數;若兩數異號,被除數加上除數。如果所得余數與除數同號商上1,否則,商上0,該商為結果的符號位。求商的數值部分。如果上次商上1,將除數左移一位后減去除數;如果上次商上0,將余數左移一位后加除數。然后判斷本次操作后的余數,如果余數與除數同號商上1,如果余數與除數異號商上0。如此重復執行n-1次(設數值部分n位)。商的最后一位一般采用恒置1的辦法,并省略了最低+1的操作。此時最大的誤差為2-n。【例】設被除數X=0.1011,Y=0.1101,用原碼加減交替法求X/Y=?解:設置寄存器:A寄存器中開始時存放被除數的絕對值,以后將存放各次余數,取雙符號位。B寄存器存放除數的絕對值,取雙符號位。C寄存器同來存放商,取單符號位。[|Y|]補=00.1101,[-|Y|]補=11.0011加減交替法處理思想:先減后判,如減后發現不夠減,則在下一步改作加除數操作。要點:被除數|X|<除數|Y|,取原碼尾數的絕對值相除,符號位單獨處理,商的符號為相除兩數符號的異或。被除數的位數要擴展成除數位數n的兩倍(2n位),其低位的數值部分開始時放在商寄存器中。在具體運

溫馨提示

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

最新文檔

評論

0/150

提交評論