九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
匯編環(huán)境搭建 -- MASM32

背景

當(dāng)自己想使用C語言開發(fā)一個編譯器的時(shí)候,需要將文本內(nèi)容轉(zhuǎn)換為匯編語言,此時(shí)需要我們對匯編語言具有一定了解及簡單編寫程序,否則無法繼續(xù)進(jìn)行編譯器的編寫。

開發(fā)工具

此處使用MASM32開發(fā)工具,當(dāng)然也可以選用SASM, 此處由于并不深入學(xué)習(xí)且無兼容性考慮,因此此處選用MASM32工具。

下載

此處點(diǎn)擊Australia 1/2開始下載

圖1.png

安裝

  • 將下載后的安裝包解壓如下圖, 會有一個install.exe文件

    圖2.png

  • 雙擊install.exe文件,安裝即可。中間會有一步選擇安裝路徑,選擇自己想要安裝的盤符即可。

    注:此處的盤符影響之后的工作盤符,其他盤符可能無法鏈接到庫文件。

  • 安裝完成后,會在桌面出現(xiàn)如下圖所示的圖標(biāo)

    圖3.png

程序測試

  • 創(chuàng)建文件: File -> New, 然后Ctrl+S保存(此處的文件的路徑應(yīng)與剛剛安裝的盤符相同, 文件名格式為:xxx.asm)

  • 輸入下列代碼

.486.model flat, stdcall
option casemap :noneincludelib \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
  • 編譯

    點(diǎn)擊Project -> Assemble ASM file進(jìn)行編譯,編譯之后會在同級目錄下生成后綴名為obj的文件

  • 鏈接

    點(diǎn)擊Project -> Assemble && file進(jìn)行鏈接,鏈接之后會在同級目錄下生成后綴名為exe的文件

  • 運(yùn)行

    點(diǎn)擊Project -> Run Program, 出現(xiàn)如下圖結(jié)果

    圖4.png

編碼框架

.486.model flat, stdcall

option casemap:none

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\gdi32.libinclude \masm32\include\kernel32.incinclude \masm32\include\user32.incinclude \masm32\include\gdi32.incinclude \masm32\include\windows.inc.data// 變量.code
start:// 代碼end start

接下來分別解釋下每行代表什么:

  • .486

    告訴匯編器應(yīng)該生成486處理的偽代碼,也可以使用.386。

  • .model flat, stdcall

    使用平坦內(nèi)存模式并使用stdcall調(diào)用習(xí)慣(stdcall指函數(shù)的參數(shù)從右往左壓入,即最后的參數(shù)先壓入,且函數(shù)在結(jié)束時(shí)清棧),這幾乎是所有Windows API函數(shù)和dll的標(biāo)準(zhǔn)

  • option casemap :none

    控制字符的映射為大寫。為使“Windows.inc”文件正常工作,這里應(yīng)用為“none”

  • includelib include

    為了使用Windows API的函數(shù), 需要導(dǎo)入dll文件。這里由靜態(tài)庫(.lib)完成,它們使系統(tǒng)能在內(nèi)存的動態(tài)基地址處動態(tài)的載入dll。Includelib \masm32\lib\kernel32.lib我們不只需要包含靜態(tài)庫,還需要包含.inc文件,這是由l2inc工具根據(jù)庫文件自動生成的。include \masm32\include\kernel32.inc 特殊的包含文件Windows.inc,其中包含了Windows API的所有常量和結(jié)構(gòu)的定義。

  • .data

    定義變量的地方

  • .code

    代碼區(qū)域

  • start ... end start

    表示程序的開始/結(jié)束標(biāo)簽。這里不一定要用start, 可以使用任何單詞和“end”語句后相同的標(biāo)簽。

作者:_凌浩雨
鏈接:https://www.jianshu.com/p/e082912ef8ef
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
學(xué) Win32 匯編[22]
見招拆招《Windows程序設(shè)計(jì)》(七)
使用Code::Blocks編譯VC程序(一)
在VC++6.0下設(shè)置GDI+(最簡介的方法)
學(xué) Win32 匯編[4]: 使用 Debug 輸出測試結(jié)果
學(xué) Win32 匯編[28]---跳轉(zhuǎn)指令
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服