




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第6章Windows編程6.1 簡答題(1)什么是應(yīng)用程序接口(API)?API是一些類型、常量和函數(shù)的集合,提供了編程中使用的庫函數(shù)的途徑。(2)什么是靜態(tài)連接?連接程序從庫文件中抽取需要的子程序插入到最終的可執(zhí)行代碼中,叫做靜態(tài)連接。(3)運行Windows應(yīng)用程序,有時為什么會提示某個DLL文件不存在?Windows程序在運行時需要加載其配套的動態(tài)連接庫DLL文件,當(dāng)其沒有被搜索到時就會提示不存在。(4)ADDR與OFFSET有何不同?都是地址操作符,后接標(biāo)號或變量名表示它們的地址。但是addr只用在invoke語句中,獲取局部變量的地址。 Offset只能獲取全局變量的偏移地址。(5)
2、ExitProcess函數(shù)可以按匯編語言習(xí)慣全部使用小寫字母表示嗎?不能,因為Windows的API函數(shù)按照C語言習(xí)慣區(qū)別大小寫字母,是不同的(6)Win32 API中可以使用哪兩種字符集?8位的ASCII字符集和16位的Unicode字符集(7)為什么調(diào)用API函數(shù)之后,ECX等寄存器改變了?因為API函數(shù)并不是按照匯編語言的規(guī)則編寫的,它的規(guī)則是不保護它們(8)條件控制“.IF”偽指令的條件是在匯編階段進行判斷嗎?不是。條件控制偽指令在會變階段要轉(zhuǎn)換為一組功能相當(dāng)?shù)缺容^、測試喝轉(zhuǎn)移指令,是在執(zhí)行階段進行判斷的。(9)為什么32位api函數(shù)的地址指針也可以轉(zhuǎn)換為匯編語言的雙字類型?32位ap
3、i函數(shù)的地址指針與匯編語言的雙字類型DWORD相對應(yīng)(10)在masm32軟件包支持下的匯編語言程序中為什么沒有看到對windows常量、函數(shù)等的定義和聲明?對windows常量、函數(shù)等的定義和聲明已經(jīng)包含在windows.inc、kerne;32.inc及user32.inc等文件中。6.2 判斷題(1)Windows可執(zhí)行文件中包含動態(tài)連接庫中的代碼。錯,不含,運行時才加載(2)導(dǎo)入庫文件和靜態(tài)子程序庫文件的擴展名都是.lib,所以兩者性質(zhì)相同。錯,導(dǎo)入庫中記錄的是動態(tài)連接庫中函數(shù)等的名稱及存儲位置等信息,不含執(zhí)行代碼。(3)INVOKE語句只能傳遞主存操作數(shù),不能傳遞寄存器值。錯,可以使
4、用寄存器參數(shù)(4)Windows控制臺是命令行窗口,也就是MS-DOS窗口。錯,Windows控制臺與DOS窗口本質(zhì)不同(5)與高級語言類似,匯編語言中使用結(jié)構(gòu)變量也需要先說明結(jié)構(gòu)類型對(6)proc偽指令可以使用uses操作符,但是proto偽指令不可以使用。對(7)在宏定義中,local偽指令聲明標(biāo)識符;而在過程定義中,local偽指令用于分配局部變量。對(8)條件匯編IF和條件控制.IF偽指令都包括條件表達式,它們的表達形式一樣。對(9)條件控制.IF偽指令和循環(huán)控制偽指令.WHILE中的條件表達式具有相同的表達形式。對(10)masm32軟件包只支持32位圖形界面應(yīng)用程序的開發(fā),不支持
5、控制臺應(yīng)用程序的開發(fā)。錯。6.3 填空題(1)Windows系統(tǒng)有3個最重要的系統(tǒng)動態(tài)連接庫文件,它們是_、_和_。KERNEL32.DLL,USER32.DLL,GDI32.DLL(2)進行windows應(yīng)用程序開發(fā)時,需要( )庫文件;執(zhí)行該應(yīng)用程序時,則需要對應(yīng)的( )庫文件。導(dǎo)入庫,動態(tài)鏈接庫(3)獲得句柄函數(shù)GetStdHandle執(zhí)行結(jié)束,使用_提供返回結(jié)果。EAX(4)函數(shù)GetStdHandle需要一個參數(shù),對標(biāo)準(zhǔn)輸入設(shè)備應(yīng)該填入( )數(shù)值,對標(biāo)準(zhǔn)輸出設(shè)備應(yīng)該填入 ( )數(shù)值,對邊準(zhǔn)錯誤輸出設(shè)備應(yīng)該填入( )數(shù)值-10,-11,-12(5)調(diào)用ReadConsole函數(shù)時,用戶
6、在鍵盤上按下數(shù)字8,然后回車,則鍵盤緩沖區(qū)的內(nèi)容一次是( )。38h,0dh,0ah(6)WriteConsole和ReadConsole函數(shù)的參數(shù)類似,都有5個,第1個參數(shù)是_,第2個參數(shù)是輸出或輸入緩沖區(qū)的_,第3個參數(shù)是輸出或輸入的字符_,第4個參數(shù)指向?qū)嶋H輸出或輸入字符個數(shù)的變量,最后1個參數(shù)一般要求代入_。句柄實例,地址,個數(shù),0(7)消息窗口函數(shù)MessageBox有4個參數(shù),第1個是0,第2個是要顯示字符串的(),第3個是()的地址指針,第4個參數(shù)指明窗口形式。注意字符串要使用()作為結(jié)尾標(biāo)志。地址指針(即首地址),窗口標(biāo)題,0(8)要使用獲取系統(tǒng)日期時間函數(shù)GetLocalTi
7、me,需要定義一個()結(jié)構(gòu)變量,其中返回系統(tǒng)時間數(shù)值,這些數(shù)值采用2進制編碼,例如,日期返回的編碼是0019h,它表示日期是()。SYSTEMTILE,25(9)使用擴展的proc偽指令編寫子程序比較方便,例如,子程序中需要保護和恢復(fù)esi和edi寄存器,就只需要使用()既可以。Uses esi edi(10)masm進行匯編時生成最大化源代碼列表,其中語句前使用字母()表示是通過包含文件插入的語句,使用“*”符號的語句是()的代碼,而語句前的數(shù)字則說明是()語句。C,匯編程序生成,宏調(diào)用習(xí)題6.4執(zhí)行CPUID指令,直接使用控制臺輸出函數(shù)將處理器識別字符串顯示出來。.686.model fl
8、at,stdcalloption casemap:noneincludelib binkernel32.libExitProcess proto,:dwordGetStdHandleproto,:dword WriteConsoleA proto,:dword,:dword,:dword,:dword,:dword WriteConsoleequ <WriteConsoleA>STD_OUTPUT_HANDLE = -11 .dataouthandledword ?outbufferbyte 'The processor ', 12 dup(0)outbufsize
9、= sizeof outbuffer outsizedword ?.codemov eax,0cpuid;執(zhí)行處理器識別指令mov dword ptr outbuffer+outbufsize-12,ebxmov dword ptr outbuffer+outbufsize-8,edxmov dword ptr outbuffer+outbufsize-4,ecxinvoke GetStdHandle,STD_OUTPUT_HANDLEmov outhandle,eaxinvoke WriteConsole,outhandle, addr outbuffer,outbufsize,addr o
10、utsize,0invoke ExitProcess,0習(xí)題6.5直接使用控制臺輸入和輸出函數(shù)實現(xiàn)例6-2的功能(不使用readmsg,dispmsg).注意,輸入和輸出句柄只要各獲取一個既可。.686.model flat,stdcalloption casemap:noneincludelib binkernel32.libExitProcessproto,:dwordexitmacro dwexitcodeinvoke ExitProcess,dwexitcodeendmGetStdHandleproto,:dwordWriteConsoleAproto,:dword,:dword,:d
11、word,:dword,:dwordWriteConsoleequ <WriteConsoleA>ReadConsoleAproto,:dword,:dword,:dword,:dword,:dwordReadConsoleequ <ReadConsoleA>STD_INPUT_HANDLE = -10STD_OUTPUT_HANDLE = -11.datamsg1byte 'Please enter your name: ',0msg2byte 'Welcome ',0nbufbyte 80 dup(0)msg3byte ' t
12、o Win32 Console!',0_outhandledword ?_inhandledword ?_insizedword ?_outsizedword ?.codestart:invoke GetStdHandle,STD_OUTPUT_HANDLEmov _outhandle,eaxinvoke GetStdHandle,STD_INPUT_HANDLEmov_inhandle,eaxinvoke WriteConsole,_outhandle,addr msg1,sizeof msg1,addr _outsize,0invoke ReadConsole,_inhandle,
13、addr nbuf,80,addr _insize, 0invoke WriteConsole,_outhandle,addr msg2,sizeof msg2,addr _outsize,0sub _insize,2invoke WriteConsole,_outhandle,addr nbuf,_insize,addr _outsize,0invoke WriteConsole,_outhandle,addr msg3,sizeof msg3,addr _outsize,0exit 0end start習(xí)題6.6直接使用控制臺輸出函數(shù)實現(xiàn)某個主存區(qū)域內(nèi)容的顯示。要求改進顯示形式,例如,每行
14、顯示16個字節(jié)(128位),每行開始先顯示首個主存單元的偏移地址,然后用冒號分隔主存內(nèi)容。.datavarbyte 'This is a test!','ABCDEFG','0123456789'_outsizedword ?_outhandledword ?_membufferbyte 57 dup(20h),13,10.codestart:mov eax,offset varmov ecx,sizeof varcall dispmeminvoke ExitProcess,0dispmemproctest ecx,ecx;個數(shù)為0,不顯示jz
15、dispm11;退出pushadmov esi,ecx;ESI=要顯示內(nèi)容的字節(jié)數(shù)mov edi,eax;EDI=要顯示內(nèi)容的地址invoke GetStdHandle,STD_OUTPUT_HANDLEmov _outhandle,eax;獲得輸出句柄;1.顯示緩沖區(qū)全部填充為空格dispm1: xor ebx,ebx;指示顯示緩沖區(qū)dispm2:mov _membufferebx,' 'inc ebxcmp ebx,(sizeof _membuffer)-2jb dispm2;2.顯示內(nèi)容所在的存儲器地址xor ebx,ebxmov ecx,8;地址是十六進制8位mov e
16、ax,edidispm3:rol eax,4mov dl,aland dl,0fhor dl,30hcmp dl,39hjbe dispm4add dl,7dispm4:mov _membufferebx,dlinc ebxloop dispm3mov _membufferebx,':'顯示冒號add ebx,2mov ecx,16;一行最多顯示16個字節(jié);3.顯示一個字節(jié)內(nèi)容dispm5: mov al,edimov dl,alshr dl,4or dl,30hcmp dl,39hjbe dispm6add dl,7dispm6:mov _membufferebx,dlinc
17、 ebxand al,0fhor al,30hcmp al,39hjbe dispm7add al,7dispm7:mov _membufferebx,aladd ebx,2inc edi;指向下一個要顯示的字節(jié)dec esijz dispm10;沒有要顯示的內(nèi)容,退出loop dispm5invoke WriteConsole,_outhandle,addr _membuffer,sizeof _membuffer,addr _outsize,0jmp dispm1dispm10:invoke WriteConsole,_outhandle,addr _membuffer,sizeof _m
18、embuffer,addr _outsize,0popad dispm11:retdispmemendp習(xí)題6.7執(zhí)行CPUID指令,在消息窗口顯示處理器識別字符串,要求該消息窗有OK和Cancel兩個按鈕。MessageBoxAproto :dword,:dword,:dword,:dwordMessageBoxequ <MessageBoxA>NULLequ 0MB_OKequ 1.dataszCaptionbyte '消息窗口',0outbufferbyte '本機的處理器是', 12 dup(0),0outbufsize= sizeof ou
19、tbuffer-1.codestart:mov eax,0cpuid;執(zhí)行處理器識別指令mov dword ptr outbuffer+outbufsize-12,ebxmov dword ptr outbuffer+outbufsize-8,edxmov dword ptr outbuffer+outbufsize-4,ecxinvoke MessageBox,NULL,addr outbuffer, addr szCaption,MB_OKinvoke ExitProcess,NULLend start習(xí)題6.8參考5-10,利用MessageBox函數(shù)創(chuàng)建的消息窗口顯示32位通用寄存器內(nèi)
20、容。.686.model flat,stdcalloption casemap:noneincludelib .libkernel32.libincludelib .libuser32.libExitProcessproto,:dwordexitmacro dwexitcodeinvoke ExitProcess,dwexitcodeendmGetStdHandleproto,:dwordWriteConsoleAproto,:dword,:dword,:dword,:dword,:dwordWriteConsoleequ <WriteConsoleA>MessageBoxApro
21、to,:dword,:dword,:dword,:dwordMessageBoxequ <MessageBoxA>STD_INPUT_HANDLE = -10STD_OUTPUT_HANDLE = -11;宏定義dreg32macro reg32local dreg1,dreg2mov eax,reg32;顯示reg32寄存器mov ecx,8 xor ebx,ebxdreg1:rol eax,4mov edx,eaxand dl,0fhadd dl,30h;轉(zhuǎn)化為相應(yīng)的ASCII碼值cmp dl,39h;區(qū)別09和AF數(shù)碼jbe dreg2add dl,7dreg2:mov rd
22、®32&ebx+4,dlinc ebxcmp ebx,ecxjb dreg1endm .datastrCaptionbyte '32位通用寄存器內(nèi)容',0rdeaxbyte 'EAX=00000000, 'rdebxbyte 'EBX=00000000, 'rdecxbyte 'ECX=00000000, 'rdedxbyte 'EDX=00000000',13,10rdesibyte 'ESI=00000000, 'rdedibyte 'EDI=00000000, &
23、#39;rdebpbyte 'EBP=00000000, 'rdespbyte 'ESP=00000000',13,10,0_outsizedword $ - rdeax _outhandledword ?.codestart:invoke GetStdHandle,STD_OUTPUT_HANDLEmov _outhandle,eaxmov eax,12345678h;假設(shè)一些數(shù)據(jù)mov ebx,0abcdef00h mov ecx,eax mov edx,ebx mov esi,11111111h mov edi,22222222h mov ebp,espc
24、all dprdexit 0dprdprocpushadpush edxpush ecxpush ebxdreg32 eax;顯示EAXpop ebxdreg32 ebx;顯示EBXpop ecxdreg32 ecx;顯示ECXpop edxdreg32 edx;顯示EDXdreg32 esi;顯示ESIdreg32 edi;顯示EDIdreg32 ebp;顯示EBPadd esp,36;獲得進入該子程序前的ESPdreg32 esp;顯示ESPsub esp,36;恢復(fù)ESPmov eax,offset rdeaxinvoke MessageBox ,0 ,eax , addr strCap
25、tion,0popadret dprdendpend start習(xí)題6.9利用獲得系統(tǒng)時間函數(shù),將年月日時分秒星期等時間完整地顯示出來??梢詣?chuàng)建一個控制臺程序,也可以創(chuàng)建一個消息窗口程序。習(xí)題6.10結(jié)構(gòu)數(shù)據(jù)類型如何說明,結(jié)構(gòu)變量如何定義,結(jié)構(gòu)字段如何引用略習(xí)題6.11條件控制偽指令的條件表達式中,邏輯與“&&”表示兩者都為真,整個條件才為“真”;邏輯或“|”表示兩者之一為真,整個條件就為“真”。對如下兩個程序段(var是一個雙字變量):(1)邏輯與條件.if (var=5)&&(eax!=ebx)Inc eax.endif(2)邏輯或條件.if (var=5)
26、|(eax!=ebx)Dec ebx.endif請直接使用處理器指令實現(xiàn)上述分支結(jié)構(gòu),并比較匯編程序生成的代碼序列。答:(1)Cmp var,5Jne doneCmp eax,ebxJe doneInc eaxDone:(2) Cmp var,5Jel1Cmp eax,ebxJedoneL1:Dec ebxDone:習(xí)題6.12對于如下兩個程序段:(1)WHILE循環(huán)結(jié)構(gòu).while eax !=10Mov ebx*4,eaxInc eax.endw(2)UNTIL循環(huán)結(jié)構(gòu).repeatMov ebx*4,eaxInc eax.until eax =10請直接使用處理器指令實現(xiàn)上述分支結(jié)構(gòu),并比較匯編程序生成的代碼序列。答:(1)Next:Cmp eax,10Je doneMov ebx*4,eaxInc eaxJmp nextdone:(2)Next: Mov ebx*4,eaxInceaxCmpeax,10Jnenext習(xí)題6.13使用條件控制.if偽指令編寫習(xí)題4.16程序,并
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZSA 231-2024 氧化鎵單晶片X 射線雙晶搖擺曲線半高寬測試方法
- T-ZMDS 10022-2024 光學(xué)脊柱測量及姿態(tài)評估設(shè)備
- 二零二五年度名義購房代持合同中的房產(chǎn)繼承與轉(zhuǎn)讓安排
- 2025年度高品質(zhì)車位租賃與社區(qū)設(shè)施管理合同
- 二零二五年度安全生產(chǎn)評價資質(zhì)借用服務(wù)合同
- 2025年度高速公路監(jiān)控系統(tǒng)維保服務(wù)協(xié)議雙聯(lián)
- 二零二五年度解除勞動合同通知書及員工離職后商業(yè)保險權(quán)益處理及終止協(xié)議
- 2025年度電力系統(tǒng)設(shè)備租賃合同模板
- 2025年美業(yè)美容儀器銷售代表入職合同
- 二零二五年度淘寶平臺商家入駐信息保密協(xié)議
- 不規(guī)則抗體篩查與鑒定
- 中國銀行海爾多聯(lián)機方案書
- 涂布機初級操作技術(shù)與維修培訓(xùn)課件
- GB/T 8417-2003燈光信號顏色
- GB/T 7984-2001輸送帶具有橡膠或塑料覆蓋層的普通用途織物芯輸送帶
- GB/T 7631.10-2013潤滑劑、工業(yè)用油和有關(guān)產(chǎn)品(L類)的分類第10部分:T組(渦輪機)
- GB/T 7324-2010通用鋰基潤滑脂
- GB/T 28114-2011鎂質(zhì)強化瓷器
- GB/T 15566.1-2020公共信息導(dǎo)向系統(tǒng)設(shè)置原則與要求第1部分:總則
- 三菱電梯LEHY-II、LEGY緊急救援的盤車裝置切換說明
- 新編物理基礎(chǔ)學(xué)(上下冊1-17章)課后習(xí)題(每題都有)詳細(xì)答案
評論
0/150
提交評論