Kurz gesagt ja. Dadurch wird der Prozessor angehalten, während er darauf wartet, dass der Befehl abgeschlossen ist und Daten verfügbar sind, bevor der nächste Befehl ausgeführt werden kann. Es ist nicht einfach vorherzusagen, welche Daten ankommen werden inc Anweisung kann einfach nicht bis zum laufen mov ist komplett.
Dies ist jedoch möglicherweise kein großes Problem, da der Prozessor möglicherweise Befehle planen kann, die nicht vom Ergebnis abhängen mov Unterricht, um den Kern am Laufen zu halten.
Dies ist bekannt als Out-of-Order-Ausführung und es kann helfen, die Kosten für Prozessorstillstände beim Warten auf lange Anweisungen wie diese zu verringern.
Eine weitere Klarstellung ...
Ich hätte dein Beispiel besser lesen sollen, ich glaube nicht, dass das mov [rcx], rax Anweisung führt zu einem Stall auf der inc rax Anweisung, wird aber alles abhängig von verursachen rcx zum Stillstand bringen.
Die Seite, die Sie verlinkt haben, listet den gegenseitigen Durchsatz auf, durch den eine andere Anweisung dieses Typs ausgegeben werden kann. Konkret würde ich in dieser Zeitspanne davon ausgehen irgendein Anweisungen mit ähnlichen Abhängigkeiten könnten ausgegeben werden.
Also ich würde davon ausgehen, dass das RAX-Register entweder ist umbenannt da die Anweisung zur Ausführung gesendet wird oder in den U-Ops für die Anweisung codiert ist. Der nächste Befehl kann mit diesem Register arbeiten, solange er nicht von den Ergebnissen einer vorherigen Operation abhängt, die gespeichert wird im dieses Register
Also in deinen Fragen zum Beispiel was ich glaube sollte Zufall ist, dass die CPU effektiv zwei Befehle hat, deren einzige Abhängigkeit der aktuelle Wert des RAX-Registers ist und dessen Wert nur durch den zweiten Befehl geändert wird. Die erste Anweisung sollte versandt werden und die Ausführung kann fast sofort mit der zweiten beginnen ( inc ) Anweisung.