Почему nasm и yasm дают 67 код операции для команды mov r16, word [r64 - 3]?

В сборке x86-64 у меня следующая инструкция

mov        dx, word [esi-5]

NASM 2.13.03 генерирует:

66 67 8B 56 FB 

Yasm 1.3.0 генерирует:

67 66 8B 56 FB 

66 67 коды операций являются модификаторами так 8B 56 FB сам по себе это:

 mov        edx, dword [rsi-5]

Я заметил, что:

66 8B 56 FB 

также оценивает:

mov        dx, word [rsi-5]

У меня есть два вопроса:
1) почему nasm & yasm испустить это 67 заполнение байтов опкода? (67 само по себе не достаточно, чтобы уменьшить edx в dx, это должно включать 66)
2) Есть ли способ выдать более короткую 4-байтовую инструкцию без 67 в насм / ясме?

1 ответ

Решение

Вопрос сделал ложное предположение 66 8B 56 FB

mov        dx, word [rsi-5] 

эквивалентно

`66 67 8B 56 FB` or `67 66 8B 56 FB` 

mov        dx, word [esi-5] 

66 уменьшает edx в dx
67 уменьшает [rsi-5] в [esi-5]

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