1. 程式人生 > >使用 Visual Studio 2017 寫純 32 位彙編(intel 風格)

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

1. 新建個 Visual C++ 的空專案


關閉 [安全開發生命週期(SDL)檢查],並選擇空專案


2.生成依賴性


選擇 masm 依賴項並生成 

注意:若先建立了 asm 檔案再生成依賴項,asm 檔案是不會被彙編軟體編譯的!解決方案在最後!

3.新建 asm 彙編檔案



提醒:需要自己將 .cpp 改成 .asm

4.編寫組合語言


		.model flat, stdcall	;定義使用的記憶體模型和生成的程式碼風格
		.code			;標識程式碼段
main proc				;標識main函式開始
	
	mov eax, 0
	add eax, 34
	sub eax, 19
	
	ret                             ;類似 C 語言中的 return , 跳轉到 esp 指向的記憶體地址,並儲存 eax 的值
main endp				;標識main函式結束
end main				;指定程式入口點是main函式

就如字面上的意思,由於 end 可以指定程式入口函式,所以可以由下面的一段程式碼代替上面的:

		.model flat, stdcall	;定義使用的記憶體模型和生成的程式碼風格
		.code			;標識程式碼段
a proc					;標識a函式開始
	
	mov eax, 0
	add eax, 34
	sub eax, 19
	
	ret                             ;類似 C 語言中的 return , 跳轉到 esp 指向的記憶體地址,並儲存 eax 的值
					;此處會調轉到系統呼叫處
a endp					;標識a函式結束
end a					;指定程式入口點是a函式

所以大家應該明白,在 masm x32 彙編中,入口點是由 end 函式名 指定的

注意:彙編程式結束的時候,esp 指向的位置必須是和程式開始時一致(以正確跳轉會系統呼叫點)

5.在第一條語句打下斷點,然後執行程式


6.在 除錯->視窗->開啟暫存器、記憶體、反彙編 之類的資訊視窗(根據需要選擇)

   若沒有這些選項,說明您沒有(除錯)執行程式 參照第五條


6.選擇藍圈中不同的執行方式,來除錯您的彙編程式

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

結束

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

一. asm 檔案沒有被編譯

原因:若先建立了 asm 檔案再生成依賴項,已建立的 asm 檔案是不會被彙編軟體編譯的,已建立的 asm 檔案的屬性是不能被編譯的屬性


    ①開啟 .asm 檔案的的屬性


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


二. error LNK2005: [email protected] 已經在 a.obj 中定義

[email protected] 的 main 是您定義的入口點函式,若是函式名是 a,則異常是 error LNK2005:[email protected] 已經在 *.obj 中定義)

    原因:在一個專案裡定義了多個 asm 檔案,並具有相同的入口函式

解決方案1:用專案分割不同的 asm 檔案

    解決方案2:不同的 asm 檔案定義不同的函式入口點,執行相應彙編程式時,修改專案的程式入口點為相應檔案的入口函式

選擇 專案->屬性 [配置屬性->聯結器->高階[入口點   輸入您想入口的函式名]]

    無效解決方案:不同的 asm 檔案定義不同的函式入口點,系統將會隨機呼叫某個 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

推薦閱讀:

使用 Visual Studio 2017 寫純 64 位彙編(intel 風格)

https://blog.csdn.net/Alisebeast/article/details/79875620

相關推薦

使用 Visual Studio 2017 32 彙編intel 風格

1. 新建個 Visual C++ 的空專案關閉 [安全開發生命週期(SDL)檢查],並選擇空專案2.生成依賴性選擇 masm 依賴項並生成 (注意:若先建立了 asm 檔案再生成依賴項,asm 檔案是不會被彙編軟體編譯的!解決方案在最後!)3.新建 asm 彙編檔案提醒:需

使用 Visual Studio 2017 64 彙編intel 風格

1. 新建個 Visual C++ 的空專案關閉 [安全開發生命週期(SDL)檢查],並選擇空專案2.生成依賴性選擇 masm 依賴項並生成 (注意:若先建立了 asm 檔案再生成依賴項,asm 檔案是不會被彙編軟體編譯的!解決方案在最後!)3.新建 asm 彙編檔案4.編寫

Visual Studio 2017再現C語言經典例題

字母轉 密碼 .com 程序 visual http 。。 其中 com 1、編寫一個程序,輸入a、b、c這3個值,輸出其中最大者。 2、將“China”譯成密碼。密碼規律:用原來的字母後面第4個字母代替原來的字母。例如,字母A後面第4個字母是E,用E代替A,因此,C

visual studio 2017如何開啟 *.sdf 資料庫檔案 筆記

喜歡用asp.net web pages開發小型網站的同學是不是很鬱悶:1、webMatrix已經停止更新和支援,在最新的Win10裡經常出錯,已經是不能正常使用了;2、用web pages建的網站預設使用的是*.sdf資料庫檔案,但卻不能在VS2017裡直接開啟,看不到欄位

VS2010如何使用Visual Studio Online線上服務管理團隊資源線上TFS

