Für mich ist die Intel-Syntax viel einfacher zu lesen. Wenn ich durch die Assembly-Struktur gehe und mich nur auf die Intel-Syntax konzentriere, vermisse ich dann etwas? Gibt es einen Grund, warum ich zu AT & T wechseln möchte (außerhalb der Möglichkeit, die AT & T-Assembly anderer zu lesen)? Mein erster Hinweis ist, dass gdb standardmäßig AT & T verwendet.
Wenn dies wichtig ist, konzentriere ich mich nur auf die Zusammenstellung und Syntax von Beziehungen zu Linux / BSD und der C-Sprache.
Antworten:
Es gibt wirklich keinen Vorteil gegenüber dem anderen. Ich stimme jedoch zu, dass die Intel-Syntax viel einfacher zu lesen ist. Beachten Sie, dass alle GNU-Tools, AFAIK, die Option haben, auch die Intel-Syntax zu verwenden.
Es sieht so aus, als könnten Sie GDB dazu bringen, die Intel-Syntax folgendermaßen zu verwenden:
GCC kann mit Intel-Syntax arbeiten
-masm=intel
.quelle
lea -0x30(%rcx,%rax,8),%eax
ist gewunden ATT fürlea eax,[rcx+rax*8-0x30]
. Die Verwendung von + und * hilft im Intel-Stil wirklich.Die primäre Syntax für den GNU-Assembler (GAS) lautet AT & T. Die Intel-Syntax ist eine relativ neue Ergänzung. Die x86-Assembly im Linux-Kernel erfolgt in AT & T-Syntax. In der Linux-Welt ist dies die übliche Syntax. In der MS-Welt ist die Intel-Syntax üblicher.
Ich persönlich hasse die AT & T-Syntax . Neben GAS gibt es viele kostenlose Assembler (NASM, YASM), die auch die Intel-Syntax unterstützen, sodass die Linux-Syntax unter Linux problemlos funktioniert.
Darüber hinaus ist es nur ein syntaktischer Unterschied. Das Ergebnis von beiden ist der gleiche x86-Maschinencode.
quelle
Es gibt wirklich keinen Vorteil gegenüber dem anderen. Ich bin jedoch anderer Meinung, dass die Intel-Syntax viel einfacher zu lesen ist, weil ich persönlich die Intel-Syntax hasse . Beachten Sie, dass alle GNU-Tools, AFAIK, die Option haben, auch die Intel-Syntax zu verwenden.
... und es wird komplizierter mit komplexeren Anweisungen
'nuff sagte.
PS: Diese Antwort existiert hauptsächlich, um (IMHO) Schwachstellen in einigen anderen Antworten hervorzuheben, bei denen es sich eigentlich nicht um Antworten, sondern um Meinungen handelt. Und natürlich ist diese Antwort in Wirklichkeit nur meine bescheidene Meinung.
PPS: Ich hasse die Intel-Syntax nicht, es ist mir einfach egal.
quelle
SOMEWORD PTR[]
wenn die Operandengröße aus dem Kontext hervorgeht. Sie benötigen es jedoch, wenn Sie einel
Datei sofort an einen Speicherort verschieben möchten (sowohl von AT & T als auch von DWORD PTR von Intel). Und ja, mein Beispiel ist ziemlich erfunden - aber dein Beispiel auch. Für den Fall, dass Sie immer noch nicht verstehen, warum: Sie haben die nicht benötigten Wortgrößen bei Intel weggelassen, haben sie aber in AT & T. Sie wählen die Operanden so aus, dass sie in Intel gut ausgerichtet sind, in AT & T jedoch nicht.-4(ebp,edx,4)
, dass etwas besser ist als[4*edx+ebp-4]
? Letzteres finde ich intuitiver.Es ist die "gleiche Sprache", da sie bis zum gleichen Maschinencode kompiliert wird, die gleichen Opcodes hat usw. Wenn Sie dagegen überhaupt GCC verwenden, möchten Sie wahrscheinlich die AT & T-Syntax lernen, nur weil es so ist die Standardeinstellung - keine Änderung der Compileroptionen usw., um sie zu erhalten.
Auch ich habe mir bei Intel-Syntax x86 ASM (auch unter DOS) die Zähne geschnitten und fand es anfangs intuitiver, wenn ich zu C / UNIX wechselte. Aber sobald Sie AT & T gelernt haben, wird es genauso einfach aussehen.
Ich würde nicht so viel darüber nachdenken - es ist einfach, AT & T zu lernen, wenn Sie Intel kennen und umgekehrt. Die eigentliche Sprache ist viel schwieriger in den Kopf zu bekommen als die Syntax. Konzentrieren Sie sich also auf jeden Fall auf das eine und lernen Sie dann das andere, wenn es auftaucht.
quelle
Es ist ein Zeichen von Professionalität, dass Sie bereit sind, sich auf alles einzustellen, was verwendet wird. Es gibt keinen wirklichen Vorteil für den einen oder anderen. Die Intel-Syntax ist in der Microsoft-Welt üblich, AT & T ist der Standard in Linux / Unix. Da es für beide keinen Vorteil gibt, prägen die Leute das ein, was sie zuerst gesehen haben. Das heißt, ein professioneller Programmierer erhebt sich über solche Dinge. Verwenden Sie alles, was sie bei der Arbeit oder in der Domäne verwenden, in der Sie arbeiten.
quelle
Die Intel-Syntax deckt alles ab (vorausgesetzt, der Assembler / Disassembler ist auf dem neuesten Stand und enthält den neuesten Junk-Intel, der dem Befehlssatz hinzugefügt wurde). Ich bin mir sicher, dass es bei & t genauso ist.
... und es wird komplizierter mit komplexeren Anweisungen
'nuff sagte.
quelle
Meine erste Assemblersprache war MIPS, die der ATT-Syntax sehr ähnlich ist. Ich bevorzuge die ATT-Syntax, aber es spielt keine Rolle, solange Sie sie lesen können.
quelle
lea -0x30(%rcx,%rax,8),%eax
undlea eax,[rcx+rax*8-0x30]
jørgensen oben gepostet. Und im Gegensatz zu AT & T verwenden MIPS wie alle anderen immer noch das Ziel-First-Format. Außerdem muss der MIPS-Nummer kein $ vorangestellt werden, und die Registernamen in MIPS sind kurz, so dass es nicht sehr unangenehm ist,% wie AT & T zu haben