Nop-Byte (n) verstehen

2846
Cole Johnson

Ok, also las ich die AMD64-Manöver durch und wusste, dass dies nopwirklich eine xchg eax, eaxist. Ich schaute auf xchgund fand etwas interessantes, dass es scheint, als könnte ein Byte in die Anweisung zur Angabe der Register verschlüsselt werden (entschuldige, ich bin auf meinem iPod). : Bild .

Ich frage mich also, wie der Prozessor weiß, ob es ein Byte gibt, mit dem gearbeitet werden muss, oder ob dieses zusätzliche Register vom Typ sein muss, rAXwodurch es tatsächlich immer noch das eine Byte ist0x90

3

1 Antwort auf die Frage

4
Breakthrough

Ich schaute mir das xchg an und fand etwas interessantes, dass es scheint, dass ein Byte in die Anweisung zur Angabe der Register codiert werden kann

Ja, so funktionieren die meisten x86-Anweisungen. Befehle werden entweder 32 oder 64 Bit (Wortlänge der Maschine) abgerufen, nicht Byte.

Festlegen eines XCHGvon rAXmit rAX(wo rAXist EAXauf einer 32-Bit - Maschine und RAXauf einer 64-Bit - Maschine) werden 0x90, da das Register Mux - Code für rAXist 0x00(effektiv ein Betrieb eines Zyklus, der nichts tut, tun). In ähnlicher Weise wird der Befehl XCHG rBX, rAXzusammengebaut 0x93(der Mux-Code des rBXSeins 0b011).

Die Opcode-Kodierung sollte an einer anderen Stelle im Handbuch aufgeführt sein. Sie können auch eine x86-Opcode-Karte betrachten (was hilft zu verstehen, wie alles zusammen gemuxt wird). Sie finden eines in den Intel 64- und IA-32-Architekturen-Entwicklerhandbüchern (Band 2, Anhang A.3).

Ich frage mich also, wie der Prozessor weiß, ob ein Byte hinterher zu arbeiten ist oder ob dieses zusätzliche Register vom Typ rAX sein muss, wodurch es tatsächlich immer noch das eine Byte 0x90 ist

Hier ist es das Gegenteil. Für den 64-Bit-Modus gibt es tatsächlich ein Präfix im Befehlswort selbst, um dies anzuzeigen ( REXPräfix). Der Prozessor weiß aufgrund der An- oder Abwesenheit des REXPräfixes, wonach er suchen muss - und in Ermangelung dessen ist der Befehl immer noch richtig 0x90.