Что делает "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 байтов после конца этой инструкции.

Другие вопросы по тегам