Каковы различия между инструкциями по сборке с идентичными кодами операций, но с разными байтами? [Дубликат]

1
задан 30 October 2013 в 23:40
поделиться

1 ответ

Оба кода операций одинаковы. Это избыточность x86. Ассемблер может выбирать все, что ему нравится

Типичная инструкция архитектуры x86 имеет два кода операций. Первый из них имеет регистр как первый операнд и регистр или место памяти в качестве второго (это сокращенно "reg, reg/mem32" в ссылке на код операции или "Gv, Ev" в таблице опкодов). Операнды для второго кода операции обращаются (это сокращенно "reg/mem32, reg" или "Ev, Gv"). Это имеет смысл: процессор должен знать, копируется ли он в память или из памяти. Но когда оба операнда являются реестрами, кодирование становится избыточным:

                  ; mod reg r/m
03C3 add eax, ebx ;  11 000 011
01D8 add eax, ebx ;  11 011 000

Есть гораздо больше, чем просто стиль reg / reg, подобный этому. См. здесь

Различные сборщики генерируют разные коды операций, поэтому этот метод можно использовать для идентифицировать ассемблер

Некоторые ассемблеры позволяют вы можете выбрать кодировку. Например, GAS может испускать другую кодировку, если вы прикрепляете .s до конца

10 de   adcb   %bl,%dh
12 f3   adcb.s %bl,%dh

Что такое & quot ;.s & quot; суффикс в инструкциях x86?

5
ответ дан phuclv 3 September 2018 в 17:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: