Differenz zwischen "or eax, eax" und "test eax, eax" [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Test ob ein Register Null ist mit CMP reg, 0 vs OR reg, reg? 2 Antworten

Was ist der Unterschied zwischenor eax,eax undtest eax,eax? Ich habe verschiedene Compiler gesehen, die beide für den gleichen Vergleich produzieren, und was die Dokumentation betrifft, tun sie genau das Gleiche. Deshalb frage ich mich, warum sie nicht alle @ verwendetest eax,eax. Darüber nachdenkenand eax,eax würde die Flags auf die gleiche Weise setzen wie entweder, aber ich habe es weder in Freepascal, Delphi noch in msVC ++ gesehen.

Ich habe einige asm-Blöcke in delphi kompiliert und die Assembler-Quelle ausgecheckt. Alle drei Formulare haben die exakt gleiche Länge in Opcodes. Außerdem habe ich die PDF-Datei mit der Intel-Leistung überprüft und sie haben die gleiche Latenz und den gleichen Durchsatz.

Bearbeiten
Die Frage ist speziell über den Unterschied zwischen den einzelnen Fällentest eax,eax, or eax,eax undand eax,eax. Alle 3 ergeben völlig identische Ergebnisse für Register, Flags, Opcode-Länge, Latenz, Durchsatz. Und dennoch verwenden einige Compiler zum Testen, ob 0, wenn nicht Null oder signiert,test eax,eax während einige verwendenor eax,eax, und ich habe mich gefragt, warum sie nicht alle @ verwendtest eax,eax da es den Code etwas klarer macht.

Edit2:
Zum Nachschlagen, ich bin zu Hause und habe nur und ältere msvc ++ und Delphi hier, aber teste eine Variable, wenn Null, macht msvc ++test eax,eax, während Delphi @ tor eax,eax.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage