Ich möchte ein kleines Low-Level-Programm schreiben. Für einige Teile davon werde ich Assemblersprache verwenden müssen, aber der Rest des Codes wird in C/C++ geschrieben.
Wenn ich also GCC verwende, um C/C++ mit Assemblercode zu mischen, muss ich dann die AT&T-Syntax verwenden oder kann ich die Intel-Syntax verwenden? Oder wie mischt man C/C++ und asm (Intel-Syntax) auf andere Weise?
Mir ist klar, dass ich vielleicht keine Wahl habe und die AT & T-Syntax verwenden muss, aber ich möchte sicher sein.
Und wenn sich herausstellt, dass es keine Wahl gibt, wo finde ich die vollständige/offizielle Dokumentation über die AT&T-Syntax?
Vielen Dank!
Wenn Sie einige ganze Funktionen in asm schreiben, können sie sich in einer separat kompilierten Datei befinden. Wenn Ihnen eine Build-Abhängigkeit von YASM oder NASM nichts ausmacht, ist es einfach, jede beliebige Syntax zu verwenden. (Aber dann muss Ihr Asm mit den unterschiedlichen ABIs für Windows und Linux umgehen, vielleicht mit Assembler-Makros.) Die GNU-Assembler-Handbuch ist online, und normalerweise auch mit gcc/binutils installiert. (
info as
).– Peter Cordes
1. Dezember 2015 um 2:18 Uhr
Seien Sie vorsichtig mit der Intel-Syntax, da der integrierte Assembler von Clang daran erstickt. Siehe auch LLVM-Problem 24232: Inline-Assembly-Operanden funktionieren nicht mit .intel_syntax. Der Fehlerbericht zeigt, dass Clang Probleme mit einer einfachen Verneinung hat.
– jww
24. Juli 2016 um 13:30 Uhr