計(jì)算機(jī)系統(tǒng)第三章答案_第1頁
計(jì)算機(jī)系統(tǒng)第三章答案_第2頁
計(jì)算機(jī)系統(tǒng)第三章答案_第3頁
計(jì)算機(jī)系統(tǒng)第三章答案_第4頁
計(jì)算機(jī)系統(tǒng)第三章答案_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、習(xí)題.參考答案:(1)后綴:w,源:基址+比例變址瑜移,目寄存器(2)后綴b,源:寄存器,目基址+偏移(3)后綴l,源:比例變址,目寄存器(4)后綴b,源:基址,目寄存器(5)后綴l,源:立即數(shù),目棧(6)后綴l,源:立即數(shù),目寄存器后綴w,源:寄存器,目寄存器(8)后綴l,源:基址建址+偏移,目寄存器.參考答案:(1)源操作數(shù)是立即數(shù)0 xFF,需在前面加$(2)源操作數(shù)是16位,而長度后綴是字節(jié)b,不一致(3)目的操作數(shù)不能是立即數(shù)尋址(4)操作數(shù)位數(shù)超過16位,而長度后綴為16位的w(5)不能用8位寄存器作為目的操作數(shù)地址所在寄存器(6)源操作數(shù)寄存器與目操作數(shù)寄存器長度不一致(7)不存

2、在ESX寄存器(8)源操作數(shù)地址中缺少變址寄存器.參考答案:表題5用表src_typedst_type機(jī)器級(jí)表示charintmovsbl%al,(%edx)intcharmovb%al,(%edx)intunsignedmovl%eax,(%edx)shortintmovswl%ax,(%edx)unsignedcharunsignedmovzbl%al,(%edx)charunsignedmovsbl%al,(%edx)intintmovl%eax,(%edx).參考答案:xptr、yptr和zptr對(duì)應(yīng)實(shí)參所存放的存儲(chǔ)單元地址分別為:Rebp+8、Rebp+12、Rebp+16。(2)函

3、數(shù)func的C語言代碼如下:voidfunc(int*xptr,int*yptr,int*zptr)inttempx=*xptr;inttempy=*yptr;inttempz=*zptr;*yptr=tempx;*zptr=tempy;*xptr=tempz;.參考答案:Redx=xRedx=x+y+4Redx=x+8*yRedx=y+2*x+12Redx=4*yRedx=x+y.參考答案:(1)指令功能為:RedxRedx+MReax=0 x00000080+M0 x8049300,寄存器EDX中內(nèi)容改變。改變后的內(nèi)容為以下運(yùn)算的結(jié)果:00000080H+FFFFFFF0H00000000

4、000000000000000010000000+11111111111111111111111111110000100000000000000000000000001110000因此,EDX中的內(nèi)容改變?yōu)? x00000070。根據(jù)表可知,加法指令會(huì)影響ORSF、ZF和CF標(biāo)志。OF=QZF=0,SF=0,CF=1。(2)指令功能為:RecxRecx-MReax+Rebx=0 x00000010+M0 x8049400,寄存器ECX中內(nèi)容改變。改變后的內(nèi)容為以下運(yùn)算的結(jié)果:00000010H-H00000000000000000000000000010000+0111111111111111

5、1111111111111000010000000000000000000000000001000因此,ECX中的內(nèi)容改為0 x。根據(jù)表可知,減法指令會(huì)影響OF、SF、ZF和CF標(biāo)志。OF=1,ZF=0,SF=1,CF=1?0=1。(3)指令功能為:Rbx-RbxorMReax+Recx*8+4,寄存器BX中內(nèi)容改變。改變后的內(nèi)容為以下運(yùn)算的結(jié)果:0 x0100orM0 x8049384=0100HorFF00H0000000100000000o11111111000000001111111100000000因此,BX中的內(nèi)容改為0 xFF00。由節(jié)可知,OR指令執(zhí)行后OF=CF=0因?yàn)榻Y(jié)果不

6、為0,故ZF=0;因?yàn)樽罡呶粸?,故SF=1otest指令不改變?nèi)魏瓮ㄓ眉拇嫫?,但根?jù)以下“與操作改變標(biāo)志:Rdland0 x8010000000and1000000010000000由節(jié)可知,TEST指令執(zhí)行后OF=CF=0因?yàn)榻Y(jié)果不為0,故ZF=0;因?yàn)樽罡呶粸?,故SF=1。(5)指令功能為:MReax+Redx-MReax+Redx*32,即存儲(chǔ)單元0 x8049380中的內(nèi)容改變?yōu)橐韵逻\(yùn)算的結(jié)果:M0 x8049380*32=0 x908f12a8*32,也即只要將0 x908f12a8左移5位即可得到結(jié)果。100100001000111100010010101010005=0001

