мне было интересно, если это возможно, чтобы кодировать инструкции как:Возможно ли 64-битный операнд прямой памяти на x86-64?
надстройкой бараков, [адрес]
где < адрес> является полный 64-битный адрес, указывающий на 64-разрядную стоимость. NASM, похоже, просто усекает адрес и кодирует его как 32-разрядный адрес. Единственная форма 64-битная адресация (с прямым адресом), который, кажется, работает это:
мы Rax, [QWORD адрес]
, который кодируется с помощью NASM REX.W = 1 и специальные коды операций MOV с прямой адресацией. Использование REX.W с инструкцией add просто позволяет интерпретировать целевой адрес как содержащий 64-битное значение, но не позволяет специфицировать 64-разрядный адрес. Но мне любопытно, есть ли другой способ.
(Кстати, из-за этой проблемы я сейчас использую RIP-относительную адресацию).
Может ли кто-нибудь подтвердить, что прямая 64-битная форма адресации невозможна?
Ссылка на набор инструкций может подтвердить, что, а не какой-то незнакомец из Интернета;) – Jester
Шут, я посмотрел ссылку на инструкцию. Но несколько сложно исключить, что может быть способ, особенно потому, что я не привык его читать. В задании набора инструкций приведена опция «[REX.W + 03/r] ADD r64, r/m64», но на основе экспериментов и ваших анверов (и таблиц относительно байта MOD R/M). Я заключаю, что это означает добавление 64 -битного значения, хранящегося на 32-разрядном указанном адресе памяти (без возможности расширения адреса до 64-разрядной информации за пределами использования дополнительных инструкций). – Morty
@Morty Обычный набор режимов адресации не включает режим с 64-битным расположением или абсолютным. В этом режиме адресации предусмотрены только определенные специальные инструкции. – fuz