Что делает "mov offset(%rip), %rax"?
Есть ли rax
получить смещение плюс адрес этой инструкции или следующую? С точки зрения микрокода было бы проще, если бы ответом была следующая инструкция.
1 ответ
Следующий. Это общее правило для x86 (см. Также разделы).
В томе 2 руководства пользователя Intel по разделу 2.2.1.6 RIP-относительная адресация:
Новая форма адресации, относительная к RIP (относительная указатель инструкций), реализована в 64-битном режиме. Эффективный адрес формируется путем добавления смещения к 64-битному RIP следующей инструкции.
Обратите внимание, что symbol_name(%rip)
вычисляет смещение, необходимое для достижения symbol_name
отсюда, вместо добавления абсолютного адреса symbol_name
RIP в качестве смещения.
Но да, для числовых смещений, таких как mov 4(%rip), %rax
, это загрузит 8 байтов, начиная с 4 байтов после конца этой инструкции.