Comstackción de ensamblaje en Visual Studio

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

Quiero comstackr 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 comstackr esto, obtienes:

 LINK : error LNK2001: unresolved external symbol _mainCRTStartup 

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

Me parece que las reglas de comstackció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 comstackción limpia.

Es diferente a partir de VS2010 :

  1. Haga clic derecho en Proyecto , Personalizaciones de comstackció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 “.

Línea de comando:

Comstack 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)

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 progtwig 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 checkbox “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.

El problema es que su código de ensamblaje es solo una función. Para comstackr 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 ++.

Intereting Posts