適用於 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++ 專案

  1. 在 [方案總管] 中選取專案。 在功能表列上,選擇 [專案]、[ 建置自訂專案 ]。

  2. 在 [ Visual C++ 建置自訂檔案 ] 對話方塊中,核取 masm(.targets,.props) 的核取方塊。 選擇 [ 確定 ] 以儲存您的選取專案並關閉對話方塊。

  3. 在功能表列上,選擇 [專案 ]、 [ 新增專案 ]。

  4. 在 [ 新增專案 ] 對話方塊中,選取 中央窗格中的 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]

另請參閱

Microsoft 巨集組譯工具參考