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
nichtProblem: 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.
67h
) wird bei Speicherzugriffen nicht berücksichtigtProblem: 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.
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.