vs 2019編寫匯編並運行調試


==============分割線============

~最簡單的(C中內嵌匯編代碼):在VS的C++文件里直接使用__asm{} 直接寫匯編代碼.

http://blog.csdn.net/sinat_27382047/article/details/53968622

 

~偷個懶寫匯編作業(C語言生成匯編代碼)或者研究一下生成的匯編代碼

http://blog.csdn.net/sinat_27382047/article/details/72810726

 

~反匯編介紹(直接查看c中某些代碼的匯編代碼):

http://blog.csdn.net/sinat_27382047/article/details/72810788

 

~匯編代碼在vs上的使用方法(配置完的VS並不能正常運行平時能在dosbox上運行的匯編語句):

http://blog.csdn.net/sinat_27382047/article/details/72830040

↑↑↑↑↑↑(你們想要的純匯編hello world)↑↑↑↑↑

 

==============分割線============

 

 

正片兒:
插件
 

vs2015的匯編語法高亮插件(安裝就行)這玩意找了我很久= =

http://download.csdn.net/detail/fhw_bin_dl/9724391

**其實AsmHighlighter高亮插件非常好弄的,在VS2017 工具->擴展和更新->選擇聯機->搜索AsmHighlighter,然后安裝就行了【感謝下方評論中的OringeEd君】

 

過程【這是小事,vs這一系列都可以照葫蘆】
 

一、建項目
1.建一個空項目,必須先建空項目,改現成的C++項目為assembler項目可能會造成編譯不過.


 

2.選中項目右鍵 “生成自定義”,選擇MASM生成規則.


 

 

二、添加及設定源文件
3.選中源文件右鍵-》添加-》新建項


此處后綴名是匯編的.asm

4.選中項目右鍵-》屬性-》鏈接器-》系統-》 子系統選 “控制台(SUBSYSTEM:CONSOLE)”


5.選中項目右鍵-》屬性-》鏈接器-》高級-》 入口點 填 "main"

 

三、測試代碼編譯運行:
(可以看到,如果安裝了高亮插件,不僅注釋可以用了,代碼也有高亮提示了)

最后,輸出,調試時選擇菜單 調試-》窗口-》寄存器 就能看到寄存器值。(這樣,就不至於苦逼地用指令-ip一步步看了吧~)


 

 
代碼【這事兒可深了……】
先上那位大神可以過的代碼
 
TITLE Add and Subtract              (AddSub.asm)
 
; This program adds and subtracts 32-bit integers.
; Last update: 2/1/02
 
 
INCLUDELIB kernel32.lib
 
.MODEL flat,stdcall
 
;.code
ExitProcess PROTO,              ; exit program
dwExitCode:DWORD        ; return code
 
 
.data
.code
main PROC
 
    mov eax,10000h        ; EAX = 10000h
    add eax,40000h        ; EAX = 50000h
    sub eax,20000h        ; EAX = 30000h
 
    push 0h
    call ExitProcess
 
main ENDP
END main
關於代碼的討論:https://blog.csdn.net/Alisebeast/article/details/79861177
 

   

 

感謝以下找過的對我有用的帖子:
——來自貼吧的嘲諷~
http://tieba.baidu.com/p/4827889049

——高亮插件(asmhighlighter官網?)

http://asmhighlighter.codeplex.com/

——求高亮插件的帖子

 http://bbs.csdn.net/topics/391043876

——[匯編]_[初級]_[VS2010搭建匯編開發環境win32和x64](過程部分基本如此帖所做)

http://blog.csdn.net/infoworld/article/details/45085415

——vs2010的插件英文教程

http://kipirvine.com/asm/4th/index.html【《Intel匯編語言程序設計(第4版)》作者網址】

http://kipirvine.com/asm/gettingStartedVS2015/index.htm#tutorial32(貌似這就是所有參考的源頭,很全)

http://kipirvine.com/asm/gettingstartedvs2010/#syntax (大佬jie匯介紹高亮插件)

(↑以上都是這位大佬寫的!)

http://www.deconflations.com/2011/masm-assembly-in-visual-studio-2010/

 

 

=========分割線====2018.2.10============
VS2017寫匯編教程(親測可用,很順暢,做到了上文中“直接一個f5就完事”,沒有ml.exe的錯誤):

http://blog.csdn.net/maguanzhan7939/article/details/78608345

【這樣 就不用masm for windows那樣的收費ide了~還比那個逼格高】

 

——一些源網:

http://www.masm32.com/download.htm (masm32)

https://archive.codeplex.com/?p=asmhighlighter  (asmhighlighter)

 

===========以下為廣告,想省事的可以來我這里2C幣下載~===================

