![第5章_模塊化程序設(shè)計(jì)_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/d5e1b1c4-0f67-4ef5-847e-14e63124200e/d5e1b1c4-0f67-4ef5-847e-14e63124200e1.gif)
![第5章_模塊化程序設(shè)計(jì)_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/d5e1b1c4-0f67-4ef5-847e-14e63124200e/d5e1b1c4-0f67-4ef5-847e-14e63124200e2.gif)
![第5章_模塊化程序設(shè)計(jì)_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/d5e1b1c4-0f67-4ef5-847e-14e63124200e/d5e1b1c4-0f67-4ef5-847e-14e63124200e3.gif)
![第5章_模塊化程序設(shè)計(jì)_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/d5e1b1c4-0f67-4ef5-847e-14e63124200e/d5e1b1c4-0f67-4ef5-847e-14e63124200e4.gif)
![第5章_模塊化程序設(shè)計(jì)_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/d5e1b1c4-0f67-4ef5-847e-14e63124200e/d5e1b1c4-0f67-4ef5-847e-14e63124200e5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第5章模塊化程序設(shè)計(jì)5.1簡(jiǎn)答題(1) 指令“call ebx”采川了指令的什么尋址方式?寄存器間接尋址(2) 為什么masm要求使用proc定義子程序?(這個(gè)問(wèn)題不好回答,是不是作者寫(xiě)錯(cuò)了?我猜測(cè)可能的原因:在匯編語(yǔ)言屮, 函數(shù)、子程序等都稱為過(guò)程,所以使用proc定義子程序)(3) 為什么特別強(qiáng)調(diào)為子程序加上必要的注釋?便于程序員調(diào)用時(shí)使用,而不必關(guān)注子程序的內(nèi)部實(shí)現(xiàn)。(4) 參數(shù)傳遞的“傳值”和“傳址”有什么區(qū)別?傳值是傳遞參數(shù)的拷貝,傳址是傳遞參數(shù)的地址(5) 子程序采用堆棧傳遞參數(shù),為什么要特別注意堆棧平衡問(wèn)題?保證正確返回;釋放傳遞參數(shù)占川的堆棧空間,避免多次調(diào)用可能導(dǎo)致的堆棧溢出
2、(6) include語(yǔ)句和includelib有什么區(qū)別?include語(yǔ)句包含的是文本文件、是源程序文件的一部分;includelib語(yǔ)句包含的 是子程序庫(kù)文件(7) 什么是子程序庫(kù)?子程序庫(kù)就是子程序模塊的集合,其中存放著各子程序的名稱、目標(biāo)代碼以及有關(guān) 定位信息,便于子程序的管理和調(diào)用(8) 調(diào)用宏時(shí)沒(méi)有為形參提供實(shí)參會(huì)怎樣?缺少的實(shí)參,形參會(huì)做“空”處理。(9) 宏定義體中的標(biāo)號(hào)為什么要用local為指令聲明?為了避免宏展開(kāi)后出現(xiàn)標(biāo)示符不唯一的情況,定義為局部。(10) 條件匯編不成立的語(yǔ)句會(huì)出現(xiàn)在可執(zhí)行文件中嗎?不會(huì)。5.2判斷題(1) 過(guò)程定義pmc是一條處理器指令。錯(cuò),pmc是
3、偽指令(2) call指令的執(zhí)行并不影響堆棧指針esp。錯(cuò),要改變,因?yàn)榉祷氐刂芬獕喝攵褩?3) call指令本身不能包含子程序的參數(shù)。對(duì)。(4) call指令用在調(diào)用程序屮,如果被調(diào)用程序屮也有call指令,說(shuō)明出現(xiàn)了嵌套。對(duì)。(5) 子程序需要保護(hù)寄存器,包括保護(hù)傳遞入門(mén)參數(shù)和岀門(mén)參數(shù)的通用寄存器。錯(cuò),不能保護(hù)傳遞出口參數(shù)的寄存器(6) 利用include包含的源文件實(shí)際上只是源程序的一部分。對(duì)(7) 宏調(diào)用與子程序調(diào)用一樣都要使用call指令實(shí)現(xiàn)。錯(cuò),宏調(diào)用是通過(guò)宏展開(kāi)實(shí)現(xiàn)的調(diào)用,不用call指令(8) 宏定義與子程序一樣一般書(shū)寫(xiě)與主程序之后。錯(cuò),宏需要先定義后調(diào)用,一般在源程序開(kāi)頭部分
4、。(9) 重復(fù)匯編類似于宏匯編,需要先定義后調(diào)用。錯(cuò)。(10) 條件匯編并不像條件轉(zhuǎn)移指令那樣使用標(biāo)志作為條件 對(duì)。5.3填空題(1) 指令“retil6”的功能相當(dāng)于“ret”指令和“addesp,”組合。il6(2) 例5-1程序中的ret指令,如果用pop ebp和jmp ebp指令替換,貝1jebp內(nèi)容是()0000000 分(3) 子程序的參數(shù)傳遞主要有3種,它們是()、()和()。寄存器傳遞,共亨變量傳遞,堆棧傳遞(4) 數(shù)值10在計(jì)算機(jī)內(nèi)部川二進(jìn)制“1010”編碼表示,用十六進(jìn)制表達(dá)是:_。如果將該編碼加37h,則為,它是字符的ascii碼值。a, 41h,a(5) 利用堆棧傳遞
5、子程序參數(shù)的方法是固定的,例如尋址堆棧段數(shù)據(jù)的奇存器是。ebp(6) masm匯編語(yǔ)言屮,聲明一個(gè)共用的變量應(yīng)使用_偽指令;而使用外部變量要使川 _偽指令聲明。public, extern(7) 過(guò)程定義開(kāi)始是“testproc”語(yǔ)句,則過(guò)程定義結(jié)束的語(yǔ)句是。宏定義開(kāi)始是“dispmacro”語(yǔ)句,則宏定義結(jié)束的語(yǔ)句是。test endp, endm(8) 個(gè)宏定義開(kāi)始語(yǔ)句“writechar macro char:req”,則宏名是(),參數(shù)有()個(gè),并且使用“:req”說(shuō)明該參數(shù)()。writechar, 1, 不可缺少(9) 實(shí)現(xiàn)“byte20(hip(20h)”語(yǔ)句的功能也可以使用重復(fù)
6、匯編,第1個(gè)語(yǔ)句是(),第2個(gè)語(yǔ)句是“ byte20h”,第3個(gè)語(yǔ)句是()。repeat 20, endm(10) 條件匯編語(yǔ)言語(yǔ)句“ifnumlt100”屮的lt表示(),該語(yǔ)句需要配合()語(yǔ) 句結(jié)束條件匯編小于,endif習(xí)題5.4如下子程序完成對(duì)ecx個(gè)元素的數(shù)纟 11 (由ebx指向其首地址)的求和,通過(guò)edx和eax 返回結(jié)果,但是程序有錯(cuò)誤,請(qǐng)改正。crazy procpusheax xor eax,eax xor edx,edxagain:add eaxjebxadc edx,o add ebx,4 loop again retendp crazy 答:crazy proc xo
7、r eax,eax xor edx,edxagain:add eaxjebx adc edx,0 add ebx,4 loop again retcrazy endp習(xí)題5.5請(qǐng)按如下說(shuō)明編寫(xiě)子程序:子程序功能:把用ascii碼表示的兩位十進(jìn)制數(shù)轉(zhuǎn)換為壓縮bcd碼。 入口參數(shù):dh=+位數(shù)的ascii碼,dl=t位數(shù)的ascii碼 出口參數(shù):al=對(duì)應(yīng)的bcd碼答:asc2bcdprocshldh,4anddl,ofhordh,dlmov al,dhretasc2bcd endp習(xí)題5.6乘法的非壓縮bcd碼調(diào)整指令aam執(zhí)行的操作是:ah<-al/10的商,al<-al/10的余
8、數(shù)。 利用aam可以實(shí)現(xiàn)將al中的100內(nèi)數(shù)據(jù)轉(zhuǎn)換為ascii碼,程序如下:xor ah,ahaamadd ax,3030h利用這段程序,編寫(xiě)一個(gè)顯示al中數(shù)值(099)的子程序。答:suba procaamadd ax,3030h xchgah,al call dispcxchgah,al call dispcsubaendp習(xí)題5.7編寫(xiě)一個(gè)源程序,在鍵盤(pán)上按-個(gè)鍵,將其返回的ascii碼值顯示出來(lái),如果按下退格鍵 (對(duì)應(yīng)ascii碼是08h)則程序退出。請(qǐng)調(diào)用書(shū)巾的htoasc子程序 答:;代碼段,主程序 again:call readccmp al,08h;退格鍵 bs=08hjz d
9、onemov bl,almov al,.:call dispcmov al,blrol al,4call htoasc;調(diào)用子程序call dispc ;顯示一個(gè)字符 mov al,blcall htoasc;調(diào)用子程序call dispc ;品示一個(gè)字符 call dispcrlf jmp againdone:習(xí)題5.8編寫(xiě)一個(gè)子程序,它以二進(jìn)制形式顯示eax中32位數(shù)據(jù),并沒(méi)計(jì)一個(gè)主程序驗(yàn)證。 答:;代碼段,主程序 mov eax,8f98ff00h call dispbd;調(diào)川子程序,代碼段,子程序dispbd proc ;32位二進(jìn)制數(shù)的輸出 push ecxmov ecx,32;要輸
10、出的字符個(gè)數(shù)dbd: rol eax,l ;al 循環(huán)左移一位 push eaxand al,01h;取al最低位add al,30h;轉(zhuǎn)化成相應(yīng)的ascll碼值call dispc ;以二進(jìn)制的形式顯示pop eaxloop dbd pop ecx retdispbd endp習(xí)題5.9將例5-4的32位寄存器改用16位寄存器,僅實(shí)現(xiàn)輸山-2154-2,5-1之間的數(shù)據(jù)。答:start:mov ecxjengthof array mov ebx,0again:mov ax,arrayebxcall write call dispcrlf inc ebx inc ebx loop again
11、exit 0write proc push ebx push ecx push edxmov ebx,offset writebuf test ax,ax jnz write 1mov byte ptr ebx,30h inc ebx jmp write5write 1: jns write?mov byte ptr febxl,- inc ebxneg axwrite?: mov ex jo push exwrite3: emp ax,0 jz write4 xor dx,dx div ex add dx,30h push dx jmp write3write4: pop dx emp dx
12、,cxje write5 mov ebx,dl inc ebx jmp write4write5: mov byte ptr ebx,0 mov eax,offset writebuf call dispmsg pop edx ;恢復(fù)寄存器 pop ecxpop ebxret ;子程序返回write endp習(xí)題5.10參考例5-6,編寫(xiě)實(shí)現(xiàn)32位無(wú)符號(hào)整數(shù)輸入的子程序,并設(shè)計(jì)一個(gè)主程序驗(yàn)證 答:include io32.inc .datacount =5array dword count dup(o)tempdword ?;共亨變量readbuf byte 30 dup(o).codesta
13、rt:mov ecx,count mov ebx,offset arrayagain:call read ;調(diào)用子程.序,輸入一個(gè)數(shù)據(jù)mov eax,temp ;獲得出口參數(shù) mov ebx,eax ;存放到數(shù)掘緩沖區(qū) add ebx,4dec ecx jnz againexit 0 read procpush eax push ebx push ecx push edxreado:mov eax,offset readbufcall readmsg test eax,eax jz readerr cmp eaxjo ja readerrmov edx,offset readbuf xor e
14、bx,ebxread 1:mov al,edx read2:inc edx cmp al/0' jb readerr cmp al,'9 ja readerr sub al,30h imul ebx,10 jc readerr movzx eax,al add ebx,eax cmp ebx,()ffffffffh ja readerr dec ex jnz read i jmp read5readerr: mov eax,offset errmsg call dispmsg jmp readoread5:mov temp,ebxpop edx pop ecx pop ebx
15、pop eax reterrmsg byte input error,enter again: 0 read endpend start習(xí)題5.11編寫(xiě)一個(gè)計(jì)算字節(jié)校驗(yàn)和的子程序。(所謂“校驗(yàn)和”是指不記進(jìn)位的累加,常用于檢查信 息的正確性。)主程序提供入口參數(shù),包括數(shù)據(jù)個(gè)數(shù)和數(shù)據(jù)緩沖區(qū)的首地址。子程序回送求 和結(jié)果這個(gè)出口參數(shù)。答:;計(jì)算字節(jié)校驗(yàn)和的通用過(guò)程;入口參數(shù):ds:ebx二數(shù)組的段地址:偏移地址 已匸乂 =元素個(gè)數(shù);出口參數(shù):al =校驗(yàn)和;說(shuō)明:除eax/ebx/ecx夕卜,不影響其他寄存器 checksumprocxoral,al ;累加器清0 sum: add aljebx;
16、求和inc ebx ;指向下一個(gè)字節(jié) loop sumchecksumendp習(xí)題5.12編制3個(gè)子程序把一個(gè)32位二進(jìn)制數(shù)用8位十六進(jìn)制形式在屏幕上s示出來(lái),分別運(yùn)用如 下3種參數(shù)傳遞方法,并配合3個(gè)主程序驗(yàn)證它。(1) 采用eax寄存器傳遞這個(gè)32位二進(jìn)制數(shù)。(2) 采用temp變量傳遞這個(gè)32位二進(jìn)制數(shù)。(3) 采用堆棧方法傳遞這個(gè)32位二進(jìn)制數(shù)。答:(1).codestart:moveax,1234abcdh ;假設(shè)一個(gè)要顯示的數(shù)據(jù) call bin2hex exit 0bin2hex proc push ecxmov ecx,8;8位十六進(jìn)制數(shù)again:rol eax,4 ;高4位
17、循環(huán)移位進(jìn)入低4位push eax ;子程序利用al返回結(jié)果,所以需要保存eax屮的數(shù)據(jù) call htoasc;調(diào)用子裡序pop eax ;恢復(fù)保存的數(shù)掘 loop againpop ecx rethtoascproc ;將al低4位表達(dá)的一位十/進(jìn)制數(shù)轉(zhuǎn)換為ascii碼and al,()fh;只取al的低4位 or al,30h ;al高4位變成3,實(shí)現(xiàn)加30h cnip al,39h;是09,還是 afjbe htoendadd al j ;是af,其ascii碼再加上7htoend:call dispc ret ;子程序返回htoasc endp bin2hex endpend sta
18、rt習(xí)題5.13利用+六進(jìn)制字節(jié)顯示子程序disphb設(shè)計(jì)一個(gè)從低地址到髙地址逐個(gè)字節(jié)顯示某個(gè)主存 區(qū)域閃容的子程序dispmem。其入口參數(shù):£六乂 =主存偏移地址,ecx二字節(jié)個(gè)數(shù)(主存 區(qū)域的長(zhǎng)度)。同吋編寫(xiě)一個(gè)主程序進(jìn)行驗(yàn)證。答:;數(shù)據(jù)段var byte this is a test!;主程序mov eax,offset var rnov ecx,sizeof var call dispmem;子程序dispmem proc push ebx mov ebx,eaxdispml: cmp ecx,0 jz dispm2 mov al,ebx call disphb mov a
19、l,1 call dispcinc ebxdec ecx jmp dispmldispm2: pop ebx retdispmem endp習(xí)題5.14數(shù)據(jù)輸入輸出程序。使用有符號(hào)十進(jìn)制數(shù)據(jù)輸入(例5-6)、求平均值(例5-7)以及輸出子 程序(例5-4),編程實(shí)現(xiàn)從鍵盤(pán)輸入10個(gè)數(shù)據(jù),并輸出它們的平均值。(1) 編寫(xiě)主程序文件:定義必要的變u和交互信息,調(diào)用子程序輸入1()個(gè)數(shù)據(jù),求平均值 然后輸出。(2) 編寫(xiě)子程序文件:包括3個(gè)子程序的過(guò)程定義。(3) 說(shuō)明進(jìn)行模塊連接的開(kāi)發(fā)過(guò)程,并上機(jī)實(shí)現(xiàn)。(4) 將子程序文件形成一個(gè)子程序庫(kù),說(shuō)明開(kāi)發(fā)過(guò)程并上機(jī)實(shí)現(xiàn)。答:data;數(shù)據(jù)定義count
20、=10array dword count dup(o)tempdword ?;共亨變量readbuf byte 30 dup(o)writebuf byte 12 d叩(0);顯示緩沖區(qū) .code;主程序start:mov ecx,count mov ebx,offset arrayagain:call read ;調(diào)用子程序,輸入一個(gè)數(shù)掘mov eax,temp ;獲得出口參數(shù) mov ebx,eax ;存放到數(shù)據(jù)緩沖區(qū) add ebx,4dec ecx jnz againpush lengthof array ;壓入數(shù)據(jù)個(gè)數(shù) push offset array;壓數(shù)組的偏移地址call
21、mean;調(diào)用求平均值子程序,出口參數(shù):eax =平均值(整數(shù)部分) add esp,8 ;平衡堆棧(壓入了 8個(gè)字節(jié)數(shù)據(jù)) call writeexit 0習(xí)題5.18編寫(xiě)一個(gè)宏swap,參數(shù)是兩個(gè)32位寄存器或存儲(chǔ)器操作數(shù),宏定義體實(shí)現(xiàn)兩個(gè)操作數(shù)位置 交換,包括兩個(gè)都是存儲(chǔ)器操作數(shù)的情況。答:swap macro opl,op2 push op1 push op2 pop op1 pop op2 endm習(xí)題5.19定義一個(gè)使用邏輯指令的宏logical。(丨)用它代表4條邏輯運(yùn)算指令:and/or/xor/test,可以使用3個(gè)形式參數(shù),并給出 一個(gè)宏調(diào)用以及對(duì)應(yīng)宏展開(kāi)的例子。(2)必要
22、時(shí)做一點(diǎn)修改,使該宏能夠把not指令包括進(jìn)去,給出一個(gè)使川not指令的宏調(diào)用以及對(duì)應(yīng)宏展開(kāi)的例子。答:(1)logical macro op,dst,src op dst,src endmlogical and,eax,l0000000083e0 011and eax,llogical or,eax,10000000383c8 011or eax,1logical xor,eax,10000000683 f0 011xor eax,llogical test,eax,l00000009 a9 000000011 test eax,l(2)logical macro op,dst,src ifb
23、 <$rc>opdstelseopdst,srcendifendmlogical noteax00000000f7 do1not習(xí)題5.20有一個(gè)宏定義:defstr macro name,num,stringname&num byte &string& ,0endm給出如卜宏調(diào)用的宏展開(kāi):(1) defstr msg,4,<chapter 4:program structure(2) defstr msg,5,<chapter 5procedure programming答:msg4 byte 'chapter 4:program structureomsg5 byte chapter
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 水資源管理服務(wù)行業(yè)智能化水資源開(kāi)發(fā)利用方案
- 2025年重慶貨運(yùn)從業(yè)資格證試題
- 2024年領(lǐng)軍高考物理一輪復(fù)習(xí)專題11.3機(jī)械能提高訓(xùn)練含解析
- 2024年新教材高中生物單元素養(yǎng)評(píng)價(jià)二含解析新人教版必修2
- 2024-2025學(xué)年高中歷史課下能力提升二十五工業(yè)革命時(shí)代的浪漫情懷含解析人民版必修3
- 湘師大版道德與法治九年級(jí)上冊(cè)5.2.2《公平正義促和諧》聽(tīng)課評(píng)課記錄
- 多人合伙經(jīng)營(yíng)合同范本
- 電子商務(wù)半年工作總結(jié)
- 委托出租鋪面協(xié)議
- 特種設(shè)備委托檢驗(yàn)檢測(cè)協(xié)議書(shū)范本
- 2024年09月2024年中國(guó)農(nóng)業(yè)發(fā)展銀行總行部門(mén)秋季校園招聘(22人)筆試歷年參考題庫(kù)附帶答案詳解
- 2025年北京生命科技研究院招聘筆試參考題庫(kù)含答案解析
- 銀行金融機(jī)構(gòu)銀行金融服務(wù)協(xié)議
- GB/T 27697-2024立式油壓千斤頂
- 《消防機(jī)器人相關(guān)技術(shù)研究》
- 2024年考研政治真題及答案
- 【直播薪資考核】短視頻直播電商部門(mén)崗位職責(zé)及績(jī)效考核指標(biāo)管理實(shí)施辦法-市場(chǎng)營(yíng)銷策劃-直播公司團(tuán)隊(duì)管理
- 項(xiàng)目設(shè)計(jì)報(bào)告范文高中
- 《千年古村上甘棠》課件
- 部編版小學(xué)語(yǔ)文二年級(jí)下冊(cè)電子課文《小馬過(guò)河》
- 《醫(yī)療機(jī)構(gòu)工作人員廉潔從業(yè)九項(xiàng)準(zhǔn)則》專題解讀
評(píng)論
0/150
提交評(píng)論