Короче да. Это приведет к остановке процессора в ожидании завершения этой инструкции и доступности данных, прежде чем можно будет выполнить следующую инструкцию. inc
Невозможно легко предсказать, какие данные поступят, и поэтому инструкция просто не может выполняться до тех пор, пока она не mov
будет завершена.
Это может не быть большой проблемой, поскольку процессор вполне может планировать инструкции, которые не зависят от результата этой mov
инструкции, чтобы поддерживать работу ядра.
Это называется выполнением вне очереди, и это может помочь снизить стоимость остановок процессора при ожидании длинных инструкций, подобных этим.
Дальнейшее уточнение ...
Я должен был прочитать ваш пример лучше, я не верю, что mov [rcx], rax
инструкция вызовет остановку inc rax
команды, но вызовет что-либо, зависящее от rcx
остановки.
На странице, на которую вы ссылаетесь, указана взаимная пропускная способность, благодаря которой может быть выдана другая инструкция такого типа. В частности, я бы предположил, что за такой промежуток времени может быть выдана любая инструкция с аналогичными зависимостями.
Таким образом, я бы предположил, что регистр RAX либо переименовывается, так как инструкция отправляется на выполнение, либо кодируется в u-ops для инструкции. Следующая инструкция может работать с этим регистром, если она не зависит от результатов предыдущей операции, сохраненной в этом регистре.
Таким образом, в вашем примере вопросов, что, я считаю, должно произойти, это то, что ЦП фактически имеет две инструкции, единственной зависимостью которых является текущее значение регистра RAX, и значение в нем изменяется только второй инструкцией. Первая инструкция должна быть отправлена, и вторая команда ( inc
) может начать почти немедленное выполнение .