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