第4章-程序結(jié)構(gòu)習(xí)題答案匯編_第1頁
第4章-程序結(jié)構(gòu)習(xí)題答案匯編_第2頁
第4章-程序結(jié)構(gòu)習(xí)題答案匯編_第3頁
第4章-程序結(jié)構(gòu)習(xí)題答案匯編_第4頁
第4章-程序結(jié)構(gòu)習(xí)題答案匯編_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、學(xué)習(xí)-好資料第4章程序結(jié)構(gòu)4.1 簡答題(1) CPUID指令返回識別字符串的首字符“ G”在哪個寄存器中?EBX的高8位(2)數(shù)據(jù)的直接尋址和指令的直接尋址有什么區(qū)別?數(shù)據(jù)的直接尋址給出數(shù)據(jù)所在的存儲器地址,指令的直接尋址給出指令所在的存儲器地址。(3)是什么特點(diǎn)決定了目標(biāo)地址的相對尋址方式應(yīng)用最多?指令代碼中提供目標(biāo)地址相對于當(dāng)前指令指針寄存器EIP的位移量,使得同一個程序被操作系統(tǒng)安排在不同的存儲區(qū)時,指令間的位移并沒有變化的特點(diǎn)。(4) Jcc指令能跳轉(zhuǎn)到代碼段之外嗎?不能,Jcc指令采用段內(nèi)相對尋址方式(5)什么是奇偶校驗?數(shù)據(jù)通信時,數(shù)據(jù)的某一位用做傳輸數(shù)據(jù)的奇偶校驗位,數(shù)據(jù)中包括

2、校驗位在內(nèi)的“1的個數(shù)恒為奇數(shù),就是奇校驗;恒為偶數(shù),就是偶校驗(6)助記符JZ和JE為什么表達(dá)同一條指令?兩個數(shù)相減,差值為 0 (JZ)與兩個數(shù)相等(JE)是一個含義(7)為什么判斷無符號數(shù)大小和有符號大小的條件轉(zhuǎn)移指令不同?判斷兩個無符號數(shù)的大小和判斷兩個有符號數(shù)大小關(guān)系要利用不同的標(biāo)志組合。判斷有符號數(shù)的大小需要組合SF和OF標(biāo)志,并利用ZF標(biāo)志確定相等與否。判斷無符號數(shù)的高低利用 CF標(biāo)志,利用ZF標(biāo)志確定相等。(8)雙分支結(jié)構(gòu)中兩個分支體之間的JMP指令有什么作用?用于跳過分支體2,避免進(jìn)入分支體 2而出現(xiàn)錯誤。(9)如果循環(huán)體的代碼量遠(yuǎn)超過128個字節(jié),還能用LOOP指令實現(xiàn)計數(shù)

3、控制循環(huán)嗎?不能,因為LOOP指令的目標(biāo)地址采用相對短轉(zhuǎn)移,只能在128+ 127字節(jié)之間循環(huán)(10)什么是“先循環(huán)、后判斷”循環(huán)結(jié)構(gòu)?指先執(zhí)行循環(huán)體,然后判斷是否繼續(xù)循環(huán)的結(jié)構(gòu),這種結(jié)構(gòu)通常至少執(zhí)行一次循環(huán)體4.2 判斷題(1) 指令指針或者號包括代碼段寄存器值的改變將引起程序流程的改變。對(2) 指令的相對尋址都是近轉(zhuǎn)移。對(3) 采用指令的寄存器間接尋址,目標(biāo)地址來自存儲單元。錯,(4) JMP指令對應(yīng)高級語言的 GOTO語句,所以不能使用錯,需要使用(5) 因為條件轉(zhuǎn)移指令 Jcc要利用標(biāo)志作為條件,所以也影響標(biāo)志。錯(6) JA和JG指令的條件都是“大于”,所以是同一個指令的兩個助記

4、符。錯,JA針對無符號數(shù),JG針對有符號數(shù)(7) JC和JB的條件都是CF= 1 ,所以是同一條指令。對。無符號小于(JB)必然借位(JC)(8)控制循環(huán)是否結(jié)束只能在一次循環(huán)結(jié)束之后進(jìn)行錯(9)介紹loop指令時,常說它相當(dāng)于dec ecx和jnz兩條指令。但是考慮對狀態(tài)標(biāo)志的 影響,它們有差別。Loop指令不影響標(biāo)志,而 dec指令卻影響除cf之外的其他狀態(tài)標(biāo)志。 對(10)若ECX = 0,則LOOP指令和JECX指令都發(fā)生轉(zhuǎn)移。對4.3 填空題(1) JMP指令根據(jù)目標(biāo)地址的轉(zhuǎn)移范圍和尋址方式,可以分成4種類型:段內(nèi)轉(zhuǎn)移、(),段內(nèi)轉(zhuǎn)移、()以及段間轉(zhuǎn)移、(),段間轉(zhuǎn)移、()。相對尋址

5、,間接尋址,直接尋址,間接尋址(2) MASM給短轉(zhuǎn)移、近轉(zhuǎn)移和遠(yuǎn)轉(zhuǎn)移定義的類型名依次是和。SHORT, NEAR , FAR(3)假設(shè)在平展存儲模型下, EBX= 1256H,雙字變量TABLE的偏移地址是20A1H , 線性地址32F7H處存放3280H,執(zhí)行指令“ JMP EBX ”后EIP =,執(zhí)行指令“ JMP TABLEEBX " 后 EIP=。1256H, 3280H(4) “CMP EAX,3721H ”指令之后是JZ指令,發(fā)生轉(zhuǎn)移的條件是 EAX =, 此時ZF =。3721H, 1(5)執(zhí)行“ SHR EBX,4 "指令后,JNC發(fā)生轉(zhuǎn)移,說明 EBX的

6、D3=。0(6)在EDX等于0時轉(zhuǎn)移,可以使用指令“ CMP EDX,"、也可以使用“ TEST EDX,”構(gòu)成條件,然后使用JE指令實現(xiàn)轉(zhuǎn)移。0, EDX(7)循環(huán)結(jié)構(gòu)程序一般由三個部分組成,它們是()、循環(huán)體和()部分。循環(huán)初始,循環(huán)控制(8) JECXZ指令發(fā)生轉(zhuǎn)移的條件是(),loop指令不發(fā)生轉(zhuǎn)移的條件是()。Ecx=0, ecx 不等于 0(9) loop指令進(jìn)行減1計數(shù),實際應(yīng)用中也常進(jìn)行加1計數(shù)。針對例4-14程序,如果刪除其中的loop指令,則可以使用指令" cmp () ,ecx”和“ jb () ”替代。Ebx, jb again(10)小寫字母“ e

7、”是英文當(dāng)中出現(xiàn)頻率最高的字母。如果某個英文文檔利用例4-16的異或方法進(jìn)行簡單加密,統(tǒng)計發(fā)現(xiàn)密文中字節(jié)數(shù)據(jù)“ 8FH”最多,則高程序采用的字節(jié)密碼可能是()0EAh習(xí)題4.4已知van、var2、var3和var4是32位無符號整數(shù),用匯編語言程序片段實現(xiàn)如下C+語句:var4=(var1*6)/( var2-7)+var3解答:mov eax,var1mov ebx,6mul ebx ;var1*6mov ebx,var2 sub ebx,7 ;var2-7 div ebx ;(var1*6)/( var2-7) add eax,var3 ;(var1*6)/( var2-7)+var3

8、mov var4,eax 習(xí)題4.5已知van、var2、var3和var4是32位有符號整數(shù),用匯編語言程序片段實現(xiàn)如下C+語句:Var1=(var2*var3)/( var4+8)-47 解答: Moveax,var2Imulvar3Movebx,var4Addebx,8IdivebxSubeax,47Movvar1,eax習(xí)題4.6參看例4-1,假設(shè)N小于90000,這時求和結(jié)果只需要 eax保存,edx為0。修改例4-1 使其可以從鍵盤輸入一個數(shù)值 N(用readuid子程序),最后顯示累加和(用 dispuid子程序)。 解答:.dataMsg byte Input a number

9、(090000): ',0.codeStart:Mov eax,offset msgCall readuidCall dispcrlfMov ebx,eaxAdd ebx,1Imul ebxShredx,1Rcreax,1Call dispuid習(xí)題4.7定義COUNT (假設(shè)為10)個元素的32位數(shù)組,輸入元素編號(0COUNT-1 ),利用 DISPHD子程序輸出其地址、利用 DISPSID子程序輸出其值。解答:;數(shù)據(jù)段count = 10array dword 0,1,2,3,4,5,6,7,8,9 ;代碼段call readuid;輸入 N ,小于 10lea eax,arra

