windows visual-studio-2010 assembly

windows - Compilación de ensamblaje en Visual Studio



visual-studio-2010 assembly (4)

¿Cómo se compila el código ensamblador con Visual Studio?

Quiero compilar y ejecutar un archivo fuente de ensamblaje en Visual Studio 2010 .

code.asm un proyecto de Visual C ++ e code.asm un código de ensamblado en un archivo code.asm :

.586 ;Target processor. Use instructions for Pentium class machines .MODEL FLAT, C ;Use the flat memory model. Use C calling conventions .STACK ;Define a stack segment of 1KB (Not required for this example) .DATA ;Create a near data segment. Local variables are declared after ;this directive (Not required for this example) .CODE ;Indicates the start of a code segment. clear PROC xor eax, eax xor ebx, ebx ret clear ENDP END

Sin embargo, el problema es que cuando intentas compilar esto, obtienes:

LINK : error LNK2001: unresolved external symbol _mainCRTStartup

Fui y masm.targets personalización de compilación masm.targets (clic con el botón masm.targets en proyecto> Personalizaciones de compilación ...), pero fue en vano.


Línea de comando:

Compila el código con:

ml /c /Cx /coff code.asm

Obtienes code.obj como salida.

Enlace con:

link code.obj /SUBSYSTEM:console /out:go.exe /entry:clear

Ahora puede ejecutar go.exe.

Alternativamente, hazlo todo de una vez con:

ml /Cx /coff code.asm /link /SUBSYSTEM:console /link /entry:clear

Visual Studio (no resuelto)


El problema es que su código de ensamblaje es solo una función. Para compilar y vincular, necesita tener un procedimiento de inicio como Main en C / C ++. Puede especificar el símbolo de inicio especificando en su directiva END . Me gusta:

END clear

O, si lo desea, puede vincular el archivo .obj generado con el archivo .obj generado en C / C ++.


Me parece que las reglas de compilación personalizadas para archivos .asm no están habilitadas. Haga clic derecho en el proyecto, Custom Build Rules, marque "Microsoft Macro Assembler". Con la directiva "END clear" y la deshabilitación de los enlaces incrementales obtengo una compilación limpia.

Es diferente a partir de VS2010 :

  1. Haga clic derecho en Proyecto , Personalizaciones de compilación , marque " masm ".
  2. Haga clic con el botón derecho en el archivo .asm , Propiedades , cambie el Tipo de elemento a " Ensamblador de macro de Microsoft ".

Visual Studio incluye el ensamblador de macros MASM . Los fragmentos más pequeños de código ensamblador a menudo se escriben en ensamblaje en línea en un programa C o C ++.

Para integrar un archivo de ensamblador en un proyecto de Visual Studio, cree un proyecto de C / C ++ regular (línea de comando o GUI) y simplemente agregue un archivo que termine en .asm a la lista de archivos de origen.

Para especificar clear como el punto de entrada, siga estas instrucciones:

  1. Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para obtener detalles, consulte Establecer las propiedades del proyecto de Visual C ++.

  2. Haga clic en la carpeta del Enlazador.

  3. Haga clic en la página de propiedades Avanzadas.

  4. Modificar la propiedad del punto de entrada.

(Fue tomado de la documentación de Visual Studio ).

Puedo confirmar las instrucciones de Hans Passant. Además, de acuerdo con este artículo , si primero agrega la casilla de verificación "mas personalizaciones de construcción" y luego agrega el archivo, se reconocerá automáticamente como un archivo de ensamblador. Además, no especificar el nombre del punto de entrada en la directiva END, sino que especificarlo en la configuración del proyecto también me funciona.