Wie werden Anweisungen und Daten gespeichert?

1161
Netasd

Ich debugge ein C # -Programm, und die Demontageansicht zeigt Folgendes:

0x006E2813 pop ebx
0x006E2814 pop esi

Wird pop ebxalso in 1 Byte (in einer einzigen Adresse) gespeichert, aber wie kann das sein, da der popBefehl selbst 1 Byte groß ist?

Oder es zeigt nur die Daten ( ebx), wo sind die Anweisungen gespeichert?

-4

1 Antwort auf die Frage

0
grawity

Wie kann das sein, da die Pop-Anweisung selbst 1 Byte groß ist?

Es ist in verschiedene Bytes codiert, abhängig davon, welches Register verwendet wird. pop ebxist 0x5B, pop esiist 0x5E. Es gibt viele Websites und Handbücher, die die Kodierung der x86-Anweisungen dokumentieren.

Assemblersprache verwendet im Allgemeinen Bytes als Operanden, um "unmittelbare" Werte zu speichern, Werte, die einen Speicherort darstellen, oder Werte, die darauf verweisen. Register befinden sich nicht im Speicher, und x86 verfügt nicht über genügend Register, um die Verwendung eines 8-Bit-Bytes für die Referenzierung eines Registers völlig effizient zu machen (Sie hätten viele verschwendete Bits) als Teil der Anweisung. LawrenceC vor 9 Jahren 1