10、yeax*4;EAX =地址call disphd;顯示地址mov eax,arrayeax*4;EAX =變量值call dispsid;顯示數(shù)值習(xí)題4.10判斷下列程序段跳轉(zhuǎn)的條件(1) xor ax,1e1eh Je equal(2) test al,10000001b Jnz here(3) 3) cmp cx,64h Jb there 答:(1) zf= 1 (2) zf= 0 cf =1 習(xí)題4.11假設(shè)EBX和ESI存放的是有符號數(shù),EDX和EDI存放的是無符號數(shù), 條件轉(zhuǎn)移指令實現(xiàn)以下判斷:(1)若 EDX > EDI ,轉(zhuǎn)至ij above 執(zhí)行(2)若 EBX >

11、; ESI ,轉(zhuǎn)到 greater 執(zhí)行(3)若EBX = 0 ,轉(zhuǎn)到zero執(zhí)行(4)若EBX - ESI產(chǎn)生溢出 ,轉(zhuǎn)到overflow執(zhí)行(5)若 ESI <= EBX ,轉(zhuǎn)至ij less_eq 執(zhí)行(6)若 EDI<= EDX ,轉(zhuǎn)到 below_eq 執(zhí)行答: cmp ebx,edi Ja above(2) cmp ebx,esiJg greater(3) cmp ebx ,0 Je zero(4) cmp ebx,esi Jo overflow (5) cmp esi,ebx Jle less_eq(6) cmp edi,edxJbe below_eq習(xí)題4.12使用

12、“ shr eax,2”將eax中的D1位移入CF標(biāo)志,然后用JC /JNC指令替換 成例4-6程序的功能。答:mov eax,56h請用比較指令和JZ /JNZ指令完Shr eax,2 jnc nommov eax,offset yes_msg jmp done nom:mov eax,offset no_msgdone:call dispmsg或mov eax,58hShr eax,2 jc yesm mov eax,offset no_msg jmp done yesm:mov eax,offset yes_msgdone:call dispmsg習(xí)題4.13將例4-7程序修改為實現(xiàn)偶校

13、驗,并進(jìn)一步增加顯示有關(guān)提示信息的功能,使得程序具有更加 良好的交互性.答:.dataMsg1bytePlease input a char:",0Msg2byteAscii is : ',0Msg3byteParty is : ',0.codestart:mov eax,offset msg1call dispmsgcall readccall dispcrlflea eax,msg2call dispmsgcall dispbbcall dispcrlfand al,7fhjp nextor al,80hnext:pusheaxlea eax,msg3call d

14、ispmsg3pop eaxcall dispbbexit 0end start習(xí)題4.14在采用奇偶校驗傳輸數(shù)據(jù)的接收端應(yīng)該驗證數(shù)據(jù)傳輸?shù)恼_性.例如,如果采用偶校驗?zāi)敲丛诮邮艿降臄?shù)據(jù)中,其包含“1”的個數(shù)應(yīng)該為0或偶數(shù)個,否則說明出現(xiàn)傳輸錯誤。現(xiàn)在,在接收端編寫一個的程序,如果偶校驗不正確顯示錯誤信息,傳輸正確則繼續(xù)。假設(shè)傳送字節(jié)數(shù)據(jù)、最高位作為校驗位,接收到的數(shù)據(jù)已經(jīng)保存在Rdata變量中。答:.dataRdata byte a"Errmsg byte Data Error! ',0 .codeStart:Test rdata,0Jnp err Err:Lea eax,

15、errmsg Call dispmsg習(xí)題4.15IA-32處理器的指令 CDQ將EAX符號擴(kuò)展到EDX。假若沒有該指令,編程實現(xiàn)該指 令功能。(1)按照符號擴(kuò)展的含義編程,即: EAX最高為0,則EDX =0; EAX最高為1,則 EDX = FFFFFFFFH。編程實現(xiàn)指令CDQ,將EAX符號擴(kuò)展到EDX(2)使用移位等指令進(jìn)行優(yōu)化編程。答:test eax,8000h ;測試最高位jz next1 ;最高位為0,轉(zhuǎn)移 mov edxQffffffffh最高位為1,設(shè)置 EDX = FFFFFFFFHjmp done ;跳過另一個分支next1: mov dx,0 ;設(shè)置 EDX = 0

16、done:方法1:mov edx,eaxsar edx,31 方法2:rol eax,1rcr edx,1 sar edx,31 ror eax,1習(xí)題4.16編寫一個成旭,首先測試雙字變量 DVAR的最高位,如果為1,則顯示字母“ L” ;如果 最高位不為1,則繼續(xù)測試最低位,如果最低位為1則顯示字母“R”,如果最低位也不為1, 則顯示字母“ M ”。答: .data Dvardword 80000000h .code Testdvar,80000000hJnzdispLTestdvar,1JzdispMMov al,'R'Jmp dispdispL:mov al, '

