2011-10-11 34 views
8

me gustaría preguntar acerca de algo que estoy pensando para tratar con Visual Studio 2010.MS Visual Studio 2010 Cómo utilizar el asm archivo generado

estoy generando un archivo asm de archivo the.cpp mediante el establecimiento la opción de "Salida del ensamblador" en las propiedades del proyecto -> C/C++ -> Archivos de salida (/ FAs).

Mi pregunta es, ¿cómo puedo en el siguiente paso usar ese archivo .asm generado para volver a vincularlo sin usar el archivo .cpp, en caso de que quiera hacer algunas modificaciones dentro del archivo .asm y luego Vuelva a enlazar manteniendo las modificaciones que hice en el nivel de ensamblaje.

Sería muy útil si pudiera proporcionar los pasos exactos, incluida la configuración correcta que pueda necesitarse en las propiedades del proyecto.

+0

Primero debes compilarlo con ML, luego puedes ir al enlazador. Mira los parámetros de línea de comando de ML.EXE, nunca lo intenté en VS2010. –

+0

Puede usar el asm en línea en algunos casos – BlackBear

+0

Tenga cuidado si desea usar esto para algo más que experimentación/aprendizaje. La salida del ensamblador MSVC no funciona bien con C++ (manejo de excepciones en particular), y MS no admite listas de ensambles que no sean para "propósitos informativos". Consulte http://stackoverflow.com/questions/7488056/a-problem-with-cl-exe-and-ml-exe/7495413#7495413 –

Respuesta

1
+0

Gracias por su tiempo, pero ya conozco ese tutorial que describe otro caso, diferente al mío. Como ya dije, no quiero simplemente vincular una función escrita en asm. Puedo hacer esto fácilmente con asm en línea dentro del archivo .cpp. –

+0

No necesita el archivo cpp después de eso. I se compila utilizando ml.exe con un paso de compilación personalizado. – MartyTPS

+0

Como dije, en realidad estaba buscando una solución para usar todo el archivo .asm generado después de compilar una fuente en C++ (archivo cpp), y luego uso solo el asm generado para compilar de nuevo sin usar el cpp. Gracias. Ese tutorial específico, describe un caso en el que usa una función que escribió en asm junto con el archivo cpp, que es diferente de lo que yo quiero. Sin embargo, puedo usar ese tutorial para encontrar una solución personalizada para mi caso ya que he escrito mucho de mi código en .asm dentro del archivo cpp. –

0

lo hice recientemente. Aquí hay una repetición de la respuesta que di aquí compile-assembly-output-generated-by-vc. Resulta que todavía puedes hacer esto en el modo de 32 bits en MSVC2012, pero creo que el modo de 64 bits es inútil.

Para el modo de 32 bits, esto es lo que debes hacer.

Crear un proyecto vacío y un archivo de origen Source.cpp

#include <stdio.h> 
int main() { 
    printf("hello world\n"); 
    return 0; 
} 
  1. lamer el botón derecho en su proyecto y seleccione "Construir personalización" y seleccione
    masm como se describe aquí http://www.masm32.com/board/index.php?topic=9231.0
  2. Bajo C++/OutputFiles selecciona Salida de conjunto/FA
  3. Combina en modo de 32 bits Modo de liberación
  4. Cargue el archivo Source.asm en MSVC para que pueda verlo. No funcionará aún. Algunos cambios son todavía necesarios.
  5. En C++/Optimization desactive la optimización de todo el programa (quita /GL). Esto añade la línea INCLUDELIB MSVCRT
  6. en el enlazador/avanzado conjunto de la última opción "Imagen Tiene manejadores de excepciones seguro" para n (/SAFESEH:NO)
  7. Ahora usted debería tener un archivo Source.asm que hacer lo mismo que en Fuente. archivo cpp hizo. Copie Source.cpp desde el directorio de Release al mismo directorio que Source.cpp (para que no se elimine al compilar/limpiar).
  8. Agregar Source.asm (como un archivo existente) a los archivos de origen y eliminar Source.cpp desde la compilación.
  9. Reconstruya y debería ver "Hello World" sin tener que cambiar ninguna línea de ensamblaje a mano.

Lo he usado para funciones más complicadas. Normalmente lo hago en un módulo separado y uso extern "C" en el nombre de la función para eliminar el cambio de nombre de C++.