Frage

Hallo alle Ich habe eine Frage zu x86 beziehen. In der Intel-Handbuch können einige Anweisung verschiedene Arten von Speicheroperanden nehmen. z.B. IDIV r / m8 oder IDIV r / m16 oder IDIV r / m32 oder IDIV r / m64 jetzt sind sie alle IDIV ist es eine Möglichkeit zu wissen, ob der Operand m8, m16 ist, m32 oder m64? Ich dachte, wenn Operand m8 dann durch ein 8-Bit-Register zum Beispiel gerichtet. Axt, wenn 32 dann EAX, esp ... Ist meine Annahme richtig? Korrigieren Sie mich, wenn ich falsch Irgendwelche Vorschläge willkommen Dank

War es hilfreich?

Lösung

Ja, das Register, das als Operand verwendet wird, löst die Mehrdeutigkeit. (Beachten Sie jedoch, daß ax ist ein 16-Bit-Register, nicht ein 8-Bit-Register. - Das würde ah oder al für die hohe oder niedrige Byte sein, jeweils)

Wenn Sie sich nur auf Speicheroperanden beziehen, benötigen Sie einen BYTE PTR verwenden, WORD PTR oder DWORD PTR Spezifizierer die Mehrdeutigkeit aufzulösen, wie folgt aus:

mov dword ptr [eax], 0

Dieses Beispiel setzt die 32-Bit-Menge ( "Doppelwort") an der Adresse in eax bis 0 enthalten ist.

Andere Tipps

  1. Ob der Operand m8, m16 oder m32, das Register verwendet, um die Speicherstelle zu adressieren kann 8 sein, 16 oder 32 Bits -. Alle gültig sind afaik

  2. Um festzulegen, wie viele Bits aus dem Speicher zu lesen, müssen Sie eine der Größe Bezeich byte, word oder dword vor der Adresse verwenden. Zum Beispiel:

idiv byte [bx] ; m8

idiv word [bx] ; m16

idiv dword [bx] ; m32

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top