From Computer Systems: a Programmer's Perspective, about assembly languages:
We see that the Intel and ATT formats differ in the following ways:
- The Intel code omits the size designation sufﬁxes. We see instruction push and mov instead of pushq and movq.
- The Intel code omits the ‘%’ character in front of register names, using rbx instead of %rbx.
- The Intel code has a different way of describing locations in memory—for example, QWORD PTR [rbx] rather than (%rbx).
- Instructions with multiple operands list them in the reverse order. This can be very confusing when switching between the two formats.
There is close correspondence between assembly languages and machine languages (i.e. ISA).
Do the above differences between ATT and Intel formats of assembly languages come from some differences between their underlying machine languages? Or do the differences between ATT and Intel formats of assembly languages only exist at the level of assembly languages, i.e. is it normal that both formats may be based on the same machine languages?