計算機組織與系統(tǒng)結構第三章習題答案_第1頁
計算機組織與系統(tǒng)結構第三章習題答案_第2頁
計算機組織與系統(tǒng)結構第三章習題答案_第3頁
計算機組織與系統(tǒng)結構第三章習題答案_第4頁
計算機組織與系統(tǒng)結構第三章習題答案_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、.第 3 章 習 題 答 案2(4)高級語言中的運算和機器語言(即指令)中的運算是什么關系?假定某一個高級語言源程序p中有乘、除運算,但機器m中不提供乘、除運算指令,則程序p能否在機器m上運行?為什么?參考答案:(略)3考慮以下c語言程序代碼:int func1(unsigned word)return (int) ( word 24);int func2(unsigned word)return ( (int) word 24;假設在一個32位機器上執(zhí)行這些函數(shù),該機器使用二進制補碼表示帶符號整數(shù)。無符號數(shù)采用邏輯移位,帶符號整數(shù)采用算術移位。請?zhí)顚懴卤?,并說明函數(shù)func1和func2的功

2、能。wfunc1(w)func2(w)機器數(shù)值機器數(shù)值機器數(shù)值0000 007fh1270000 007fh+1270000 007fh+1270000 0080h1280000 0080h+128ffff ff80h1280000 00ffh2550000 00ffh+255ffff ffffh10000 0100h2560000 0000h00000 0000h0函數(shù)func1的功能是把無符號數(shù)高24位清零(左移24位再邏輯右移24位),結果一定是正的有符號數(shù);而函數(shù)func2的功能是把無符號數(shù)的高24位都變成和第25位一樣,因為左移24位后進行算術右移,高24位補符號位(即第25位)。4

3、填寫下表,注意對比無符號數(shù)和帶符號整數(shù)的乘法結果,以及截斷操作前、后的結果。模式xyxy(截斷前)xy(截斷后)機器數(shù)值機器數(shù)值機器數(shù)值機器數(shù)值無符號數(shù)11060102001100121004二進制補碼1102010+211110041004無符號數(shù)0011111700011171117二進制補碼001+1111111111111111無符號數(shù)11171117110001490011二進制補碼11111111000001+1001+15以下是兩段c語言代碼,函數(shù)arith( )是直接用c語言寫的,而optarith( )是對arith( )函數(shù)以某個確定的m和n編譯生成的機器代碼反編譯生成的。

4、根據(jù)optarith( ),可以推斷函數(shù)arith( ) 中m和n的值各是多少?精品.#define m #define n int arith(int x, int y)int result = 0 ;result = x*m + y/n; return result;int optarith ( int x, int y)int t = x;x = 4;x - = t;if ( y 2;return x+y;參考答案:可以看出x*m和“int t = x; x = 4;x-=t;”三句對應,這些語句實現(xiàn)了x乘15的功能(左移4位相當于乘以16,然后再減1),因此,m等于15;y/n與“if

