2016-02-24 4 views
-2

Мой вопрос:64 бит Операция Коды

Инструкция MOV RBX, RCX компилируется + связаны Yasm + LINK как: 48h 89h СВН

Но в других программах, таких как notepad.exe (64 бит), тот же MOV RBX, RCX отображается как: 48h 8Bh D9h.

Оба рабочих кода правы? Или любая ошибка там? Или что происходит? Спасибо за чтение. Спасибо за ответ.

ответ

3

Оба правильные.

48h 89h CBh соответствует REX.W + 89 /r, который MOV r/m64,r64

48h 8Bh D9h соответствует REX.W + 8B /r, который MOV r64,r/m64

В RBX и RCX являются (64-разрядные регистры), они совпадают как r64 и r/m64. Таким образом, можно использовать любой из этих кодировок.

  • REX.W означает префикс REX, где W бит (64-битовый операнд размер переопределение) установлен. Префиксы REX начинаются с 40h, а бит W - бит 3, так что это 40h + 8 == 48h.

  • 89h/8Bh - это код операции.

  • /r является то, что вы должны будете смотреть в таблице с именем «Таблица 2-1. 16-битной адресацией формы с ModR/M байтами» в руководстве Intel. У вас есть r -операторы вверху, а r/m - работает слева. Итак, если мы возьмем D9h, мы увидим, что r64 должен быть RBX (таблица не указана RBX, но у вас есть переопределение размера операндов 64-разрядной версии), а r/m64 должен быть RCX.

+0

Большое спасибо Майкл !! Большое спасибо за ваше объяснение. Я думаю, теперь ясно. – ferleg