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 gibt keine Möglichkeit, auf einfache Weise vorherzusagen, welche Daten ankommen, und der inc
Befehl kann erst ausgeführt werden, wenn der Befehl mov
abgeschlossen ist.
Dies ist jedoch kein großes Problem, da der Prozessor möglicherweise in der Lage ist, Anweisungen einzuplanen, die nicht vom Ergebnis dieser mov
Anweisung abhängen, um den Kernbetrieb aufrechtzuerhalten.
Dies wird als Out-of-Order-Ausführung bezeichnet und kann dazu beitragen, die Kosten für Prozessorstillstände zu verringern, wenn auf lange Anweisungen wie diese gewartet wird.
Eine weitere Klarstellung ...
Ich hätte Ihr Beispiel besser lesen sollen, ich glaube nicht, dass die mov [rcx], rax
Anweisung die Anweisung zum Stehen bringen wird inc rax
, aber alles, was davon abhängig ist, rcx
zum Stehen kommt.
Die von Ihnen verlinkte Seite listet den wechselseitigen Durchsatz auf, wodurch eine weitere Anweisung dieses Typs ausgegeben werden kann. Im Einzelnen würde ich davon ausgehen, dass in dieser Zeit eine Anweisung mit ähnlichen Abhängigkeiten ausgegeben werden könnte.
Ich würde also annehmen, dass das RAX-Register entweder umbenannt wird, wenn der Befehl zur Ausführung gesendet wird, oder in den U-Ops für den Befehl codiert ist. Die nächste Anweisung kann mit diesem Register arbeiten, solange sie nicht von den Ergebnissen einer vorherigen Operation abhängt, die in diesem Register gespeichert ist.
Also in Ihrem Fragen Beispiel, was ich glaube, soll geschehen ist, dass die CPU effektiv zwei Befehle, deren einzige Abhängigkeit hat der aktuelle Wert des RAX - Registers und der Wert darin wird nur durch die zweite Anweisung geändert. Die erste Anweisung sollte abgesetzt werden und die sofortige Ausführung kann mit der zweiten inc
Anweisung beginnen.