17、;L' jmp dispdispM:mov al,'M 'disp: call dispc習(xí)題4.17編寫一個程序,先提示輸入數(shù)字“Input Number: 09”,然后在下一行顯示輸入的數(shù) 字,結(jié)束;如果不是鍵入了09數(shù)字,就提示錯誤" Error!”,繼續(xù)等待輸入數(shù)字。方法1:使用字符輸入輸出子程序 激據(jù)段inmsgbyte 'Input number(09): ',0ermsgbyte 0dh,0ah,'Error! Input again: ',0;代碼段mov eax,0fset inmsg;提示輸入數(shù)字call d

18、ispmsg方法1:使用字符輸入輸出子程序again:call readc ;等待按鍵cmp al,'0'數(shù)字 < 0? jb erdispcmp al,'9' ;數(shù)字 > 9? ja erdisp call dispcrlf call dispc jmp done erdisp: mov eax,offset ermsg call dispmsg jmp againdone:方法2:使用數(shù)字輸入輸出子程序again: call readuid ;call readsid cmp eax,0 ;數(shù)字 < 0 ?jb erdisp ;jl erd

19、isp cmp eax,9;數(shù)字 > 9 ?ja erdisp ;jg erdisp call dispuid ;call dispsid jmp done erdisp: mov eax,offset ermsgcall dispmsg jmp again 習(xí)題4.18有一個首地址為 Array的20個雙字的數(shù)據(jù),說明下列程序段的功能。Mov ecx,20Mov eax,0Mov esi,eaxSum1p:Add eax,arrayesiAdd esi,4Loop sum1pMov total,eax答:累加Array數(shù)組,并將Z果存入 total變量習(xí)題4.19說明如下程序段的功能:

20、Mov ecx,16Mov bx,axNext:Shr ax,1Rcr edx,1Shr bx,1 Rcr edx,1 Loop next Mov eax,edx 答: 習(xí)題4.20編程將一個64位數(shù)據(jù)邏輯左移3位,假設(shè)這個數(shù)據(jù)已經(jīng)保存在EDX.EAX寄存器對中。答:Mov ecx,3Next:shr edx,1Rcr eax,1 Loop next 習(xí)題4.21編程中經(jīng)常要記錄某個字符出現(xiàn)的次數(shù)?,F(xiàn)編程記錄某個字符串中空格出現(xiàn)的次數(shù),結(jié)果保存在 space單元。 答:space dword 0string byte 'this is a test string !' .cod

21、estart:;主程序mov eax,0mov ebx,eaxmov ecx,lengthof string nextchar:cmp stringebx,20hjnz nospaceinc eaxnospace:inc ebxloop nextcharmov space,eax call dispuid exit 0;子程序end start習(xí)題4.22將一個已經(jīng)按升序排列的數(shù)組(地1個元素最小,后面的逐個增大)改為按照降序排列。 編程實現(xiàn)該功能。答:.data;數(shù)據(jù)定義ArrayUp dword -1,0,2,3,20,23,36,100,2048 .codestart:;主程序movec

22、x,lengthof ArrayUpaddecx,1rcrecx,1xoresi,esimovedi,(lengthof ArrayUp) -1exchange:moveax,ArrayUpesi* Type ArrayUpxchg eax,ArrayUpedi* Type ArrayUpxchg eax,ArrayUpesi* type ArrayUp inc esi dec edi loop exchangeexit 0;子程序end start習(xí)題4.23編寫計算100個16位正整數(shù)之和的程序。如果和不超過16位字的范圍,wordsum , 如果超過貝U顯示 " overflo

23、w !".答:.datacount = 100num word count dup(90) wordsum word 0 errmsg byte 'Overflow!'數(shù)據(jù)定義 .codestart:;主程序 xor eax,eax mov ebx,eax mov ecx,count sum:add ax,numebxjc over inc ebx inc ebx loop sum mov wordsum,ax call dispuiw jmp quitover:mov eax,01fset errmsgcall dispmsg quit:exit 0;子程序 end start 習(xí)題4.27在屏幕上顯示 ASCII表,現(xiàn)僅在數(shù)據(jù)段設(shè)置表格緩沖區(qū),編程將 ASCII 出位置的表格,然后調(diào)用顯示功能實現(xiàn)(需要利用雙重循環(huán))。答

溫馨提示

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

最新文檔

評論

0/150

提交評論