適用於 x64 的 MASM (ml64.exe)
Visual Studio 同時包含以 x64 程式代碼為目標的 32 位和 64 位裝載的 MASM 版本(Microsoft宏組合器)。 名為 ml64.exe,它是接受 x64 彙編語言的彙編程式。 當您在 Visual Studio 安裝期間選擇C++工作負載時,會安裝 MASM 命令行工具。 MASM 工具無法作為個別下載使用。 如需如何下載及安裝Visual Studio 複本的指示,請參閱 安裝Visual Studio。 如果您只想要命令行工具,而不是完整的 IDE,請下載適用於 Visual Studio 的建置工具。
若要在命令行上使用ml64.exe,請啟動 x64 目標的開發人員命令提示字元。 開發人員命令提示字元會設定必要的路徑和其他環境變數。 如需如何啟動開發人員命令提示字元的資訊,請參閱 在命令行上建置 C/C++程序代碼。
如需命令行選項ml64.exe的詳細資訊,請參閱 ML 和 ML64 命令行參考。
x64 或 ARM64 目標不支援內嵌組譯工具或使用 ASM
關鍵詞。 若要將使用內嵌組譯工具的 x86 程式代碼移植到 x64 或 ARM64,您可以將程式碼轉換成C++、使用編譯程式內部函數,或建立彙編語言原始程序檔。 Microsoft C++編譯程式支持內部函數,讓您盡可能使用特殊函式指示,例如特殊許可權、位掃描或測試、相互鎖定等等。 如需可用內部函數的資訊,請參閱 編譯程式內部函數。
將彙編語言檔案新增至 Visual Studio C++ 專案
Visual Studio 項目系統支援在C++專案中使用MASM所建置的彙編語言檔案。 MASM 完全支援 x64 彙編語言來源檔案,並將其建置成物件檔。 然後,您可以將這些物件檔連結至針對 x64 目標建置的 C++ 程式代碼。 這是克服缺少 x64 內嵌組合器的方法之一。
將彙編語言檔案新增至現有的 Visual Studio C++ 專案
在 [方案總管] 中選取專案。 在功能表欄上,選擇 [專案]、[建置自定義專案]。
在 [Visual C++ 建置自定義檔案] 對話框中,核取 masm(.targets,.props) 旁的複選框。 選擇 [ 確定 ] 以儲存您的選取項目並關閉對話框。
在功能表欄上,選擇 [專案]、[新增專案]。
在 [ 新增專案 ] 對話框中,選取 中央窗格中的 [C++檔案][.cpp ]。 在 [ 名稱 編輯] 控制件中,輸入延伸名
.asm
為 的新檔案名,而不是.cpp
。 選擇 [新增 ] 將檔案新增至您的專案,然後關閉對話方塊。
在您新增的檔案中 .asm
建立您的彙編語言程序代碼。 當您建置方案時,會叫用MASM組合器,將檔案組合 .asm
成物件檔,然後連結至您的專案。 若要讓符號存取變得更容易,請在C++原始程式碼中宣告您的組合器函 extern "C"
式,而不是在彙編語言原始程式檔中使用C++名稱裝飾慣例。
ml64 特定指示詞
您可以在以 x64 為目標的彙編語言原始碼中使用下列 ml64 特定指示詞:
指示 PROC
詞也已更新為搭配ml64.exe使用。
32 位位址模式 (地址大小覆寫)
如果記憶體操作數包含 32 位緩存器,MASM 會發出0x67位址大小覆寫。 例如,下列範例會導致發出位址大小覆寫:
mov rax, QWORD PTR [ecx]
mov eax, DWORD PTR [ecx*2+r10d]
mov eax, DWORD PTR [ecx*2+r10d+0100h]
prefetch [eax]
movnti rax, QWORD PTR [r8d]
如果 32 位位移位單獨顯示為記憶體操作數,MASM 會假設 64 位尋址。 目前不支援使用這類操作數進行32位尋址。
最後,混合記憶體操作數內的緩存器大小,如下列程式代碼所示,會產生錯誤。
mov eax, DWORD PTR [rcx*2+r10d]
mov eax, DWORD PTR [ecx*2+r10+0100h]
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應