前言         Visual Studio Online,也就是以前的Team Foundation Service,從名字可以看出這是一個團隊資源管理服務。在微軟的雲基礎架構中執行,無需安裝或配置任何伺服器,使用既有的IDE(如 Visual Studio、Eclipse 或 Xcode)都可以連線

使用Visual Studio一勞永逸式配置OpenGL開發環境GLFW3+GLAD

引子 OpenGL版本眾多,需要引入額外的第三方庫才能很好的滿足我們平時渲染的需求,對於剛開始學習的同學們比較麻煩。 我也多次遇到很多落後的配置教程,浪費了時間不說,也會自己技術和現代OpenGL的技術脫節。 在當前的時間點(2018年),學習OpenGL

Visual Studio 2017/例項/靜態

欄位舊稱->“成員變數” 與物件關聯的欄位亦稱為“例項欄位”或“例項變數” 與類關聯的欄位稱為“靜態欄位”或“靜態變數”,由static修飾; 例如: using System; nam

Qt 5.9.2在Windows 10 64和Microsoft Visual Studio 2017下的安裝與配置

配置環境Windows 10 64位,Microsoft Visual Studio 2017,Qt 5.9.2下載安裝包1.Microsoft Visual Studio 2017線上安裝包連結:ht

Visual Studio 2017各版本安裝包離線下載、安裝全解析

pla 離線文件 win10 unit splay and 文件下載 python擴展 erl 轉自 寂靜·櫻花雨 Visual Studio 2017各版本安裝包離線下載、安裝全解析 感謝IT之家網友 寂靜·櫻花雨 的投稿 關於Visual

Visual Studio 2017 調試 windows server 2016 Docker Container

search ini table 必須 報錯 img eve rate cor   網上很多文章都是在win10下,用Docker for windows工具進行Docker的安裝部署的。用知道windows server 2016已經原生支持Docker了,其window

windows Visual Studio 2017 編譯 HEVC cmake-3.8.1-win64-x64.msi 下載

color 找到 style des 當前 pen span 分享 自動 ttps://github.com/OpenHEVC/openHEVC 下載一 直接下載源碼(可選)或下載源碼包,我這裏下載的是源碼 打開 Visual Studio () 去 github

visual studio 2017 編譯v140 TRACKER : error TRK0005: Failed to locate: "CL.exe". 系統找不到指定的文件

生成 cnblogs fail alt 編譯器 track vc++ img 解決 原因可能是vs2017中配置v140 的編譯命令路徑有問題 解決方案: 用vs2017的在線安裝程序,選擇修改 進去後選擇單個組建,在編譯器、生成工具和運行時裏面把vc++2015.3……

Visual Studio 2017 for Mac

新版本 ont print eno web hidden contain visual upd Visual Studio 2017 for Mac Last Update: 2017/6/16 我們非常榮幸地宣布 Visual Studio 2017

visual Studio 2017 擴展開發《向Visual Studio菜單欄新增一個菜單》

下拉 pri package 安裝 void call class 記得 mov 最近有接觸到關於visual studio 2017 擴展的開發,特此記錄,也是為了督促自己去深入了解其原理。 開始開發Visual Studio 擴展,在這裏我安裝了visual studi

visual Studio 2017 擴展開發《綁定快捷鍵到菜單項》

映射 創建 con -a .com style binding visual 去掉 如何將鍵盤快捷方式映射到自定義按鈕,怎麽使用快捷鍵啟動自己創建的菜單,剛開始做的時候迷糊了,找了很久。可能也是因為剛開始做不是很明白,後面慢慢就懂了。其實非常簡單的。 很多快捷鍵已經在Vis

使用Visual Studio 2017開發Linux程序

div roo g++ window 不同 rom cto cpp 工作目錄 環境:   win7_x64旗艦版、VS2017企業版、VMware10.0.2、CentOS7   在CentOS7上首先需要安裝gcc、g++和gdbserver,這裏就不多說 一、安裝VS2

visual studio 2017 15.3.1中Xamarin.Forms SAP項目xaml沒有智能提示的解決方法

http itl images 目的 如果 sha sap 解決 提示 今天看到vs上有提示了可以更新到15.3.1版本,然後馬上更新了,結果悲劇了。更新以後ReSharper不能用了,好像跟vs2017有了沖突,不管是vs2017自帶的智能提示功能,還是ReS

Visual Studio 2017 Enterprise 發布 15.3.2 版,附離線安裝包下載。

安裝 net 離線 地址 2017年 out 全量 全部 lock Visual Studio 2017 Enterprise 更新至 15.3.2 ,本安裝包使用微軟原版安裝文件,配合layout指令全量下載後制作,內置中文語言包,包含 Visual Studio 201

Visual Studio 2017部署 webStrom開發的nodejs項目

images blog pro rom scrip 固定 cnblogs rip 分享 vs點擊文件--新建--項目--JavaScript--Node.js--通過現有Node.js代碼 wxxcx為nodejs項目根目錄,然後右擊整個項目--屬性:1.啟動目錄2.默認打

Visual Studio 2017 error: Unable to start program, An operation is not legal in the current state

strong state star intro https ogr enable introduce gin For me, the solution (workaround) is to turn off JavaScript debugging on Chrome, w