Hallo, ich habe heute mit erstaunen festgestellt, dass beim loop Befehl die Bedeutung der Prefix-Bytes offenbar umgedreht zu sein scheint:
Dieser Code geht nur ein mal durch die Schleife (ich gehe von einem 16-Bit Codesegment aus (gelöschtes D-Bit) oder im RealMode):
Dieser Code geht 0x10001 mal durch die Schleife:
Laut Intel ist der Prefix 0x66 für Operand Size Overrides und 0x67 für Address Size Overrides. Warum wird also wenn ich ecx ansprechen will der Prefix für das Ãndern der Adressgröße verwendet und nicht das für den Operand?
Damit ist aber noch nicht genug: Wenn ich das Loop in einem Codeteil verwenden will der an einer Adresse über 0xFFFF liegt, so muss ich den Prefix 0x66 (zusätzlich) verwenden. Ich hätte die Belegung der beiden Präfixe genau umgekehrt erwartet.
Könnte da Jemand zur Klärung beitragen?
MM
Dieser Code geht nur ein mal durch die Schleife (ich gehe von einem 16-Bit Codesegment aus (gelöschtes D-Bit) oder im RealMode):
Code: [Auswählen]
mov ecx,0x10001
mark:
loop mark ; Mit Prefix 0x66Dieser Code geht 0x10001 mal durch die Schleife:
Code: [Auswählen]
mov ecx,0x10001
mark:
loop mark ; Mit Prefix 0x67Laut Intel ist der Prefix 0x66 für Operand Size Overrides und 0x67 für Address Size Overrides. Warum wird also wenn ich ecx ansprechen will der Prefix für das Ãndern der Adressgröße verwendet und nicht das für den Operand?
Damit ist aber noch nicht genug: Wenn ich das Loop in einem Codeteil verwenden will der an einer Adresse über 0xFFFF liegt, so muss ich den Prefix 0x66 (zusätzlich) verwenden. Ich hätte die Belegung der beiden Präfixe genau umgekehrt erwartet.
Könnte da Jemand zur Klärung beitragen?
MM

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken


Gespeichert