不想裝masm32(上圖那貨)只想要庫的可以下我放的鏈接(內含一套 高亮插件+要用到的masm庫):

http://download.csdn.net/download/sinat_27382047/10248253

 
————————————————

原文鏈接:https://blog.csdn.net/sinat_27382047/article/details/70339455

 

----------------------------------------------------------------------------------------------------------------------------------------------


1. 新建個 Visual C++ 的空項目

關閉 [安全開發生命周期(SDL)檢查],並選擇空項目

2.生成依賴性


選擇 masm 依賴項並生成 

(注意:若先創建了 asm 文件再生成依賴項,asm 文件是不會被匯編軟件編譯的!解決方案在最后!)

3.新建 asm 匯編文件

4.編寫匯編語言

        .code            ;代碼段      !64 位沒有 .model 宏指令,無法設置內存模型和生成的代碼風格!
main proc                ;main函數開始
    
    mov rax, 120
    add rax, 34
    sub rax, 130
 
    ret
 
main endp                ;main函數結束
end
                    ;masm x64 沒有指定入口點的宏指令!
關於 masm x64 沒有指定入口點的宏指令 的問題,會在最后的參考博客中給出鏈接(國外論壇和微軟官方的解答)

5.將調試器位數換成 x64

6.選擇 項目->屬性 [配置屬性->連接器->高級[入口點   輸入您想入口的函數名]]

4 步驟中的匯編代碼,我用 main 當作入口函數,所以這里填入的是 main

若想讓入口點為 a 函數,即下面貼的匯編代碼,則在入口點處填個 a (表示 a 函數是程序的入口點)

        .code            ;代碼段     !64 位無法使用 .model 宏指定內存模型和生成的代碼風格!
a proc                        ;a函數開始
    
    mov rax, 120
    add rax, 34
    sub rax, 130
 
    ret
 
a endp                        ;a函數結束
end


7.在第一條語句打下斷點,然后執行程序

8.在 調試->窗口->打開寄存器、內存、反匯編 之類的信息窗口(根據需要選擇)

若沒有這些選項,說明您沒有(調試)運行程序 參照第七條

9.選擇藍圈中不同的執行方式,來調試您的匯編程序

提示:在上圖左下 [寄存器] 顯示框中,可右鍵選擇您想顯示的寄存器

結束


可能遇到問題的解決方案:(遇到其他問題,請留言,我會找解決方法)

一. asm 文件沒有被編譯

 原因:若先創建了 asm 文件再生成依賴項,已創建的 asm 文件是不會被匯編軟件編譯的,已創建的 asm 文件的屬性是不能被編譯的屬性

    ①打開 .asm 文件的的屬性

    ②在常規中更改 項選項 位 Microsoft Macro Assembler

二. error LNK2005: main 已經在 a.obj 中定義


( main 是您定義的入口點函數,若是定義的入口點是函數 a,則異常是 error LNK2005: main 已經在 *.obj 中定義)

    原因:在一個項目里定義了多個 asm 文件,並具有相同的入口函數

    解決方案1:用項目分割不同的 asm 文件

    解決方案2:不同的 asm 文件定義不同的函數入口點,運行相應匯編程序時,照着步驟六修改項目的程序入口點為相應文件的入口函數


三. 為什么我使用中斷會觸發異常

    原因:Windows10 上的程序是運行在 CPU 保護模式下的,在此模式下只能觸發系統定義的軟中斷,無法觸發硬中斷,若想觸發硬中斷,請使用 DosBox 模擬 CPU 實模式


推薦書籍:

《現代x86匯編語言程序設計》

《匯編語言:基於x86處理器》

參考博文:

Visual Studio 2017 asm 高亮插件:

https://blog.csdn.net/sinat_27382047/article/details/70339455#comments

http://blog.csdn.net/maguanzhan7939/article/details/78608345

masm 宏定義規則:

https://msdn.microsoft.com/en-us/library/wxy1fb5k.aspx

關於 masm x64 沒有指定入口點的宏指令 的問題:

https://docs.microsoft.com/zh-cn/cpp/assembler/masm/masm-for-x64-ml64-exe

https://social.msdn.microsoft.com/Forums/vstudio/en-US/2107f634-1152-4a85-ae48-0d580aaf3f02/why-does-64bit-masm-not-accept-an-entry-point-address-on-the-end-directive?forum=vcgeneral

推薦閱讀:

使用 Visual Studio 2017 寫純 32 位匯編(intel 風格)

https://blog.csdn.net/alisebeast/article/details/79875393
————————————————
原文鏈接:https://blog.csdn.net/Alisebeast/article/details/79875620


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM