MASM學習x86彙編語言 第一個程序

MASM學習x86彙編語言 第一個程序


一、本章準備工作

  • Windows環境,x86主機
  • 安裝MASM軟件
    下載地址:http://www.masm32.com/download.htm
    我這裡安裝到了D盤根目錄。

為方便後面命令行調用,安裝以後,可以把D:\masm32\bin目錄放到系統環境變量PATH裡。本章示例使用d:/masm32/qeditor.exe 可視化開發工具。

二、x86 處理器架構

MASM學習x86彙編語言 第一個程序

8086 的寄存器:

  • AX、BX、CX、DX通常用來存放一般性數據,被稱為通用寄存器。
  • 16位寄存器所能存儲的數據最大值為2162^{16}216-1 。
  • 8086 CPU的通用寄存器可以分為兩個獨立的8位寄存器使用。例: AX可分為AH和AL。

三、幾條簡單的彙編指令


MASM學習x86彙編語言 第一個程序


四、啟動qeditor 錄入測試程序

1. 源代碼

<code>.386                   ; 編譯器指令,使用386指令集
.model flat, stdcall   ; model彙編指令,程序的內存模式, flat是windows程序,沒有遠近指針,stdcall是windows函數用的參數方式,即參數從右向左傳遞
option casemap :none   ; 標籤是否區分大小寫
include \masm32\include\windows.inc     ; 包含了Win32 API 的一些常量和函數定義
include \masm32\include\kernel32.inc    ; 包含了後面使用的ExitProcess函數
include \masm32\include\masm32.inc      ; 包含了後面使用的StdOut函數,不是標準的Win32函數,由MASM提供
includelib \masm32\lib\kernel32.lib     ; 庫文件
includelib \masm32\lib\masm32.lib
.data
 HelloWorld db "Hello World!", 0        ; 定義使用的字符串常量,db代表define byte。最後跟一個NUL,表示ANSI字符集結束符
.code                                   ; 開始代碼區
start:                                  ; 所有的代碼要在start標籤後、end start前    
 invoke StdOut, addr HelloWorld         ; 調用函數StdOut,參數量HelloWorld的地址。注意StdOut是MASM提供的宏。其它編輯器裡可以使用WriteConsole之類win32函數代替。
 invoke ExitProcess, 0                  ; 調用ExitProcess
end start /<code>

保存文件。

2. 編譯

選擇菜單 Project-Assemble ASM file 進行編譯,生成obj文件:

MASM學習x86彙編語言 第一個程序

再選擇Link 鏈接文件,生成可執行文件:

MASM學習x86彙編語言 第一個程序

運行效果:

MASM學習x86彙編語言 第一個程序

3. 命令行編譯

<code>ml /c /Zd /coff hello.asm
link /SUBSYSTEM:CONSOLE hello.obj/<code>
MASM學習x86彙編語言 第一個程序

MASM學習x86彙編語言 第一個程序

也可以生成 hello.exe。

五、調用Windows API的版本

<code>.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
.data
 HelloWorld db "Hello World!", 0
.code
start:
 invoke MessageBox, NULL, addr HelloWorld, addr HelloWorld, MB_OK
 invoke ExitProcess, 0
end start/<code>

直接在菜單裡編譯運行:

MASM學習x86彙編語言 第一個程序

命令行編譯的話使用:

<code>ml /c /Zd /coff hellow.asm
link /SUBSYSTEM:WINDOWS hellow.obj/<code>

這裡SUBSYSTEM使用WINDOWS代替了CONSOLE,表示是一個Windows GUI程序。


分享到:


相關文章: