Почему 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]