匯編語(yǔ)言編程初步

匯編語(yǔ)言編程初步

ID:43522731

大小:251.00 KB

頁(yè)數(shù):33頁(yè)

時(shí)間:2019-10-09

匯編語(yǔ)言編程初步_第1頁(yè)
匯編語(yǔ)言編程初步_第2頁(yè)
匯編語(yǔ)言編程初步_第3頁(yè)
匯編語(yǔ)言編程初步_第4頁(yè)
匯編語(yǔ)言編程初步_第5頁(yè)
資源描述:

《匯編語(yǔ)言編程初步》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、第15章Windows匯編語(yǔ)言編程初步15.1Windows基礎(chǔ)15.2Win32匯編源程序的格式15.3Win32匯編可執(zhí)行文件的生成15.4Win32匯編基本語(yǔ)法15.5創(chuàng)建Windows下的窗口程序15.1Windows基礎(chǔ)1.Windows的內(nèi)存管理Windows操作系統(tǒng)為每一個(gè)應(yīng)用程序建立一個(gè)4GB的線(xiàn)性空間。線(xiàn)性空間中只包含該應(yīng)用程序的數(shù)據(jù)段和代碼段,操作系統(tǒng)使用的代碼和數(shù)據(jù)(如全局描述符表GDT,局部描述符表LDT與頁(yè)表等)以及一些共享代碼和數(shù)據(jù)等。2.Win32匯編的內(nèi)存尋址與實(shí)模式的匯編相比,Win32匯編對(duì)內(nèi)存數(shù)據(jù)的訪(fǎng)問(wèn)更加方便。(2)Wind

2、ows操作系統(tǒng)不僅已經(jīng)預(yù)先為要運(yùn)行的用戶(hù)應(yīng)用程序的代碼段、數(shù)據(jù)段和堆棧段設(shè)置好描述符,規(guī)定這些段的的段基址都為0,段界限都為FFFFFFFFH。而且程序開(kāi)始執(zhí)行時(shí),CS,DS,ES,SS里存放的選擇子已經(jīng)指向正確的描述符,程序員不需要給這些段寄存器賦值。在整個(gè)程序運(yùn)行期間,程序員也不應(yīng)該修改這些段寄存器的值。(1)在Windows系統(tǒng)中,每個(gè)應(yīng)用程序的整個(gè)4GB線(xiàn)性地址空間都作為一個(gè)段。代碼段和數(shù)據(jù)段/堆棧段的空間統(tǒng)一的,都是00000000H~FFFFFFFFH。在這個(gè)4GB的地址空間中,一部分用來(lái)存放程序,一部分作為數(shù)據(jù)區(qū),一部分作為堆棧,另外還有一部分被系統(tǒng)

3、使用。這些部分的地址區(qū)域是不重合的。3.Windows下的中斷和異常(1)為了系統(tǒng)的安全,運(yùn)行在特權(quán)級(jí)3的應(yīng)用程序是不能像工作在實(shí)模式下一樣,自己來(lái)編寫(xiě)中斷服務(wù)子程序,也不能通過(guò)修改中斷描述符表來(lái)調(diào)用系統(tǒng)提供的中斷服務(wù)子程序。(2)在Windows操作系統(tǒng)中,使用Windows提供的應(yīng)用程序編程接口(API)來(lái)代替中斷服務(wù)子程序提供的系統(tǒng)功能4.Windows系統(tǒng)下的I/O保護(hù)應(yīng)用程序執(zhí)行時(shí),對(duì)端口是不能直接進(jìn)行訪(fǎng)問(wèn)的,也不能使用STI,CLI中斷允許和禁止指令。15.2Win32匯編源程序的格式15.2.1源程序結(jié)構(gòu).586 .MODELFLAT,STDCALL

4、.OPTIONCASEMAP:NONE .DATA <定義有初始化值的變量> .DATA? <定義未初始化值的變量> .CONST <定義常量> .CODE <標(biāo)號(hào)> <代碼> ..... END<標(biāo)號(hào)>1.方式選擇偽指令.586是一個(gè)匯編語(yǔ)言偽指令,含義和DOS匯編相同.2.內(nèi)存模式選擇偽指令.MODEL是用來(lái)指定內(nèi)存模式的偽指令。.MODELFLAT匯編程序自動(dòng)為各種段寄存器做如下段約定:ASSUMECS:FLAT,DS:FLAT,SS:FLAT,ES:FLATSTDCALL告訴匯編程序參數(shù)的傳遞約定。Win32匯編語(yǔ)言采用STDCALL格式。STDCALL格

5、式參數(shù)傳遞順序是從右到左,即最右邊的參數(shù)最先壓棧,由被調(diào)用者(子程序)恢復(fù)堆棧指針。3.OPTION語(yǔ)句OPTIONCASEMAP:TYPE說(shuō)明程序中的變量和子程序名是否對(duì)大小寫(xiě)敏感,即區(qū)分大小寫(xiě)。由于WindowsAPI函數(shù)是區(qū)分大小寫(xiě),選項(xiàng)應(yīng)設(shè)置為“OPTIONCASEMAP:NONE”。4.段定義偽指令WIN32中只包含代碼段和數(shù)據(jù)段:DATA和CODE其中數(shù)據(jù)段又分為三種.DATA.DATA?.CONST.DATA定義已初始化的變量。這些變量的值在程序的執(zhí)行中可以被更改。.DATA?定義未初始化的變量。.CONST定義常量,這些常量在程序運(yùn)行過(guò)程中是不能更

6、改的.CODE定義代碼段。格式:END標(biāo)號(hào)功能:通知匯編程序,源程序到此結(jié)束,標(biāo)號(hào)所對(duì)應(yīng)的指令是程序的啟動(dòng)指令。5.匯編結(jié)束語(yǔ)句Win32匯編語(yǔ)言經(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匯編軟件的開(kāi)發(fā)可分源程序開(kāi)發(fā)和資源開(kāi)發(fā)兩部分匯編鏈接步驟(以教材例15.1為例)(1)?匯編源程序hello.asmml/c/coffhello.asm(2

8、)鏈接目標(biāo)

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。