1. 程式人生 > >Win32組合語言學習筆記>>第二課:編寫第一個Win32彙編程式

Win32組合語言學習筆記>>第二課:編寫第一個Win32彙編程式

本節課主要是編譯連線一段寫好的程式碼:

程式執行如下:


程式碼:

.386
.model flat,stdcall
option casemap:none

include C:\masm32\include\windows.inc
include C:\masm32\include\user32.inc
includelib C:\masm32\lib\user32.lib
include C:\masm32\include\kernel32.inc
includelib C:\masm32\lib\kernel32.lib

.data

szCaption	db	'我的第一個彙編程式',0
szText      db	'Hello World!',0

.code

start:
	invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
	invoke ExitProcess,0
end start


一、編譯、連結程式

       切換到源程式目錄(當然你也可以在命令列顯示加上你的源程式的路徑)

    編譯:    Ml /c /coff 1.asm
    連線:    Link /subsystem:windows 1.obj
當然你還可以用MASM32視覺化來操作,我的系統是win7的,用MASM32先編譯直接就給我報了個:error RC1110:could not open rsrc.rc  
鬱悶,然後就直接:Rebulid ALl ,這樣就一切OK.不知道為什麼。

二、模式定義

        .386
        .model flat,stdcall
         option casemap:none
.386語句是組合語言的偽指令,告訴編譯器使用的是386指令集。比如還有.8086,.186,.286,.386/.386p,.
486/.486p等等。後面帶p的表示程式中可以使用特僅指令,由於我們寫的是Win32程式,不會用到特僅指令,所
以定義.386就夠了,如果要編寫驅動程式的話,就需要用到特僅指令,這時就要定義成.386p。
model語句的格式

.model 記憶體模式[,語言模式][,其他模式]

記憶體模式的定義影響最後生成的可執行檔案,可執行檔案的規模從小到大,可以有很多種型別

模    式

內 存 使 用 方 式

tiny

small

medium

compact

large

huge

flat

用來建立 .com檔案,所有的程式碼、資料和堆疊都在同一個64 KB段內

建立程式碼和資料分別用一個64 KB段的 .exe檔案

程式碼段可以有多個64 KB段,資料段只有一個64 KB段

程式碼段只有一個64 KB段,資料段可以有多個64 KB段

程式碼段和資料段都可以有多個64 KB段

同large,並且資料段中的一個數組也可以超過64 KB

Win32程式使用的模式,程式碼和資料段使用同一個4 GB段

Stdcall是函式呼叫約定:引數從右向左壓棧,由被呼叫函式平衡堆疊
option casemap:none,程式中的大小寫敏感 

三、段的定義

       .386

.model flat,stdcall

option casemap:none

  <一些include語句>

.data

  <一些字串、變數定義>

.code

  <程式碼>

  <開始標號>

     <其他語句>

end 開始標號

四、程式的入口與結束

.code

start:

end start

五、什麼是API函式

API(Application Programming Interface,應用程式程式設計介面)

API函式包含在Windows系統目錄下的動態連線庫檔案中(如User32.dll,GDI32.dll,Shell32.dll等等)。.

我們在軟體開發的過程中,經常會使用到很API函式,比如MessageBox就是一個API函式,這個API函式

的功能就是彈出一個對話方塊。