7、0001111000100101010100000000因此,指令執(zhí)行后,單元0 x8049380中的內(nèi)容改變?yōu)? x11e25500。顯然,這個(gè)結(jié)果是溢出的。但是,根據(jù)表可知,乘法指令不影響標(biāo)志位,也即并不會(huì)使OF=1o(6)指令功能為:Rcx-Rcx-1,即CX寄存器的內(nèi)容減一。0000000000010000+111111111111111110000000000001111因此,指令執(zhí)行后CX中的內(nèi)容從0 x0010變?yōu)? x000F。由表可知,DEC指令會(huì)影響ORZF、SF,根據(jù)上述運(yùn)算結(jié)果,得到OF=QZF=0,SF=0o.參考答案:movl12(%ebp),%ecx11執(zhí)行5te

8、stb$0 x80,%dl11執(zhí)行7addb%dl,(%eax)1:因?yàn)镃語言if語句中的條件表達(dá)式可以對(duì)多個(gè)條件進(jìn)行邏輯運(yùn)算,而匯編代碼中一條指令只能進(jìn)行一種邏輯運(yùn)算,并且在每條邏輯運(yùn)算指令生成的標(biāo)志都是存放在同一個(gè)EFLAGSW存器中,所以,最好在一條邏輯指令后跟一條條件車t移指令,把EFLAG計(jì)標(biāo)志用完,然后再執(zhí)行另一次邏輯判斷并根據(jù)條件進(jìn)行轉(zhuǎn)移的操作。(2)按照書中圖給出的“if()goto”語句形式寫出匯編代碼對(duì)應(yīng)的C語言代碼如下:voidcomp(charx,int*p)if(p!=0)if(x0)*p+=x;.參考答案:intfunc(intx,inty)intz=x*y; TO

9、C o 1-5 h z if(xx)z=x+y;elsez=x-y;elseif(x=16)z=x&y;returnz;.參考答案:(1)每個(gè)入口參數(shù)都要按4字節(jié)邊界對(duì)齊,因此,參數(shù)x、y和k入棧時(shí)都占4個(gè)字節(jié)。1 movw 8(%ebp), %bx5 movw %si, %dx13 cmpw %cx, %si15 .L2:16 movswl %bx, %eax返回0。16.參考答案:1:2211& 0 x1 ,因此 f1用于檢測x的奇偶性,當(dāng)x中有奇數(shù)個(gè)1,則返回為1,否則函數(shù)sw只有一個(gè)入口參數(shù)x,根據(jù)匯編代碼的第25行指令知,當(dāng)x+37時(shí)轉(zhuǎn)標(biāo)號(hào).L7處執(zhí)行,否則,按照跳轉(zhuǎn)表中的地址轉(zhuǎn)移執(zhí)

10、行,x 與跳轉(zhuǎn)目標(biāo)處標(biāo)號(hào)的關(guān)系如下:x+3=0:x+3=1:x+3=2:x+3=3:x+3=4:x+3=5:x+3=6:x+3=7:由此可知,.L7.L2.L2.L3.L4.L5.L7.L6switch (x)中省略的處理部分結(jié)構(gòu)如下:case -2:case -1:2 標(biāo)號(hào)處指令序列對(duì)應(yīng)的語句break;case 0:3標(biāo)號(hào)處指令序列對(duì)應(yīng)的語句break;.4標(biāo)號(hào)處指令序列對(duì)應(yīng)的語句break;5標(biāo)號(hào)處指令序列對(duì)應(yīng)的語句break;case4:6標(biāo)號(hào)處指令序列對(duì)應(yīng)的語句break;default:7標(biāo)號(hào)處指令序列對(duì)應(yīng)的語句參考答案:根據(jù)第2、3行指令可知,參數(shù)a是char型,參數(shù)p是指向sh

