乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       圖靈小跟班 2021-05-06

      背景

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

      開發(fā)工具

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

      下載

      此處點擊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
      • 編譯

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

      • 鏈接

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

      • 運行

        點擊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é)束時清棧),這幾乎是所有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ǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多