5、 ( y 2;”兩句對應,功能主要由第二句“y右移2位”實現(xiàn),它實現(xiàn)了y除以4的功能,因此n是4。而第一句“if ( y 2=1而1/4=0,兩者不等;調整后 1+3=2,22=0,兩者相等。思考:能否把 if ( y 0 ) y += 3; 改成 if ( y 0 ) y += 2; ?不能!因為y = - 4時不正確。6設a4a1和b4b1分別是四位加法器的兩組輸入,c0為低位來的進位。當加法器分別采用串行進位和先行進位時,寫出四個進位c4 c1的邏輯表達式。參考答案:串行進位:c1 = x1c0+y1c0 + x1 y1 c2 = x2c1+y2c1 + x2 y2 c3 = x3c2+

6、y3c2 + x3 y3 c4 = x4c3+y4c3 + x4 y4 并行進位:c1 = x1y1 + (x1+y1)c0c2 = x2y2 + (x2 +y2) x1y1 + (x2+y2) (x1+y1)c0c3 = x3y3 + (x3 + y3) x2y2 + (x3 + y3) (x2 + y2) x1y1 + (x3 + y3) (x2 + y2)(x1 + y1)c0c4=x4y4+(x4+y4)x3y3+(x4+y4)(x3+y3)x2y2+(x4+y4)(x3+y3)(x2+y2)x1y1+(x4+y4)(x3+y3) (x精品.2+y2)(x1+y1)c07用sn7418

7、1和sn74182器件設計一個16位先行進位補碼加/減運算器,畫出運算器的邏輯框圖,并給出零標志、進位標志、溢出標志、符號標志的生成電路。參考答案(圖略):邏輯框圖參見教材中的圖3.15和圖3.16,將兩個圖結合起來即可,也即只要將圖3.15中的b輸入端的每一位bi取反,得到bi,和原碼bi一起送到一個二路選擇器,由進位c0作為選擇控制信號。當c0為1時做減法,此時,選擇將bi作為sn74181的b輸入端;否則,當c0為1時,做加法。零標志zf、進位標志cf、溢出標志of、符號標志sf的邏輯電路根據(jù)以下邏輯表達式畫出即可。zf=f15+f14+f13+f12+f11+f10+f9+f8+f7+

8、f6+f5+f4+f3+f2+f1+f0cf=c16of= c0(a15b15f15 + a15b15f15)+ c0(a15b15f15 + a15b15f15)sf= f158 用sn74181和sn74182器件設計一個32位的alu,要求采用兩級先行進位結構。(1) 寫出所需的sn74181和sn74182芯片數(shù)。(2) 畫出32位alu的邏輯結構圖。參考答案(圖略): 將如圖3.15所示的兩個16位alu級聯(lián)起來即可,級聯(lián)時,低16位alu的高位進位c16作為高16位alu的低位進位c0,因此,只要用8片sn74181和2片sn74182。9已知x = 10,y = 6,采用6位機器

9、數(shù)表示。請按如下要求計算,并把結果還原成真值。(1) 求x+y補,xy補。(2) 用原碼一位乘法計算xy原。(3) 用mba(基4布斯)乘法計算xy補。(4) 用不恢復余數(shù)法計算x/y原的商和余數(shù)。(5) 用不恢復余數(shù)法計算x/y補的商和余數(shù)。參考答案:10補 = 001010 6補 = 111010 6補 = 000110 10原 = 001010 6原 = 100110 (1) 10+( 6)補= 10補+ 6補= 001010+111010 = 000100 (+4) 10(6)補= 10補+ (6)補 = 001010+000110 = 010000 (+16) (2) 先采用無符號數(shù)

10、乘法計算001010 000110的乘積,原碼一位乘法過程(前面兩個0省略)如下: c p y 說明 0 0 0 0 0 0 1 1 0 p0 = 0 + 0 0 0 0 y4 = 0,+0 0 0 0 0 0 c, p 和y同時右移一位 0 0 0 0 0 0 0 1 1 得p1+ 1 0 1 0 y3 = 1,+x 0 1 0 1 0 c, p 和y同時右移一位 0 0 1 0 1 0 0 0 1 得p2精品. + 1 0 1 0 y2 = 1,+x 0 1 1 1 1 0 0 0 0 c, p 和y同時右移一位 0 0 1 1 1 1 0 0 0 得p3 + 0 0 0 0 y1 = 0

11、,+0 0 0 1 1 1 c, p 和y同時右移一位 0 0 0 1 1 1 1 0 0 得p4 若兩個6位數(shù)相乘的話,則還要右移兩次,得 000000 111100符號位為:0 1 = 1,因此,xy原 = 1000 0011 1100即x y = 11 1100b = 60(3) 10補 = 110110,布斯乘法過程如下: p y y-1 說明 0 0 0 0 0 0 1 1 1 0 1 0 0 設y-1 = 0,p0補 = 0 y0 y-1 = 00,p、y直接右移一位0 0 0 0 0 0 0 1 1 1 0 1 0 得p1補+ 1 1 0 1 1 0 y1 y0 =10,+x補1

12、 1 0 1 1 0 p、y同時右移一位1 1 1 0 1 1 0 0 1 1 1 0 1 得p2補 + 0 0 1 0 1 0 y2 y1 =01,+x補 0 0 0 1 0 1 p、y同時右移一位0 0 0 0 1 0 1 0 0 1 1 1 0 得p3補+ 1 1 0 1 1 0 1 0 0 1 1 1 0 y3 y2 = 10,+x補 1 1 1 0 0 0 p、y同時右移一位 1 1 1 1 0 0 0 1 0 0 1 1 1 得p4補+ 0 0 0 0 0 0 0 1 0 0 1 1 1 y4 y3 = 11,+0 1 1 1 1 0 0 p、y同時右移一位 1 1 1 1 1 0

13、 0 0 1 0 0 1 1 得p5補+ 0 0 0 0 0 0 0 0 1 0 0 1 1 y5 y4 = 11,+0 1 1 1 1 1 0 p、y同時右移一位 1 1 1 1 1 1 0 0 0 1 0 0 1 得p6補因此,x y補=1111 1100 0100,即x y = 11 1100b= 60(4) 因為除法計算是2n位數(shù)除n位數(shù),所以6原=0110,10原=0000 1010,6補=1010,商的符號位:0 1 = 1,運算過程(前面兩個0省略)如下: 余數(shù)寄存器r 余數(shù)/商寄存器q 說 明 0 0 0 0 1 0 1 0 開始r0 = x+ 1 0 1 0 r1 = xy1

14、 0 1 0 1 0 1 0 0 r1 0,則q 4 = 0,沒有溢出 0 1 0 1 0 1 0 0 2r1(r和q同時左移,空出一位商)+ 0 1 1 0 r2 = 2r1+y 1 0 1 1 0 1 0 0 0 r2 0,則q 3 = 0 0 1 1 0 1 0 0 0 2r2 (r和q同時左移,空出一位商)+ 0 1 1 0 r3 = 2r2 +y 1 1 0 0 1 0 0 0 0 r3 0,則q 2 = 0 1 0 0 1 0 0 0 0 2r3 (r和q同時左移,空出一位商)精品.+ 0 1 1 0 r3 = 2r2 +y 1 1 1 1 0 0 0 0 0 r4 0,則q 0

15、= 1商的數(shù)值部分為:00001。所以,x/y原=00001 (最高位為符號位),余數(shù)為0100。(5) 將10和6分別表示成補碼形式為:10 補 = 0 1010 , 6 補 = 1 1010,計算過程如下:先對被除數(shù)進行符號擴展,10 補=00000 01010,6 補 = 0 0110 余數(shù)寄存器r 余數(shù)/商寄存器q 說 明0 0 0 0 0 0 1 0 1 0 開始r0 = x + 1 1 0 1 0 r1=x +y1 1 0 1 0 0 1 0 1 0 r1與y同號,則q5 =11 0 1 0 0 1 0 1 0 1 2r1(r和q同時左移,空出一位上商1)+0 0 1 1 0 r2

16、 = 2r1+y1 1 0 1 0 1 0 1 0 1 r2與y同號,則q4= 1,1 0 1 0 1 0 1 0 1 1 2r2(r和q同時左移,空出一位上商1)+ 0 0 1 1 0 r3 = 2r2 +-y1 1 0 1 1 0 1 0 1 1 r3與y同號,則q3 = 11 0 1 1 0 1 0 1 1 1 2r3(r和q同時左移,空出一位上商1)+ 0 0 1 1 0 r4 = 2r3 +y1 1 1 0 0 1 0 1 1 1 r4與y同號,則q 2 = 1 1 1 0 0 1 0 1 1 1 1 2r4 (r和q同時左移,空出一位上商0) + 0 0 1 1 0 r5= 2r4

17、 +-y1 1 1 1 1 0 1 1 1 1 r5與y同號,則q1= 1,1 1 1 1 0 1 1 1 1 1 2r5 (r和q同時左移,空出一位上商1)+ 0 0 1 1 0 r6= 2r5 +y0 0 1 0 0 1 1 1 1 0 r6與y異號,則q 0 = 0,q左移,空出一位上商1 + 0 0 0 0 0 + 1 商為負數(shù),末位加1;余數(shù)不需要修正0 0 1 0 0 1 1 1 1 1 所以,x/y 補=11111,余數(shù)為00100。即:x/y= 0001b = 1,余數(shù)為 0100b = 4將各數(shù)代入公式“除數(shù)商+余數(shù)= 被除數(shù)”進行驗證,得:(6)(1) +4= 10。10若

18、一次加法需要1ns,一次移位需要0.5ns。請分別計算用一位乘法、兩位乘法、基于cra的陣列乘法、基于csa的陣列乘法四種方式計算兩個8位無符號二進制數(shù)乘積時所需的時間。參考答案:一位乘法:8次右移,8次加法,共計12ns;二位乘法:4次右移,4次加法,共計6ns;基于cra的陣列乘法:每一級部分積不僅依賴于上一級部分積,還依賴于上一級最終的進位,而每一級進位又是串行進行的,所以最長的路徑總共經(jīng)過了8+2(81)=22次全加器,共計約22ns;基于csa的陣列乘法:本級進位和本級和同時傳送到下一級,同級部分積之間不相互依賴,只進行o(n)次加法運算,因此,共計約8ns。11在ieee 754浮

19、點數(shù)運算中,當結果的尾數(shù)出現(xiàn)什么形式時需要進行左規(guī),什么形式時需要進行右規(guī)?如何進行左規(guī),如何進行右規(guī)?精品. 參考答案:(1) 對于結果為1x .xxx的情況,需要進行右規(guī)。右規(guī)時,尾數(shù)右移一位,階碼加1。右規(guī)操作可以表示為:m bm b 2 -1,ebeb+1。右規(guī)時注意以下兩點:a) 尾數(shù)右移時,最高位“1”被移到小數(shù)點前一位作為隱藏位,最后一位移出時,要考慮舍入。b) 階碼加1時,直接在末位加1。(2) 對于結果為0.0001xx的情況,需要進行左規(guī)。左規(guī)時,數(shù)值位逐次左移,階碼逐次減1,直到將第一位“1”移到小數(shù)點左邊。假定k為結果中“”和左邊第一個1之間連續(xù)0的個數(shù),則左規(guī)操作可以

20、表示為:m bm b 2k,ebebk。左規(guī)時注意以下兩點:a) 尾數(shù)左移時數(shù)值部分最左k個0被移出,因此,相對來說,小數(shù)點右移了k位。因為進行尾數(shù)相加時,默認小數(shù)點位置在第一個數(shù)值位(即:隱藏位)之后,所以小數(shù)點右移k位后被移到了第一位1后面,這個1就是隱藏位。b) 執(zhí)行ebebk時,每次都在末位減1,一共減k次。12在ieee 754浮點數(shù)運算中,如何判斷浮點運算的結果是否溢出?參考答案:浮點運算結果是否溢出,并不以尾數(shù)溢出來判斷,而主要看階碼是否溢出。尾數(shù)溢出時,可通過右規(guī)操作進行糾正。階碼上溢時,說明結果的數(shù)值太大,無法表示;階碼下溢時,說明結果數(shù)值太小,可以把結果近似為0。在進行對階

21、、規(guī)格化、舍入和浮點數(shù)的乘/除運算等過程中,都需要對階碼進行加、減運算,可能會發(fā)生階碼上溢或階碼下溢,因此,必須對階碼進行溢出判斷。(有關對階碼進行溢出判斷的方法可參見教材中相關章節(jié)。)13假設浮點數(shù)格式為:階碼是4位移碼,偏置常數(shù)為8,尾數(shù)是6位補碼(采用雙符號位),用浮點運算規(guī)則分別計算在不采用任何附加位和采用2位附加位(保護位、舍入位)兩種情況下的值。(假定對階和右規(guī)時采用就近舍入到偶數(shù)方式)(1)(15/16) 27 +(2/16) 25 (2)(15/16) 27(2/16) 25 (3)(15/16) 25 +(2/16) 27 (4)(15/16) 25(2/16) 27參考答案

22、(假定采用隱藏位): x= (15/16) 27 = 0.111100b 27= (1.111000)2 26 y1= (2/16) 25 = 0.001000b 25= (1.000000)2 22 y2= (2/16) 25 = 0.001000b 25= (1.000000)2 22 k= (15/16) 25 = 0.111100b 25= (1.111000)2 24j1= (2/16) 27 = 0.001000b 27= (1.000000)2 24j2= (2/16) 27 = 0.001000b 27= (1.000000)2 24根據(jù)題目所給的各種位數(shù),可以得到在機器中表示

23、為: x浮 = 00 1110 (1)111000 y1浮 = 00 1010 (1)000000 y2浮 = 11 1010 (1)000000 k浮 = 00 1100 (1)111000 j1浮 = 00 1100 (1)000000 j2浮 = 11 1100 (1)000000 所以,e x = 1110,mx = 00 (1). 111000 ,e y1 = 1010,my = 00(1).000000,e y2 = 1010,my = 11(1).000000ek = 1100,mk = 00 (1). 111000 ,e j1 = 1100,mj1 = 00(1).000000

24、,e j2 = 1100,mj2 = 11(1).000000精品. 尾數(shù)m中小數(shù)點前面有三位,前兩位為數(shù)符,表示雙符號,第三位加了括號,是隱藏位“1”。沒有附加位時的計算:(1) x+y1e補 = e x移 + e y1移補 (mod 2n) = 1110 + 0110 = 0100e = 4,根據(jù)對階規(guī)則可知需要對y1進行對階,結果為:e y1 = e x = 1110,my 1= 000.000100尾數(shù)相加:mb = mx + my1 = 001. 111000+ 000.000100 = 001.111100,兩位符號相等,數(shù)值部分最高位為1,不需要進行規(guī)格化,所以最后結果為:e=1

25、110,m=00(1).111100, 即(31/32) 27(2) x+y2e補 = e x移 + e y2移補 (mod 2n) = 1110 + 0110 = 0100;e = 4,根據(jù)對階規(guī)則可知需要對y2進行對階,結果為:e y2 = e x = 1110,my2= 111.111100尾數(shù)相加:mb = mx + my2 = 001. 111000+ 111.111100=001.110100,兩位符號相等,數(shù)值部分最高為1,不需要進行規(guī)格化,所以最后結果為:e=1110,m=00(1).110100, 即(29/32) 27(3) k+j1e補 = e k移 + e j1移補 (

26、mod 2n) = 1100 + 0100 = 0000;e = 0,根據(jù)對階規(guī)則可知不需要進行對階。尾數(shù)相加:mb = mk + mj1 = 001. 111000+ 001.000000= 010.111000,兩位符號不等,說明尾數(shù)溢出,需要進行右規(guī),最后結果為:e=1101,m=00(1).011100, 即(23/32) 26(4) k+j2e補 = e k移 + e j2移補 (mod 2n) = 1100 + 0100 = 0000;e = 0,根據(jù)對階規(guī)則可知不需要進行對階。尾數(shù)相加:mb = mk + mj2 = 00 1. 111000+ 111.000000 = 000.

27、111000,兩位符號相等,數(shù)值部分最高位為0,需要進行左規(guī),所以最后結果為:e=1011,m=00(1).110000, 即(7/8) 24如果有兩位附加位精度上會有提高,在對階的時候要注意小數(shù)點后就不是6位,而是8位,最后兩位為保護位和舍入位。但是由于本題6位尾數(shù)已經(jīng)足夠,再加2位附加位,其結果是一樣的。14采用ieee 754單精度浮點數(shù)格式計算下列表達式的值。(1)0.75+( 65.25)(2)0.75( 65.25)參考答案:x = 0.75 = 0.110.0b = (1.10.0)2 2-1 y = 65.25 = 1000001.01000.0b = (1.00000101.

28、0) 2 26 用ieee 754標準單精度格式表示為: x浮 = 0 01111110 10.0 y浮 = 1 10000101 000001010.0 所以,e x = 01111110,mx = 0 (1). 1.0 ,e y = 10000101,my = 1(1).000001010.0 尾數(shù)mx和my中小數(shù)點前面有兩位,第一位為數(shù)符,第二位加了括號,是隱藏位“1”。以下是計算機中進行浮點數(shù)加減運算的過程(假定保留2位附加位:保護位和舍入位)(1)0.75+ ( 65.25) 對階: e補 = e x移 + e y移補 (mod 2n) = 0111 1110 + 0111 1011

29、 = 1111 1001 e = 7,根據(jù)對階規(guī)則可知需要對x進行對階,結果為:ex = e y = 10000101,mx = 00.000000110.000精品.x的尾數(shù)mx右移7位,符號不變,數(shù)值高位補0,隱藏位右移到小數(shù)點后面,最后移出的2位保留 尾數(shù)相加:mb = mx + my = 00.000000110.000+ 11.000001010 .000 (注意小數(shù)點在隱藏位后)根據(jù)原碼加/減法運算規(guī)則,得:00.000000110.000+ 11.000001010.000 = 11.000000100000上式尾數(shù)中最左邊第一位是符號位,其余都是數(shù)值部分,尾數(shù)后面兩位是附加位(

30、加粗)。 規(guī)格化:根據(jù)所得尾數(shù)的形式,數(shù)值部分最高位為1,所以不需要進行規(guī)格化。 舍入:把結果的尾數(shù)mb中最后兩位附加位舍入掉,從本例來看,不管采用什么舍入法,結果都一樣,都是把最后兩個0去掉,得:mb = 11.0000001000 溢出判斷:在上述階碼計算和調整過程中,沒有發(fā)生“階碼上溢”和“階碼下溢”的問題。因此,階碼eb = 10000101。 最后結果為eb = 10000101,mb = 1(1).000000100,即: 64.5。(2) 0.75( 65.25) 對階: e補 = e x移 + e y移補 (mod 2n) = 0111 1110 + 0111 1011 = 1

31、111 1001 e = -7,根據(jù)對階規(guī)則可知需要對x進行對階,結果為:ex = e y = 10000110,mx = 00.000000110.000x的尾數(shù)mx右移一位,符號不變,數(shù)值高位補0,隱藏位右移到小數(shù)點后面,最后移出的位保留 尾數(shù)相加:mb = mx my = 00.000000110.000 11.000001010.000 (注意小數(shù)點在隱藏位后)根據(jù)原碼加/減法運算規(guī)則,得:00.000000110.000 11.000001010.000=01.00001000000上式尾數(shù)中最左邊第一位是符號位,其余都是數(shù)值部分,尾數(shù)后面兩位是附加位(加粗)。 規(guī)格化:根據(jù)所得尾數(shù)的形式,數(shù)值部分最高位為1,不需要進行規(guī)格化。 舍入:把結

溫馨提示

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

評論

0/150

提交評論