11、ort型變量的指針;根據(jù)第4、5行指令可知,參數(shù)b和c都是unsignedshort型,根據(jù)第6行指令可知,test的返回參數(shù)類型為unsignedint。因此,test的原型為:unsignedinttest(chara,unsignedshortb,unsignedshortc,short*p);參考答案:每次執(zhí)行pushl指令后,Resp=Resp-4,因此,第2行指令執(zhí)行后Resp=0 xbc00001c。(1)執(zhí)行第3行指令后,Rebp=Resp=0 xbc00001c。到第12條指令執(zhí)行結(jié)束都沒有改變EBP的內(nèi)容,因而執(zhí)行第10行指令后,EBP的內(nèi)容還是為0 xbc00001c。執(zhí)

12、行第13行指令后,EBP的內(nèi)容恢復(fù)為進(jìn)入函數(shù)funct時(shí)的值0 xbc000030。(2)執(zhí)行第3行指令后,Resp=0 xbc00001c。執(zhí)行第4行指令后Resp=Resp-40=0 xbc00001c-0 x28=0 xbbfffff4。因而執(zhí)行第10行指令后,未跳轉(zhuǎn)到scanf函數(shù)執(zhí)行時(shí),ESP中的內(nèi)容為0 xbbfffff4-4=0 xbbfffff0;在從scanf函數(shù)返回后ESP中的內(nèi)容為0 xbbfffff4。執(zhí)行第13行指令后,ESP的內(nèi)容恢復(fù)為進(jìn)入函數(shù)funct時(shí)的舊值,即Resp=0 xbc000020。(3)第5、6兩行指令將scanf的第三個(gè)參數(shù)&y入棧,入棧的內(nèi)容為

13、Rebp-8=0 xbc000014;第7、8兩行指令將scanf的第二個(gè)參數(shù)&x入棧,入棧的內(nèi)容為Rebp-4=0 xbc000018。故x和y所在的地址分別為0 xbc000018和0 xbc000014。(4)執(zhí)行第10行指令后,funct棧幀的地址范圍及其內(nèi)容如下:0 xbc00001c0 xbc0000300 xbc000018x=150 xbc000014y=200 xbc0000100 xbc00000c0 xbc0000080 xbc0000040 xbc0000000 xbbfffff0 xbc0000140 xbbfffff0 xbc0000180 xbbfffff0 x8

14、04c0000 xbbfffff從scanf返回的地EBpEBP棧幀底部ESP.參考答案:第1行匯編指令說明參數(shù)x存放在EBX中,根據(jù)第4行判斷x=0則轉(zhuǎn).L2,否則繼續(xù)執(zhí)行第510行指令。根據(jù)第5、6、7行指令可知,入棧參數(shù)nx的計(jì)算公式為x1;根據(jù)第9、10、11行指令可知,返回值為(x&1)+rv。由此推斷出C缺失部分如下:intrefunc(unsignedx)if(x=0) TOC o 1-5 h z return0;unsignednx=x1;intrv=refunc(nx);return(x&0 x1)+rv;7該函數(shù)的功能為計(jì)算x的各個(gè)數(shù)位中1的個(gè)數(shù)。.參考答案:在IA-32中

15、,GCa數(shù)據(jù)類型longdouble型變量分配12字節(jié)空間,實(shí)際上只占用10個(gè)字節(jié)。數(shù)組元素大小(B)數(shù)組大小(B)起始地址元素i的地址charA10110&A0&A0+iintB1004400&B0&B0+4ishort*C5420&C0&C0+4ishort*D6424&D0&D0+4ilongdoubleE1012120&E0&E0+12ilongdouble*F10440&F0&F0+4i.參考答案:表達(dá)式類型值匯編代碼Sshort*Aleal(%edx),%eaxS+ishort*A+2*ileal(%edx,%ecx,2),%eaxSishortMAS+2*imovw(%edx,%

16、ecx,2),%ax&S10short*AS+20leal20(%edx),%eax&Si+2short*A+2*i+4leal4(%edx,%ecx,2),%eax&Si-Sint(As+2*i-As)/2=imovl%ecx,%eaxS4*i+4shortMAs+2*(4*i+4)movw8(%edx,%ecx,8),%ax*(S+i-2)shortMA+2*(i-2)movw-4(%edx,%ecx,2),%ax.參考答案:根據(jù)匯編指令功能可以推斷最終在EAX中返回的值為:Ma+28*i+4*j+Mb+20*j+4*i,因?yàn)閿?shù)組a和b都是int型,每個(gè)數(shù)組元素占4B,因此,M=5,N=7

