資源描述:
《匯編語言編程初步》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、第15章Windows匯編語言編程初步15.1Windows基礎(chǔ)15.2Win32匯編源程序的格式15.3Win32匯編可執(zhí)行文件的生成15.4Win32匯編基本語法15.5創(chuàng)建Windows下的窗口程序15.1Windows基礎(chǔ)1.Windows的內(nèi)存管理Windows操作系統(tǒng)為每一個應(yīng)用程序建立一個4GB的線性空間。線性空間中只包含該應(yīng)用程序的數(shù)據(jù)段和代碼段,操作系統(tǒng)使用的代碼和數(shù)據(jù)(如全局描述符表GDT,局部描述符表LDT與頁表等)以及一些共享代碼和數(shù)據(jù)等。2.Win32匯編的內(nèi)存尋址與實(shí)模式的匯編相比,Win32匯編對內(nèi)存數(shù)據(jù)的訪問更加方便。(2)Wind
2、ows操作系統(tǒng)不僅已經(jīng)預(yù)先為要運(yùn)行的用戶應(yīng)用程序的代碼段、數(shù)據(jù)段和堆棧段設(shè)置好描述符,規(guī)定這些段的的段基址都為0,段界限都為FFFFFFFFH。而且程序開始執(zhí)行時,CS,DS,ES,SS里存放的選擇子已經(jīng)指向正確的描述符,程序員不需要給這些段寄存器賦值。在整個程序運(yùn)行期間,程序員也不應(yīng)該修改這些段寄存器的值。(1)在Windows系統(tǒng)中,每個應(yīng)用程序的整個4GB線性地址空間都作為一個段。代碼段和數(shù)據(jù)段/堆棧段的空間統(tǒng)一的,都是00000000H~FFFFFFFFH。在這個4GB的地址空間中,一部分用來存放程序,一部分作為數(shù)據(jù)區(qū),一部分作為堆棧,另外還有一部分被系統(tǒng)
3、使用。這些部分的地址區(qū)域是不重合的。3.Windows下的中斷和異常(1)為了系統(tǒng)的安全,運(yùn)行在特權(quán)級3的應(yīng)用程序是不能像工作在實(shí)模式下一樣,自己來編寫中斷服務(wù)子程序,也不能通過修改中斷描述符表來調(diào)用系統(tǒng)提供的中斷服務(wù)子程序。(2)在Windows操作系統(tǒng)中,使用Windows提供的應(yīng)用程序編程接口(API)來代替中斷服務(wù)子程序提供的系統(tǒng)功能4.Windows系統(tǒng)下的I/O保護(hù)應(yīng)用程序執(zhí)行時,對端口是不能直接進(jìn)行訪問的,也不能使用STI,CLI中斷允許和禁止指令。15.2Win32匯編源程序的格式15.2.1源程序結(jié)構(gòu).586.MODELFLAT,STDCALL
4、.OPTIONCASEMAP:NONE.DATA<定義有初始化值的變量>.DATA?<定義未初始化值的變量>.CONST<定義常量>.CODE<標(biāo)號><代碼>.....END<標(biāo)號>1.方式選擇偽指令.586是一個匯編語言偽指令,含義和DOS匯編相同.2.內(nèi)存模式選擇偽指令.MODEL是用來指定內(nèi)存模式的偽指令。.MODELFLAT匯編程序自動為各種段寄存器做如下段約定:ASSUMECS:FLAT,DS:FLAT,SS:FLAT,ES:FLATSTDCALL告訴匯編程序參數(shù)的傳遞約定。Win32匯編語言采用STDCALL格式。STDCALL格
5、式參數(shù)傳遞順序是從右到左,即最右邊的參數(shù)最先壓棧,由被調(diào)用者(子程序)恢復(fù)堆棧指針。3.OPTION語句OPTIONCASEMAP:TYPE說明程序中的變量和子程序名是否對大小寫敏感,即區(qū)分大小寫。由于WindowsAPI函數(shù)是區(qū)分大小寫,選項(xiàng)應(yīng)設(shè)置為“OPTIONCASEMAP:NONE”。4.段定義偽指令WIN32中只包含代碼段和數(shù)據(jù)段:DATA和CODE其中數(shù)據(jù)段又分為三種.DATA.DATA?.CONST.DATA定義已初始化的變量。這些變量的值在程序的執(zhí)行中可以被更改。.DATA?定義未初始化的變量。.CONST定義常量,這些常量在程序運(yùn)行過程中是不能更
6、改的.CODE定義代碼段。格式:END標(biāo)號功能:通知匯編程序,源程序到此結(jié)束,標(biāo)號所對應(yīng)的指令是程序的啟動指令。5.匯編結(jié)束語句Win32匯編語言經(jīng)典源程序例子.586.MODELFLAT,STDCALLOPTIONCASEMAP:NONEINCLUDEWINDOWS.INCINCLUDEKERNEL32.INCINCLUDELIBKERNEL32.LIBINCLUDEUSER32.INCINCLUDELIBUSER32.LIB.DATAMsgBoxCaptionDB'Exampleofwin32',0;消息框標(biāo)題顯示字符串MsgBoxTextDB'Hello,你
7、好!',0;消息框內(nèi)顯示字符串.CODESTART:INVOKEMessageBox,NULL,addrMsgBoxText,addrMsgBoxCaption,MB_OKINVOKEExitProcess,NULLENDSTART15.3Win32匯編可執(zhí)行文件的生成匯編源程序*.asm資源腳本文件*.rc匯編程序資源編譯程序目標(biāo)程序*.obj資源文件*.res鏈接程序Win32可執(zhí)行文件*.exeWin32匯編軟件的開發(fā)可分源程序開發(fā)和資源開發(fā)兩部分匯編鏈接步驟(以教材例15.1為例)(1)?匯編源程序hello.asmml/c/coffhello.asm(2
8、)鏈接目標(biāo)