MASM for x64 (ml64.exe)

Visual Studio 包括 Microsoft 宏组装器的32位和64位托管版本, (Microsoft 宏组装器) 目标为 x64 代码。 命名 ml64.exe,它是接受 x64 组装器语言的汇编程序。 在 Visual Studio 安装过程中选择 c + + 工作负荷时,将安装 MASM 命令行工具。 MASM 工具不能单独下载。 有关如何下载和安装 Visual Studio 的副本的说明,请参阅安装 Visual Studio。 如果只需要命令行工具,而不是完整的 IDE,则下载Visual Studio 的生成工具

若要在命令行上使用 ml64.exe,请为 x64 目标启动开发人员命令提示。 开发人员命令提示设置所需的路径和其他环境变量。 有关如何启动开发人员命令提示的信息,请参阅 命令行上的生成 c/c + + 代码

有关 ml64.exe 命令行选项的信息,请参阅ML 和 ml64.exe Command-Line 引用

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. 在解决方案资源管理器中,选择项目。 在菜单栏上,依次选择 " Project"、"生成自定义"。

  2. 在 " Visual C++ 生成自定义文件 " 对话框中,选中 " masm (") 旁边的复选框。 选择 "确定" 以保存所做选择并关闭对话框。

  3. 在菜单栏上,依次选择 " Project"、"添加新项"。

  4. 在 " 添加新项 " 对话框中,在中间窗格中选择 " c + + 文件 ( .cpp) 。 在 " 名称 编辑控件" 中,输入具有 .asm 扩展名而不是的 .cpp 新文件名。 选择 " 添加 " 将文件添加到项目中,并关闭对话框。

在所添加的 .asm 文件中创建汇编程序语言代码。 生成解决方案时,将调用 MASM 组装器将文件组合 .asm 到对象文件中,然后将该文件链接到项目。 为了更轻松地访问符号,请在你的 c + + 源代码中将汇编程序函数声明为 extern "C" ,而不是在汇编程序语言源文件中使用 c + + 名称修饰约定。

ml64.exe 特定指令

可以在面向 x64 的汇编程序语言源代码中使用以下 ml64.exe 特定的指令:

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 宏汇编程序参考