Compartir a través de


MASM para x64 (ml64.exe)

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

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 Uso del conjunto de herramientas de Microsoft C++ desde la línea de comandos.

Para obtener información sobre opciones de línea de comandos de ml64.exe, consulte Referencia de la línea de comandos de ML y ML64.

El ensamblador insertado o el uso de la palabra clave ASM no se admite para destinos x64 o ARM64. Para portar el código x86 que usa ensamblador insertado a x64 o ARM64, puede convertir el código en 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 especiales, por ejemplo, con privilegios, análisis de bits o prueba, interbloqueados, etc., lo más cerca posible de una forma multiplataforma. Para obtener información sobre los intrínsecos disponibles, consulte Intrínsecos del controlador.

Adición de un archivo de lenguaje ensamblador a un proyecto de Visual Studio C++

El sistema de proyectos de Visual Studio admite archivos de lenguaje ensamblador creados mediante MASM en los proyectos de C++. MASM es totalmente compatible con archivos de código fuente X64 del ensamblador y los compila en archivos objeto. Después, puede vincular estos archivos objeto al código de C++ compilado para destinos x64. Es una manera de superar la falta de un ensamblador x64 insertado.

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

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

  2. En el cuadro de diálogo Archivos de personalizaciones de compilación de Visual C++, active la casilla situada junto a masm(.targets,.props). Seleccione Aceptar para guardar las selecciones y cerrar el cuadro de diálogo.

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

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

Cree el código de lenguaje ensamblador en el archivo .asm que ha agregado. Al compilar la solución, se invoca al ensamblador MASM para ensamblar el archivo .asm en un archivo objeto que, después, se vincula al proyecto. Para facilitar el acceso a símbolos, declare las funciones del ensamblador como extern "C" en el código fuente de C++, en vez de usar las convenciones de decoración de nombres de C++ en los archivos de origen del lenguaje 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 directiva PROC 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 del tamaño de dirección 0x67 si un operando de memoria incluye registros de 32 bits. Por ejemplo, los ejemplos siguientes hacen que se emita la invalidación del 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 asume el direccionamiento de 64 bits si un desplazamiento de 32 bits aparece solo, como operando de memoria. Actualmente no hay compatibilidad con 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]

Consulte también

Referencia de Microsoft Macro Assembler