Инструкция x86 BSWAP REX не соответствует спецификациям Intel? - PullRequest
0 голосов
/ 26 ноября 2018

Я собирал (и разбирал) инструкцию BSWAP x64 с NASM и GAS, и обе собирали инструкцию BSWAP r15 как 490FCF в шестнадцатеричном формате.Дизассемблеры также разбирают это на одну и ту же инструкцию.

Префикс REX для инструкции (49), таким образом, имеет бит REX.W (бит 3) и бит REX.B (бит 0).Это прямо противоположно документации Intel, в которой говорится:

В 64-битном режиме размер операции по умолчанию для инструкции составляет 32 бита. Использование префикса REX в форме REX.R разрешает доступ к дополнительным регистрам (R8-R15) .Использование префикса REX в форме REX.W повышает скорость работы до 64 бит.

(выделение выделено)

Таким образом, согласно документации, бит REX.W и REXДолжен быть установлен бит .R (бит 2), а не REX.B, давая кодировку 4C0FCF.

Мой вопрос: кто прав?Сборщики или Intel?

1 Ответ

0 голосов
/ 26 ноября 2018

Руководство там не так.См. Описание префикса REX в разделе 2.2.1.2. Подробнее о полях префикса REX вместо этого говорится:

REX.B либо изменяет базу в ModR / M r /поле m или базовое поле SIB;или изменяет поле reg кода операции, используемое для доступа к GPR.

и Рисунок 2-7.Операнд регистра, закодированный в байт Opcode;REX.X & REX.R Не используется , который выглядит следующим образом:

Figure 2-7. Register Operand Coded in Opcode Byte; REX.X & REX.R Not Used

BSWAP использует поле reg кода операции.

...