Was ist der Unterschied der ASM Arten?

Bin im moment einbisschen verwirrt, sogesehen. Gibt es 2 Arten von Assembler? AT&T && BSD?

Könnte bitte einer erklären was der unterschied zwischen den beiden Arten ist, wenn es überhaupt 2 Arten gibt? Hab ich mal irgendwo im Netz gelesen weiß aber nicht mehr wo..

Gruß
Keci
 
da gibts einige mehr, welche speziell auf architekturen zugeschnitten sind.
wird dir jemand anderes hier besser erklären können denke ich mal ;)
 
Intel und AT&T sind "nur" Syntaxe. Versch. Compiler können nur bestimmte Syntaxe, z.b. kann afaik der unter Linux gebräuchliche GAS nur AT&T. Beide ASM-Syntaxe nutzen die 80x86-Befehle, d.h. ASM auf x86-System.
 
Die AT&T-Syntax ist schneller zu parsen, deshalb eignen sich solche Assembler gut um Zwischencode vom Compiler zu verarbeiten, während die Intel-Syntax etwas Komfortabler ist (Mann muss z.B. nicht immer angeben ob man mit bytes, words oder dwords arbeitet)
 
Im großen und ganzen wäre also AT&T für mich besser, denn immerhin muss man in der Programmierung genau angeben was der Compiler machen soll. Ich weiß an dieser Stelle garnicht wie ich es beschreiben soll aber vielleicht könnt ihr euch es ja auch denken.

Danke für die Antworten.

Gruß ;)
 
an dieser Stelle garnicht wie ich es beschreiben soll aber vielleicht könnt ihr euch es ja auch denken.
AT&T hört sich viel cooler an? ;) Intel Syntax ist aber gängiger (mehr Beispiele) und macht weniger Tipparbeit ;). Und Kontrolle hat man in beiden. Nur gibt es in der Intel-Welt bei manchen Sachen eben "Defaultannahmen":

denn (AT&T)
Code:
movl %esp,%ebp
vs. Intel
Code:
mov ebx,esp
<- das l für Long ist eigentlich überflüssig. Wenn man zwei ganze Register angibt, geht man auch davon aus, dass sie ganz genutzt werden.

Code:
Intel Syntax

mov	al,bl   <- das sind 8-Bit Teilregister. Muss man da noch "movB" für Byte schreiben?
mov	ax,bx  <- 16-Bit Teilregister - wiederum: muss das movW sein?
mov	eax,ebx
mov	eax, dword ptr [ebx]  <---  man sagt explizit, dass man 
ein DWORD Wert kopieren möchte.


	AT&T Syntax

movb	%bl,%al
movw	%bx,%ax
movl	%ebx,%eax
movl	(%ebx),%eax

Außerdem: nicht umsonst wurde dem GAS die Intelsyntax in der Version 2.10 hinzugefügt ;)
 
AT&T hört sich auch wirklich besser an da hast du recht :D Aber auch wenn es einbisschen mehr Tipparbeit ist, denke ich mal, dass es wegen Marker (mit Marker mein ich das % Zeichen) das Programm übersichtlicher macht.

Eigentlich wollte ich einbisschen ASM lernen damit ich mich auch in die Peripherie besser hineinversetzen kann.

Im endeffekt denk ich mal das alle ASM Varianten in Linux funzen würden oder? Da die Syntax anders aber ASM = ASM, bzw. Maschinensprache = Maschinensprache.
 
Zum Kennenlernen ist es egal (größtenteils sowieso eine Glaubensfrage ;), wobei ich persönlich eher NASM empfehlen würde, das GAS letzendlich (zumindest afaik) erstmal nur als Backend für den gcc entwickelt wurde und gar nicht für die manuelle Programmierung.
Der wesentliche "logische" Unterschied, ist dass bei AT&T bei movl %esp,%eax
esp->eax Richtung gemeint ist und bei Intel MOV ESP,EAX das ESP<-EAX (EAX nach ESP kopieren) bedeutet.

Zu der Übersicht: bei größeren Fremdprogrammen eigentlich egal. Viel wichtiger sind imho die Kommentare - unübersichtliche C Programme sind gegen chaotische Asm Quelltexte ein Kinderspiel ;)
 
Zurück
Oben