c语言编译器masm,汇编环境搭建 -- MASM32
背景
當自己想使用C語言開發一個編譯器的時候,需要將文本內容轉換為匯編語言,此時需要我們對匯編語言具有一定了解及簡單編寫程序,否則無法繼續進行編譯器的編寫。
開發工具
此處使用MASM32開發工具,當然也可以選用SASM, 此處由于并不深入學習且無兼容性考慮,因此此處選用MASM32工具。
下載
此處點擊Australia 1/2開始下載
圖1.png
安裝
將下載后的安裝包解壓如下圖, 會有一個install.exe文件
圖2.png
雙擊install.exe文件,安裝即可。中間會有一步選擇安裝路徑,選擇自己想要安裝的盤符即可。
注:此處的盤符影響之后的工作盤符,其他盤符可能無法鏈接到庫文件。
安裝完成后,會在桌面出現如下圖所示的圖標
圖3.png
程序測試
創建文件: File -> New, 然后Ctrl+S保存(此處的文件的路徑應與剛剛安裝的盤符相同, 文件名格式為:xxx.asm)
輸入下列代碼
.486
.model flat, stdcall
option casemap :none
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\msvcrt.lib
includelib \masm32\lib\masm32.lib
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\gdi32.inc
include \masm32\include\windows.inc
include \masm32\include\msvcrt.inc
include \masm32\include\masm32.inc
include \masm32\macros\macros.asm
.data
.code
start:
print chr$("Hello Wordld!")
print chr$(" ",13,10)
mov eax, sval(input("Enter any press to continue..."))
end start
編譯
點擊Project -> Assemble ASM file進行編譯,編譯之后會在同級目錄下生成后綴名為obj的文件
鏈接
點擊Project -> Assemble && file進行鏈接,鏈接之后會在同級目錄下生成后綴名為exe的文件
運行
點擊Project -> Run Program, 出現如下圖結果
圖4.png
編碼框架
.486
.model flat, stdcall
option casemap:none
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\gdi32.lib
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\gdi32.inc
include \masm32\include\windows.inc
.data
// 變量
.code
start:
// 代碼
end start
接下來分別解釋下每行代表什么:
.486
告訴匯編器應該生成486處理的偽代碼,也可以使用.386。
.model flat, stdcall
使用平坦內存模式并使用stdcall調用習慣(stdcall指函數的參數從右往左壓入,即最后的參數先壓入,且函數在結束時清棧),這幾乎是所有Windows API函數和dll的標準
option casemap :none
控制字符的映射為大寫。為使“Windows.inc”文件正常工作,這里應用為“none”
includelib include
為了使用Windows API的函數, 需要導入dll文件。這里由靜態庫(.lib)完成,它們使系統能在內存的動態基地址處動態的載入dll。Includelib \masm32\lib\kernel32.lib我們不只需要包含靜態庫,還需要包含.inc文件,這是由l2inc工具根據庫文件自動生成的。include \masm32\include\kernel32.inc 特殊的包含文件Windows.inc,其中包含了Windows API的所有常量和結構的定義。
.data
定義變量的地方
.code
代碼區域
start ... end start
表示程序的開始/結束標簽。這里不一定要用start, 可以使用任何單詞和“end”語句后相同的標簽。
總結
以上是生活随笔為你收集整理的c语言编译器masm,汇编环境搭建 -- MASM32的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python网页抓取、模拟登录
- 下一篇: cxGrid 在 GridMode =