Tester Errata

Auf dieser Seite werden bekannte Fehler des Testers aufgeführt. Einige der Fehler können mit einer zukünftigen Version des Simulators behoben werden; es sollte sich nicht auf die Existenz dieser Fehler verlassen werden.


loop verändert rcx nicht

Problem: Die loop Instruktion wird nicht korrekt emuliert, der Wert von rcx wird nicht verringert.

Lösung: Die Instruktion kann einfach durch eine Kombination aus sub/cmp und jcc ersetzt werden. Auf loop sollte jedoch allgemein verzichtet werden, da eine Kombination aus cmp und jcc (zumindest auf Hardware) immer schneller ist.


Das Address-Size-Prefix (67h) wird bei Speicherzugriffen nicht berücksichtigt

Problem: Bei Speicherzugriffen wird die Veränderung der Adressgröße von 64-Bit auf 32-Bit durch das Prefix 67 nicht beachtet und es wird weiterhin auf die 64-Bit Adresse zugegriffen.

Lösung: Die Adresse muss explizit auf 32-Bit gekürzt werden, z.B. via lea oder mov. Anzumerken ist, dass ein 32-Bit Speicheroperand im 64-Bit-Modus nur äußerst selten vorteilhaft ist und auch bei lea auch bei einer Operandengröße von 32-Bit ein 64-Bit Speicheroperand auf Hardware performanter ist.


Das Alignment von Speicherzugriffen wird bei einigen Instruktionen nicht geprüft

Problem: Bei den Instruktionen pshuflw/pshufhw/unpcklpd/unpckhpd, welche beim Speicherzugriff ein Alignment erfordern, wird das tatsächliche Alignment der linearen Adresse nicht geprüft.

Lösung: n/a


maskmovdqu führt zur Exception #UD

Problem: Die Instruktion maskmovdqu ist nicht implementiert und führt zu einer Invalid Opcoded Exception (#UD).

Lösung: Die Bytes können einzeln geschrieben werden.


enter mit Nesting Level > 0 führt zur Exception #UD

Problem: Die Instruktion enter mit einem Nesting Level unglich 0 führt zu einer Invalid Opcoded Exception (#UD).

Lösung: Die Instruktion kann durch eine Sequenz von anderen semantisch äquivalenten Instruktionen ersetzt werden.