Gibt es eine Möglichkeit, 2 Bytes in 32-Bit x86 mit MOV zu verschieben, ohne dass ein Moduswechsel oder ein CPU-Stillstand verursacht wird?

Wenn ich 2 vorzeichenlose Bytes aus dem Speicher in ein 32-Bit-Register verschieben möchte, kann ich das mit einem tunMOV Anleitung und kein Moduswechsel?

Mir ist aufgefallen, dass Sie das mit dem KÖNNENMOVSE undMOVZE Anleitung. Zum Beispiel mitMOVSE die Kodierung0F B7 Verschiebt 16 Bits in ein 32-Bit-Register. Es ist jedoch eine Anweisung mit 3 Zyklen.

Alternativ könnte ich 4 Bytes in das Register verschieben und dann irgendwie CMP nur zwei davon irgendwie.

Was ist die schnellste Strategie zum Abrufen und Vergleichen von 16-Bit-Daten auf 32-Bit-x86? Beachten Sie, dass ich hauptsächlich 32-Bit-Operationen durchführe, sodass ich nicht in den 16-Bit-Modus wechseln und dort bleiben kann.

Zur Info an die Uneingeweihten: Das Problem hierbei ist, dass 32-Bit-Prozessoren von Intel x86 das könnenMOV 8-Bit-Daten und 16-Bit-ODER 32-Bit-Daten, je nachdem, in welchem ​​Modus sie sich befinden. Dieser Modus wird als "D-Bit" -Einstellung bezeichnet. Sie können die Sonderpräfixe 0x66 und 0x67 verwenden, um einen nicht standardmäßigen Modus zu verwenden. Wenn Sie sich beispielsweise im 32-Bit-Modus befinden und der Anweisung 0x66 voranstellen, wird der Operand als 16-Bit-Operand behandelt. Das einzige Problem ist, dass dies einen großen Leistungseinbruch zur Folge hat.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage