Em suma, sim. Isso fará com que o processador pare enquanto aguarda que a instrução seja concluída e que os dados estejam disponíveis antes que a próxima instrução possa ser executada. Não há como prever facilmente quais dados chegarão e que a instrução inc
simplesmente não pode ser executada até que o mov
esteja completo.
Isso pode não ser um grande problema, já que o processador pode programar instruções que não dependem do resultado da instrução mov
para manter o núcleo funcionando.
Isso é conhecido como Execução fora de ordem e pode ajudar a reduzir o custo do processador trava ao esperar por instruções longas como estas.
Um esclarecimento adicional ...
Eu deveria ter lido melhor o seu exemplo, eu não acredito que a instrução mov [rcx], rax
irá causar uma parada na instrução inc rax
, mas fará com que qualquer coisa dependente de rcx
pare.
A página que você vincula lista a taxa de transferência recíproca pela qual outra instrução desse tipo pode ser emitida. Especificamente, eu suponho que nesse período de tempo qualquer instrução com dependências semelhantes poderia ser emitida.
Assim, eu diria que o registro da RAX é renomeado , pois a instrução é enviada para execução ou é codificada na u-ops para a instrução. A próxima instrução pode trabalhar nesse registro, desde que não seja dependente dos resultados de uma operação anterior sendo armazenada em esse registro.
Então, em suas perguntas, exemplo, o que eu acredito que deveria acontecer é que a CPU efetivamente tem duas instruções cuja única dependência é o valor atual do registrador RAX e o valor nele é modificado apenas pela segunda vez. instrução. A primeira instrução deve ser despachada e a execução quase imediata pode começar na segunda instrução ( inc
).