Hallo,
[inc dword ptr [ebx] vs. incl (%ebx)]
Post by Jan BrunsPost by Stefan ReutherÜber Geschmack kann man nicht streiten, aber das ist ja nun wirklich
kein Grund. Die gas-Befehle sind sogar kürzer!
Ja, das ist doch das verwirrende daran. Der x86-Befehlssatz umfasst weit
über 100 (wenn nicht gar mehrere 100) Befehle, deren Namen vielleicht im
Schnitt 5 Zeichen lang sind.
Zudem gibt es sogar Befehlsnamen, die andere Befehlsnamen komplett am
Anfang enthalten, wie bspw. "IN" in "INC".
Und?
Post by Jan BrunsDas sind ziemlich andere Verhältnisse, im Vergleich zu den anderen CPUs,
die gas traditionell unterstützt (vornehmlich 8-Bit CPUs mit je vielleicht
50 Befehlen).
gas? 8-bit-CPUs? Meiner erzählt ja was von Alpha, ARM, M68k, MIPS,
PowerPC, SPARC.
Ansonsten sei froh, dass es überhaupt Mnemonics gibt :-) Auf dem
Prozessor, den ich gerade malträtiere, heißt der Additionsbefehl
r1 = r1 + r2;
und die Addition mit Saturierung
r1 = r1 + r2 (s);
Nicht zu verwechseln mit der halbwortweisen Addition ("Vektor-
Addition")
r1 = r1 + r2 (v);
Sowas schlägt sich echt bekloppt im Handbuch nach.
Post by Jan BrunsPost by Stefan ReutherKonsequenterweise
müsstest du nach deiner Argumentation dann auch
movs byte ptr es:[di], byte ptr ds:[si]
statt
movsb
schreiben.
Wieso das denn? Kann MOVS denn noch was anders?
Zum Beispiel
movs byte ptr es:[di], byte ptr gs:[si]
oder
movs byte ptr es:[edi], byte ptr ds:[esi]
Ersterer geht (meines Wissens nicht in allen Assemblern) mit
'seggs movsb', letzterer eigentlich nur mit 'db 67h' davor.
Post by Jan BrunsPost by Stefan ReutherIch finde die gas-Syntax eigentlich recht umgänglich.
Naja, ich weiß nicht.
Braucht man -selbst bei einem Crossassembler- wirklich ein Steuerzeichen,
um Registernamen zu kennzeichnen? Hätte man das nicht besser für
Speicherreferenzen, die zufällig einen Registrernamen tragen, verwenden
können? Doch, hätte man.
Musste man bei der Intel-Syntax zur Speicherreferenzierung unbedingt
die eckigen Klammern nehmen, die auf deutschen Tastaturen schwer
eingebbar sind? Hätten es nicht auch runde Klammern sein können?
Warum ist Intel-Syntax die einzige mir bekannte Assemblersyntax, in
der ein indirekter Sprung 'jmp bx' und nicht 'jmp (bx)' codiert
wird? Warum setzt man bei 'in al,dx' die Quelladresse nicht in
Klammern, bei 'mov al,[bx]' aber schon? Warum frisst TASM den Befehl
'jmp 0FFFFh:0' nicht?
Hier kann man sicherlich stundenlang weitere Beispiele anführen. Es
bringt nur nix. 'gas' ist halt anders. Nicht "eigenartig" oder
"schwer", nur "anders". Jemand der von M68k oder SPARC kommt, wird
sich wie zu Hause fühlen (von ersterem hat AT&T diese Syntax dann
vermutlich auch geerbt). Klar ist es nervig, dass es zwei Dialekte
gibt. Aber die sind beide verbreitet genug, dass wir keinen von
beiden totkriegen werden.
Allerdings kann zumindest gcc inzwischen auch etwas, das fast wie
Intel-Syntax aussieht, generieren, und der gas kann das auch lesen.
Stefan