at&t syntax
-
hy there
gibts irgendwo ein tut das praktisch die unterschiede zwischen "masm" syntax und at&t syntax darstellt? mein compiler kann nur at&t (lccwin32) bins aber gewohnt mit der masm syntax zu arbeiten...
bye
tt
-
Ich kenne keinen Text dazu, aber die wichtigsten sind:
1. Man vertauscht Ziel und Quelle immer
2. Vor Registernamen kommt ein %
3. Hinter dem Opcode kommt ein Buchstabe für die Länge der Operanden (b = 8 Bit, w = 16 Bit, l = 32 BIT afair)Damit wird z.B. aus
mov eax, 5movl 5, %eax
Das müssten ansich die wichtigsten gewesen sein.
-
Du kannst ja mit dem g++ ein kleines C++-Programm einmal mit -S -dA -masm=intel und einmal mit -S -dA kompilieren und dir die Unterschiede anschauen.
-
Äähm, was bedeutet dieses eax??? Ich kenn nur ax, ah und al. Was hat das e zu sagen??? Hab' das noch nie gesehen...
-
Niklas Cathor schrieb:
Äähm, was bedeutet dieses eax??? Ich kenn nur ax, ah und al. Was hat das e zu sagen??? Hab' das noch nie gesehen...
Das ist ein 32-Bit-Register
ax, bx, cx, dx, bp, sp, si, di, ip, flags wurden erweitert zu eax, ebx, ecx, edx, ebp, esp, esi, edi, eip und eflags und haben nun allesamt 32 anstatt 16 Bit
-
TriPhoenix schrieb:
Das ist ein 32-Bit-Register
ax, bx, cx, dx, bp, sp, si, di, ip, flags wurden erweitert zu eax, ebx, ecx, edx, ebp, esp, esi, edi, eip und eflags und haben nun allesamt 32 anstatt 16 Bit
So eine Zusammenfassung (vielleicht etwas detailierter) gehört definitiv in die FAQ, so oft wie das hier nicht gewusst wird.
-
Scheint mir auch bald so - obwohl man das eigentlich wissen koennte, wenn man sich einmal ein Groesseres Tutorial aus den FAQ durchgelesen haette...
Werde mal was raussuchen... Irgendwo gibt es das hier garantiert auch schonmal detailierter ausgefuehrt.
[edit]Einen 1 Jahr alten Beitrag gefunden und hier hin verschoben.
Der ist IMHO sehr schoen :)[/edit]
-
TriPhoenix schrieb:
Ich kenne keinen Text dazu, aber die wichtigsten sind:
1. Man vertauscht Ziel und Quelle immer
2. Vor Registernamen kommt ein %
3. Hinter dem Opcode kommt ein Buchstabe für die Länge der Operanden (b = 8 Bit, w = 16 Bit, l = 32 BIT afair)4. Vor Zahlen konstanten kommt ein $
Damit wird z.B. aus
mov eax, 5movl $5, %eax
Äähm, was bedeutet dieses eax???
lass mich raten, du hast das Buch von Reiner Backer "Assembler eine strukturierte Einführung" gelesen? Das ist auch das letzte schrott Buch, weil es Dinge behandelt, die in den 70/80er Jahren stimmten. Schmeiß das Buch am besten weg!
-
Ich habe gar kein Buch gelesen sondern nur Tutz. Die waren aber alle nur für 16 Bit. Ich progge hauptsächlich aufm 386er von meinem Vater. Deshalb!
-
Auch ein 386 kennt 32Bit-Register.
Und wenn du den ordentlich übertaktest, kann der mit 32 Bit genau so schnell wie mit 16 rechnen.
-
@kingruedi:
Also wir besprechen auch nur die 16-Bit-Register im Studium. Und ich sehe auch noch sehr oft die Benutzung von 16-Bit-Registern. Um die Grundlagen zu verstehen finde ich sowohl das Buch als auch die Benutzung der 16-Bit-Register als vollkommend ausreichend.Code-Hacker
-
kingruedi schrieb:
4. Vor Zahlen konstanten kommt ein $
Nicht in gas auf jeden Fall:
triphoenix:~/root$ cat > foo.s mov %eax, 5 triphoenix:~/root$ as foo.s triphoenix:~/root$ objdump -d a.out a.out: file format elf32-i386 Disassembly of section .text: 00000000 <.text>: 0: a3 05 00 00 00 mov %eax,0x5
-
Wird die 5 dann nicht als Adresse interpretiert?