日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言编译器masm,汇编环境搭建 -- MASM32

發布時間:2023/12/9 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。