17、。.參考答案:執(zhí)行第11行指令后,ai皿k的地址為a+4*(63*i+9*j+k),所以,可以推斷出M=9N=63/9=7。根據(jù)第12行指令,可知數(shù)組a的大小為4536字節(jié),故L=4536/(4*L*M)=18。.參考答案:(1)常數(shù)M=76/4=19,存放在EDI中,變量j存放在ECX中。(2)上述優(yōu)化匯編代碼對(duì)應(yīng)的函數(shù)trans_matrix的C代碼如下:voidtrans_matrix(intaMM)inti,j,t,*p;intc=(M2);for(i=0;iM;i+)p=&a0i;for(j=0;j=np-;np-p=&(np-;np-next=np;.參考答案:表達(dá)式EXPRTYP

18、E類型匯編指令序列uptr-intmovl(%eax),%eaxmovl%eax,(%edx)uptr-shortmovw4(%eax),%axmovw%ax,(%edx)&uptr-short*leal6(%eax),%eaxmovw%eax,(%edx)uptr-short*movl%eax,(%edx)uptr-uptr-shortmovl4(%eax),%ecxmovl(%eax,%ecx,2),%eaxmovl%eax,(%edx)*uptr-charmovl8(%eax),%eaxmovb(%eax),%almovb%al,(%edx).參考答案:S1: s c 0S2: i s

19、0S3: c s 0S4: s c 0S5: c s 0S6: c s 0.參考答案:id248總共12字節(jié),按4字節(jié)邊界對(duì)齊cd467總共8字節(jié),按4字節(jié)邊界對(duì)齊id248總共12字節(jié),按4字節(jié)邊界對(duì)齊6總共8字節(jié),按2字節(jié)邊界對(duì)齊ide481216總共24字節(jié),按4字節(jié)邊界對(duì)齊(Linux下double型按4字節(jié)對(duì)齊)d3640總共44字節(jié),按4字節(jié)邊界對(duì)齊Windows平臺(tái)要求不同的基本類型按照其數(shù)據(jù)長度進(jìn)行對(duì)齊。每個(gè)成員的偏移量如下:cdisplgv08162024283240結(jié)構(gòu)總大小為48字節(jié),因?yàn)槠渲械膁和g必須是按8字節(jié)邊界對(duì)齊,所以,必須在末尾再加上4個(gè)字節(jié),即44+4=48

20、字節(jié)。變量長度按照從大到小順序排列,可以使得結(jié)構(gòu)所占空間最小,因此調(diào)整順序后的結(jié)構(gòu)定義如下:structdoubled;longlongg;inti;char*p;longl;void*v;shorts;charc;test;dgiplvsc08162024283234結(jié)構(gòu)總大小為34+6=40字節(jié)。.參考答案:(1)執(zhí)行第7行和第10行指令后棧中的信息存放情況如下圖所示。其中g(shù)ets函數(shù)的入口參數(shù)為buf數(shù)組首地址,應(yīng)等于getline函數(shù)的棧幀底部指針EBP的內(nèi)容減0 x14,而getline函數(shù)的棧幀底部指針EBP的內(nèi)容應(yīng)等于執(zhí)行完getline中第2行指令(push%ebp)后ESP的

21、內(nèi)容,此時(shí),Resp=0 xbffc07f0-4=0 xbffc07ec,故buf數(shù)組首地址為Rebp-0 x14=Resp-0 x14=0 xbffc07ec-0 x14=0 xbffc07d8。08413938EBPf飛736353433323130464544434241393813736353433323130ESP bf fc 07 d8b)執(zhí)行第10行后的棧返回P的地址EBP在P中舊值被調(diào)用者保卜存寄存器在J P中的舊值buf7 bu肥 buf0gets入口參數(shù)(2)當(dāng)執(zhí)行到getline的ret指令時(shí),假如程序不發(fā)生段錯(cuò)誤,則正確的返回地址應(yīng)該是0 x80485c8,發(fā)生段錯(cuò)誤是因?yàn)閳?zhí)行g(shù)etline的ret指令時(shí)得到的返回地址為0 x8413938,這個(gè)地址所在存儲(chǔ)段可能是不可執(zhí)行的數(shù)據(jù)段,因而發(fā)生了段錯(cuò)誤(segmentationfault)。(3)執(zhí)行完第10行匯編指令后,被調(diào)用者保存寄存器EBXESI和EDI在P中的內(nèi)容已被破壞,同時(shí)還破壞了EBP在P中的內(nèi)容。getline的C代碼中ma

溫馨提示

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