MASM para x64 (ml64.exe)

Visual Studio incluye las versiones hospedadas de 32 y 64 bits de MASM (el ensamblador de macro de Microsoft) para el código x64 de destino. Denominado ml64.exe, es el ensamblador que acepta el lenguaje ensamblador x64. Las herramientas de línea de comandos de MASM se instalan al elegir una carga de trabajo de C++ durante Visual Studio instalación. Las herramientas de MASM no están disponibles como descarga independiente. Para obtener instrucciones sobre cómo descargar e instalar una copia de Visual Studio, vea Instalar Visual Studio. Si solo desea las herramientas de línea de comandos, no el IDE completo, descargue las herramientas de compilación para Visual Studio.

Para usar ml64.exe en la línea de comandos, inicie un símbolo del sistema para desarrolladores para destinos x64. Un símbolo del sistema para desarrolladores establece la ruta de acceso necesaria y otras variables de entorno. Para obtener información sobre cómo iniciar un símbolo del sistema para desarrolladores, vea Compilación de código de C/C++ en la línea de comandos.

Para obtener información sobre ml64.exe de línea de comandos, vea ML y ML64 Command-Line referencia.

El ensamblador en línea o el uso de la ASM palabra clave no se admiten para destinos x64 o ARM64. Para portabilidad del código x86 que usa el ensamblador en línea a x64 o ARM64, puede convertir el código a C++, usar intrínsecos del compilador o crear archivos de origen del lenguaje ensamblador. El compilador de Microsoft C++ admite intrínsecos para permitirle usar instrucciones de función especial, por ejemplo, con privilegios, examen de bits o prueba, entrelazados, entrelazados, entre plataformas, lo más cerca posible de una manera multiplataforma. Para obtener información sobre los intrínsecos disponibles, vea Intrínsecos del compilador.

Agregar un archivo de lenguaje ensamblador a un proyecto Visual Studio C++

El Visual Studio de proyectos admite archivos de lenguaje ensamblador creados mediante MASM en los proyectos de C++. MASM es totalmente compatible con los archivos de origen del lenguaje ensamblador x64 y los compila en archivos de objeto. A continuación, puede vincular estos archivos de objeto al código de C++ creado para destinos x64. Es una manera de superar la falta de un ensamblador en línea x64.

Para agregar un archivo de lenguaje ensamblador a un proyecto Visual Studio C++

  1. Seleccione el proyecto en el Explorador de soluciones. En la barra de menús, elija Project, Compilar personalizaciones.

  2. En el Visual C++ cuadro de diálogo Compilar archivos de personalización, active la casilla situada junto a masm(.targets,.props). Elija Aceptar para guardar la selección y cerrar el cuadro de diálogo.

  3. En la barra de menús, elija Project, Agregar nuevo elemento.

  4. En el cuadro de diálogo Agregar nuevo elemento, seleccione Archivo de C++ (.cpp) en el panel central. En el control De edición de nombre, escriba un nuevo nombre de archivo que tenga una extensión en lugar de .cpp . Elija Agregar para agregar el archivo al proyecto y cerrar el cuadro de diálogo.

Cree el código de lenguaje ensamblador en .asm el archivo que ha agregado. Al compilar la solución, se invoca el ensamblador MASM para ensamblar el archivo en un archivo de objeto que, a continuación, se .asm vincula al proyecto. Para facilitar el acceso a los símbolos, declare las funciones del ensamblador como en el código fuente de C++, en lugar de usar las convenciones de decoración de nombres de C++ en los archivos de origen del lenguaje extern "C" ensamblador.

Directivas específicas de ml64

Puede usar las siguientes directivas específicas de ml64 en el código fuente del lenguaje ensamblador que tiene como destino x64:

La PROC directiva también se ha actualizado para su uso con ml64.exe.

Modo de dirección de 32 bits (invalidación del tamaño de dirección)

MASM emite la invalidación 0x67 de tamaño de dirección si un operando de memoria incluye registros de 32 bits. Por ejemplo, los ejemplos siguientes hacen que se emita la invalidación de tamaño de dirección:

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]

MASM supone un direccionamiento de 64 bits si un desplazamiento de 32 bits aparece solo como operando de memoria. Actualmente no se admite el direccionamiento de 32 bits con estos operandos.

Por último, la combinación de tamaños de registro dentro de un operando de memoria, como se muestra en el código siguiente, genera un error.

mov eax, DWORD PTR [rcx*2+r10d]
mov eax, DWORD PTR [ecx*2+r10+0100h]

Vea también

Referencia de Microsoft Macro Assembler