В сборке 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
в nasm/yasm?
fb
,85
является частью следующей инструкции. Во-вторых, даже тогда66 67 8b 46 fb
дизассемблируется вmov ax, word [esi-5]
, что не совсем так, как вы написали. Вы где-то ошиблись, записывая это? - person fuz   schedule 25.03.201866 8B 56 FB
в Hopper оценивается какmov dx, word [rsi-3]
- person Kamil.S   schedule 25.03.201866 8b 56 fb
этоmov dx, word [rsi-5]
. Вы где-то ошиблись, записывая это? - person fuz   schedule 25.03.2018word [rsi-5]
иword [esi-5]
- person Kamil.S   schedule 25.03.2018rsi
или полагаться на то, чтоesi
является расширенным знаком, вы обычно можете изменить[esi-5]
на[rsi-5]
без вреда для себя. - person fuz   schedule 25.03.2018