==============分割線============
~最簡單的(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