I want to write a small low level program. For some parts of it I will need to use assembly language, but the rest of the code will be written on C/C++.
So, if I will use GCC to mix C/C++ with assembly code, do I need to use AT&T syntax or can I use Intel syntax? Or how do you mix C/C++ and asm (intel syntax) in some other way?
I realize that maybe I don't have a choice and must use AT&T syntax, but I want to be sure..
And if there turns out to be no choice, where I can find full/official documentation about the AT&T syntax?
Thanks!
If you are using separate assembly files, gas has a directive to support Intel syntax:
.intel_syntax noprefix
which uses Intel syntax and doesn't need the % prefix before register names.
(You can also run as
with -msyntax=intel -mnaked-reg
to have that as the default instead of att
, in case you don't want to put .intel_syntax noprefix
at the top of your files.)
If you are using inline assembly, you can compile your C/C++ sources with gcc -masm=intel
(See How to set gcc to use intel syntax permanently? for details.) This may not work with clang.
Using .intel_syntax noprefix
at the start of inline asm, and switching back with .att_syntax
can work, but will break if you use any m
constraints. The memory reference will still be generated in AT&T syntax.