2015-05-05 8 views
2

Эта команда имеет некоторые запутанные режимы, вот таблица для 64-разрядной версии на странице 862 руководства Intel x64:x64 инструкция LAR (Load Права доступа Byte)

Opcode Instruction   Description 
0F 02 /r LAR r16, r16/m16 r16 ← access rights referenced by r16/m16 
0F 02 /r LAR reg, r32/m16 reg ← access rights referenced by r32/m16 

Какой размер регистра является то, что ' р '? Это инструкция, которая нуждается в 16-битном префиксе 66H? Или может быть префикс 67H или REX.W? Я предполагаю, что нужен префикс, поскольку оп-коды одинаковы ...

ответ

1

документация AMD немного понятнее о том, что:

 
LAR reg16, reg/mem16  0F 02 /r  ... 
LAR reg32, reg/mem16  0F 02 /r  ... 
LAR reg64, reg/mem16  0F 02 /r  ... 
reg/mem16 : Word (16-bit) operand in a GPR register or memory. 

А также:

В 64-битном режиме большинство инструкций по умолчанию имеют размер 32-разрядного операнда. Для этих инструкций префикс REX (стр. 14) может указывать размер 64-разрядного операнда, а префикс 66h указывает размер 16-разрядного операнда. Префикс REX имеет приоритет над префиксом 66h.

Цитаты Руководство архитектуре AMD64 программиста Том 3: общего назначения и Инструкции системы

+0

Это 'р/mem16' всегда 16-битный регистр? Справочник Intel перечисляет его как r16, так и r32 ... –

+1

@RyanBrown В документе AMD он всегда 16-бит. В Intel упоминается небольшая заметка о том, что «используются только биты 16-0. Другие биты игнорируются», поэтому это означает, что 32-бит принимается, но бесполезен. Кроме того, я часто использую [this] (https://defuse.ca/online-x86-assembler.htm) для быстрых тестов (не на 100% надежных, но удобных), и он, похоже, принудительно 16-бит. – ElderBug

+0

Ницца, спасибо! Это пригодится –

 Смежные вопросы

  • Нет связанных вопросов^_^