2009-08-18 3 views

risposta

9

Corretto, non è ancora supportato in VS 2010 Beta 1. La mia ipotesi è che l'assemblaggio in linea sia troppo difficile da implementare: il modo in cui Microsoft lo ha implementato, si integra con il codice C circostante in modo che i dati possano fluire dentro e fuori dal codice C e il codice di colla appropriato viene automaticamente iniettato. Per questo, il compilatore C deve effettivamente capire il codice assembler; semplicemente non l'hanno implementato per AMD64 e Itanium.

+1

Il compilatore C genera ASM come intermedio, non c'è nulla che lo renda "difficile" per consentire l'ASM in linea su AMD64. Le specifiche della piattaforma sono l'unico motivo per cui l'ASM in linea non esiste per le destinazioni x86_64 in diversi compilatori che lo supportano per x86. –

+0

@MarkKCowan: Hai * visto * l'ASM in linea di MSVC? Comporta un sacco di cose da fare, cosa significa; puoi liberamente mescolare le variabili C/C++ con il testo del codice assembly, quindi il compilatore deve analizzare e (su un certo livello) analizzare tutto il codice, non come il modo GCC in cui il codice assembly è specificato in uno stile che richiama printf le stringhe di formato e le descrizioni esplicite degli input, degli output e dei registri clobbered evitano qualsiasi necessità per il compilatore di tentare di analizzare l'assembly. Onestamente, preferisco l'approccio di GCC, in quanto comporta una minore indiscussione del compilatore. – SamB

+1

@SamB sì, come inline assembly in Delphi. Vorrei solo che GCC non usasse la sintassi AT & T :( –

3

Sembra una piuttosto grande funzione per cadere solo ...

E 'abbastanza facile per chiamare una funzione scritta con un assemblatore, a patto che si seguono le convenzioni C. This tutorial spiega come.

+0

Concordato, l'unico La vera restrizione è che non è possibile mescolare C e ASM nella stessa routine. Venendo da uno sfondo Pascal in cui il mescolamento ASM in linea è comune nel codice scientifico, posso pienamente concordare con la decisione di imporre la separazione delle lingue in funzioni diverse. –

Problemi correlati