![第5章_模塊化程序設(shè)計(jì)_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/d5e1b1c4-0f67-4ef5-847e-14e63124200e/d5e1b1c4-0f67-4ef5-847e-14e63124200e1.gif)
![第5章_模塊化程序設(shè)計(jì)_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/d5e1b1c4-0f67-4ef5-847e-14e63124200e/d5e1b1c4-0f67-4ef5-847e-14e63124200e2.gif)
![第5章_模塊化程序設(shè)計(jì)_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/d5e1b1c4-0f67-4ef5-847e-14e63124200e/d5e1b1c4-0f67-4ef5-847e-14e63124200e3.gif)
![第5章_模塊化程序設(shè)計(jì)_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/d5e1b1c4-0f67-4ef5-847e-14e63124200e/d5e1b1c4-0f67-4ef5-847e-14e63124200e4.gif)
![第5章_模塊化程序設(shè)計(jì)_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/d5e1b1c4-0f67-4ef5-847e-14e63124200e/d5e1b1c4-0f67-4ef5-847e-14e63124200e5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第5章模塊化程序設(shè)計(jì)5.1簡答題(1) 指令“call ebx”采川了指令的什么尋址方式?寄存器間接尋址(2) 為什么masm要求使用proc定義子程序?(這個(gè)問題不好回答,是不是作者寫錯(cuò)了?我猜測可能的原因:在匯編語言屮, 函數(shù)、子程序等都稱為過程,所以使用proc定義子程序)(3) 為什么特別強(qiáng)調(diào)為子程序加上必要的注釋?便于程序員調(diào)用時(shí)使用,而不必關(guān)注子程序的內(nèi)部實(shí)現(xiàn)。(4) 參數(shù)傳遞的“傳值”和“傳址”有什么區(qū)別?傳值是傳遞參數(shù)的拷貝,傳址是傳遞參數(shù)的地址(5) 子程序采用堆棧傳遞參數(shù),為什么要特別注意堆棧平衡問題?保證正確返回;釋放傳遞參數(shù)占川的堆??臻g,避免多次調(diào)用可能導(dǎo)致的堆棧溢出
2、(6) include語句和includelib有什么區(qū)別?include語句包含的是文本文件、是源程序文件的一部分;includelib語句包含的 是子程序庫文件(7) 什么是子程序庫?子程序庫就是子程序模塊的集合,其中存放著各子程序的名稱、目標(biāo)代碼以及有關(guān) 定位信息,便于子程序的管理和調(diào)用(8) 調(diào)用宏時(shí)沒有為形參提供實(shí)參會(huì)怎樣?缺少的實(shí)參,形參會(huì)做“空”處理。(9) 宏定義體中的標(biāo)號為什么要用local為指令聲明?為了避免宏展開后出現(xiàn)標(biāo)示符不唯一的情況,定義為局部。(10) 條件匯編不成立的語句會(huì)出現(xiàn)在可執(zhí)行文件中嗎?不會(huì)。5.2判斷題(1) 過程定義pmc是一條處理器指令。錯(cuò),pmc是
3、偽指令(2) call指令的執(zhí)行并不影響堆棧指針esp。錯(cuò),要改變,因?yàn)榉祷氐刂芬獕喝攵褩?3) call指令本身不能包含子程序的參數(shù)。對。(4) call指令用在調(diào)用程序屮,如果被調(diào)用程序屮也有call指令,說明出現(xiàn)了嵌套。對。(5) 子程序需要保護(hù)寄存器,包括保護(hù)傳遞入門參數(shù)和岀門參數(shù)的通用寄存器。錯(cuò),不能保護(hù)傳遞出口參數(shù)的寄存器(6) 利用include包含的源文件實(shí)際上只是源程序的一部分。對(7) 宏調(diào)用與子程序調(diào)用一樣都要使用call指令實(shí)現(xiàn)。錯(cuò),宏調(diào)用是通過宏展開實(shí)現(xiàn)的調(diào)用,不用call指令(8) 宏定義與子程序一樣一般書寫與主程序之后。錯(cuò),宏需要先定義后調(diào)用,一般在源程序開頭部分
4、。(9) 重復(fù)匯編類似于宏匯編,需要先定義后調(diào)用。錯(cuò)。(10) 條件匯編并不像條件轉(zhuǎn)移指令那樣使用標(biāo)志作為條件 對。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匯編語言屮,聲明一個(gè)共用的變量應(yīng)使用_偽指令;而使用外部變量要使川 _偽指令聲明。public, extern(7) 過程定義開始是“testproc”語句,則過程定義結(jié)束的語句是。宏定義開始是“dispmacro”語句,則宏定義結(jié)束的語句是。test endp, endm(8) 個(gè)宏定義開始語句“writechar macro char:req”,則宏名是(),參數(shù)有()個(gè),并且使用“:req”說明該參數(shù)()。writechar, 1, 不可缺少(9) 實(shí)現(xiàn)“byte20(hip(20h)”語句的功能也可以使用重復(fù)
6、匯編,第1個(gè)語句是(),第2個(gè)語句是“ byte20h”,第3個(gè)語句是()。repeat 20, endm(10) 條件匯編語言語句“ifnumlt100”屮的lt表示(),該語句需要配合()語 句結(jié)束條件匯編小于,endif習(xí)題5.4如下子程序完成對ecx個(gè)元素的數(shù)纟 11 (由ebx指向其首地址)的求和,通過edx和eax 返回結(jié)果,但是程序有錯(cuò)誤,請改正。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請按如下說明編寫子程序:子程序功能:把用ascii碼表示的兩位十進(jìn)制數(shù)轉(zhuǎn)換為壓縮bcd碼。 入口參數(shù):dh=+位數(shù)的ascii碼,dl=t位數(shù)的ascii碼 出口參數(shù):al=對應(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利用這段程序,編寫一個(gè)顯示al中數(shù)值(099)的子程序。答:suba procaamadd ax,3030h xchgah,al call dispcxchgah,al call dispcsubaendp習(xí)題5.7編寫一個(gè)源程序,在鍵盤上按-個(gè)鍵,將其返回的ascii碼值顯示出來,如果按下退格鍵 (對應(yīng)ascii碼是08h)則程序退出。請調(diào)用書巾的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編寫一個(gè)子程序,它以二進(jìn)制形式顯示eax中32位數(shù)據(jù),并沒計(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,編寫實(shí)現(xiàn)32位無符號整數(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編寫一個(gè)計(jì)算字節(jié)校驗(yàn)和的子程序。(所謂“校驗(yàn)和”是指不記進(jìn)位的累加,常用于檢查信 息的正確性。)主程序提供入口參數(shù),包括數(shù)據(jù)個(gè)數(shù)和數(shù)據(jù)緩沖區(qū)的首地址。子程序回送求 和結(jié)果這個(gè)出口參數(shù)。答:;計(jì)算字節(jié)校驗(yàn)和的通用過程;入口參數(shù):ds:ebx二數(shù)組的段地址:偏移地址 已匸乂 =元素個(gè)數(shù);出口參數(shù):al =校驗(yàn)和;說明:除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示出來,分別運(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ū)域的長度)。同吋編寫一個(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ù)輸入輸出程序。使用有符號十進(jìn)制數(shù)據(jù)輸入(例5-6)、求平均值(例5-7)以及輸出子 程序(例5-4),編程實(shí)現(xiàn)從鍵盤輸入10個(gè)數(shù)據(jù),并輸出它們的平均值。(1) 編寫主程序文件:定義必要的變u和交互信息,調(diào)用子程序輸入1()個(gè)數(shù)據(jù),求平均值 然后輸出。(2) 編寫子程序文件:包括3個(gè)子程序的過程定義。(3) 說明進(jìn)行模塊連接的開發(fā)過程,并上機(jī)實(shí)現(xiàn)。(4) 將子程序文件形成一個(gè)子程序庫,說明開發(fā)過程并上機(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編寫一個(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)用以及對應(yīng)宏展開的例子。(2)必要
22、時(shí)做一點(diǎn)修改,使該宏能夠把not指令包括進(jìn)去,給出一個(gè)使川not指令的宏調(diào)用以及對應(yīng)宏展開的例子。答:(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)用的宏展開:(1) defstr msg,4,<chapter 4:program structure(2) defstr msg,5,<chapter 5procedure programming答:msg4 byte 'chapter 4:program structureomsg5 byte chapter
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建省福州市2024-2025學(xué)年九年級上學(xué)期期末語文試題(解析版)
- 執(zhí)行中止申請書
- 學(xué)業(yè)獎(jiǎng)學(xué)金申請書
- DB61T-地理標(biāo)志產(chǎn)品 鳳縣大紅袍花椒(鳳椒)編制說明
- 初級公司信貸-初級銀行從業(yè)資格考試《公司信貸》點(diǎn)睛提分卷2
- 企業(yè)數(shù)據(jù)轉(zhuǎn)換與存儲(chǔ)管理規(guī)范
- 高三補(bǔ)課申請書 范文
- 綠化工人用工合同(2篇)
- 2025屆江西省景德鎮(zhèn)市高三上學(xué)期二模英語試題(解析版)
- 《鋼鐵是怎樣煉成的》讀書分享課件
- 思想旗領(lǐng)航向心得體會(huì)
- 計(jì)算機(jī)軟件確認(rèn)控制程序
- 造價(jià)員安全生產(chǎn)責(zé)任制
- 橋梁樁基專項(xiàng)施工方案-
- 高中生物競賽課件 【知識精研+拓展提升】 細(xì)胞生物學(xué)
- 農(nóng)產(chǎn)品食品檢驗(yàn)員二級技師職業(yè)技能鑒定考試題庫(含答案)
- 工廠車間劃線標(biāo)準(zhǔn)與標(biāo)識管理(共37張PPT)
- 完整版人教版PEP英語四年級下冊全冊課件ppt
- 水利工程建設(shè)管理概述課件
- 地理人教版七年級下冊第三節(jié)-印度課件
評論
0/150
提交評論