2012-06-28 24 views
5

Estoy tratando de compilar un viejo proyecto de software C++ en Code :: Blocks usando el compilador gcc, y después de solucionar algunos otros problemas, he topado con un muro: el proyecto tiene un archivo con estilo Intel ASM en línea escrita comoMontaje en línea estilo Intel en gcc

_asm { 
    code here 
} 

y el compilador se niega a compilarlo con "error: '_asm' no estaba declarado en este ámbito".

He pasado un tiempo buscando en Google buscando soluciones, pero las únicas que puedo encontrar son agregar -masm=intel a las opciones de compilación (que he intentado y no puedo poner en práctica), o convertir el código a asm ("code here"); (que no es factible debido a la gran cantidad de ASM). ¿Alguien sabe cómo puedo obtener gcc para compilar este código tal como está, o debería darme por vencido y usar un compilador diferente?

+0

¿Qué le parece generar una macro y, a continuación, utilizar una secuencia de comandos para reemplazar las líneas _asm con la macro. Entonces obtienes una mejor independencia del compilador. – daramarak

+0

Una macro sería una idea, aunque nunca he usado una antes, así que tendría que resolverlo también (a pesar de lo que mi pregunta hizo sonar, en realidad soy un novato completo con estas cosas = /) . Además, las rutinas asm están vinculadas con etiquetas o algo así ('_asm {\ n code here \ n} L01: __asm ​​...'), y no estoy seguro de cómo manejar eso. – Dinoguy1000

+0

El código no se compilará tal como está, deberá cambiarlo para que compile con gcc (o use MSVC en su lugar). –

Respuesta

2

GCC usa un very different syntax para el ensamblador en línea, por lo que no podrá manejarlo con cambios triviales. Veo las siguientes opciones:

  1. reescritura todo en la sintaxis GCC o como código C
  2. Hacer una secuencia de comandos para traducir a la sintaxis del CCG (tarea no trivial)
  3. compilar el código con cualquier compilador fue escrito para (MSVC?)
+0

La opción 2 es terriblemente optimista. ¡Olvídalo! – TonyK

+0

La opción 1 no es una opción; el archivo en cuestión consiste completamente de asm y pesa 83 kb, con varios cientos de funciones. Parece que tendré que cambiar los compiladores, entonces. – Dinoguy1000

+1

Alguien realmente hizo la Opción 2, se llama 'intel2gas', la he usado en esfuerzos de portabilidad similares. –

0

Simplemente no puede obtener gcc para compilar el código 'como está'. Si necesita compilar esto usando gcc, debe volver a escribir el código en C++ o en un asm compatible con gcc. Si realmente hay un montón de código ensamblador, digamos 200 instrucciones o más, puede valer la pena aprender la sintaxis del ensamblador gcc; si no, codifíquelo en C++.

+0

Ver mi comentario sobre la respuesta de Igor; reescribir no es una opción en este caso porque hay miles de instrucciones (¡200 sería un paso bastante agradable!). – Dinoguy1000

Cuestiones relacionadas