2012-06-28 17 views
5

Sto provando a compilare un vecchio progetto software C++ in Code :: Blocks utilizzando il compilatore gcc, e dopo aver risolto alcuni altri problemi, ho colpito un muro: il progetto ha un file con stile Intel inline scritto comeAssemblaggio in linea Intel in stile gcc

_asm { 
    code here 
} 

e il compilatore si rifiuta di compilarlo con "l'errore: '_asm' non è stato dichiarato in questo ambito".

Ho passato un po 'di tempo a cercare su Google le soluzioni, ma le uniche che posso trovare sono aggiungere -masm=intel alle opzioni di compilazione (che ho provato e non riesco a far funzionare), o per convertire il codice a asm ("code here"); (che non è fattibile a causa della mera quantità di ASM). Qualcuno sa come posso ottenere gcc per compilare questo codice così com'è o dovrei rinunciare e usare un compilatore diverso?

+0

Come creare una macro e quindi utilizzare uno script per sostituire le linee _asm con la macro. Quindi ottieni una migliore indipendenza del compilatore. – daramarak

+0

Una macro sarebbe un'idea, anche se non l'ho mai usata prima quindi dovrei capire anche quello (nonostante quello che la mia domanda ha fatto sembrare, in realtà sono praticamente un noob completo con questa roba = /) . Inoltre, le routine asm sono collegate con etichette o qualcosa ('_asm {\ n code here \ n} L01: __asm ​​...'), e non sono sicuro di come gestirlo. – Dinoguy1000

+0

Il codice non verrà compilato così com'è, sarà necessario modificarlo per farlo compilare con gcc (o usare invece MSVC). –

risposta

2

GCC utilizza un very different syntax per assemblatore in linea, quindi non sarà in grado di gestirlo con cambiamenti banali. Vedo le seguenti opzioni:

  1. riscrivere tutto nella sintassi GCC o come codice C
  2. Fare qualche script per tradurre in sintassi GCC (compito non banale)
  3. compilare il codice con qualsiasi compilatore è stato scritto per (MSVC?)
+0

L'opzione 2 è incredibilmente ottimista. Dimenticalo! – TonyK

+0

L'opzione 1 non è un'opzione; il file in questione è composto interamente da asm e pesa 83 kb, con diverse centinaia di funzioni. Sembra che dovrò solo cambiare i compilatori, quindi. – Dinoguy1000

+1

Qualcuno ha effettivamente fatto l'Opzione 2, si chiama 'intel2gas', l'ho usato in operazioni di porting simili. –

0

Semplicemente non è possibile ottenere gcc per compilare il codice "così com'è". Se hai bisogno di compilare questa cosa usando gcc, devi riscrivere il codice, in C++ o gcc-compatibile asm. Se c'è davvero un sacco di codice assembly - ad esempio 200 o più istruzioni - potrebbe essere utile imparare la sintassi dell'assembler gcc; se no, scrivilo in C++.

+0

Vedi il mio commento sulla risposta di Igor; la riscrittura non è un'opzione in questo caso perché ci sono migliaia di istruzioni (200 sarebbe un bel passo indietro!). – Dinoguy1000

Problemi correlati