| Zeile 46: | Zeile 46: | ||
Die Wortlänge wird als Suffix an den Opcode angehängt, "b" steht für Byte, "w" für Word (2 Byte), "l" für DWord (4 Byte) und "q" für QWord (8 Byte). Die Wortlänge kann aber weggelassen werden, wenn die Länge aus den Registernamen hervorgeht. | Die Wortlänge wird als Suffix an den Opcode angehängt, "b" steht für Byte, "w" für Word (2 Byte), "l" für DWord (4 Byte) und "q" für QWord (8 Byte). Die Wortlänge kann aber weggelassen werden, wenn die Länge aus den Registernamen hervorgeht. | ||
| − | Register | + | Register in Klammern werden für die indirekte Adressierung des Speichers verwendet. |
| − | <asm>movw (%ebp), ax # lädt ein Word (2 Byte Zahl) von der Adresse in ebp nach | + | <asm>movw (%ebp), %ax # lädt ein Word (2 Byte Zahl) von der Adresse in ebp nach ax</asm> |
| − | <asm>movb (%esi), cl # lädt ein Byte von der Adresse in esi nach cl</asm> | + | <asm>movb (%esi), %cl # lädt ein Byte von der Adresse in esi nach cl</asm> |
<asm>pushl 4(%ebp) # schiebt ein dword (4 Byte Zahl) von der Adresse, welche um 4 größer ist als die in ebp, auf den Stack. S.u.</asm> | <asm>pushl 4(%ebp) # schiebt ein dword (4 Byte Zahl) von der Adresse, welche um 4 größer ist als die in ebp, auf den Stack. S.u.</asm> | ||
| − | Die Bezeichnung von | + | Die Bezeichnung von Adressen ist allerdings komplizierter. Sie werden wie folgt dargestellt (wobei alle Bestandteile optional sind): |
| − | <tt>< | + | <tt><Adressbasis>(<Erstes Register, das addiert werden soll>,<Zweites Register>,<Faktor, mit dem das zweite Register zuvor multipliziert wird>)</tt> |
Also z.B. | Also z.B. | ||
| − | <asm>addb 5(ebp,eax,4), dh # addiert dh mit den Byte, dessen Adresse sich durch ebp + eax*4 + 5 berechnen lässt</asm> | + | <asm>addb 5(%ebp,%eax,4), %dh # addiert dh mit den Byte, dessen Adresse sich durch ebp + eax*4 + 5 berechnen lässt</asm> |
| − | <asm>addb 12345, dh # addiert dh mit den Byte von der Adresse 12345 und speichert das Ergebnis wieder in dh ab</asm> | + | <asm>addb 12345, %dh # addiert dh mit den Byte von der Adresse 12345 und speichert das Ergebnis wieder in dh ab</asm> |
| − | Konstanten wird ein Dollarzeichen vorgestellt, um sie von | + | Konstanten wird ein Dollarzeichen vorgestellt, um sie von Adressen zu unterscheiden. |
| − | <asm>subl $16, ecx # Verringert den Wert in ecx um 16</asm> | + | <asm>subl $16, %ecx # Verringert den Wert in ecx um 16</asm> |
== Inline-Assembler == | == Inline-Assembler == | ||