Опкод D0 /6

Тема в разделе "WASM.ASSEMBLER", создана пользователем Awk, 29 сен 2008.

  1. Awk

    Awk New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2006
    Сообщения:
    8
    Добрый денечек!

    Ковырял одну вещь, обнаружил там такую инструкцию: "D0 F0".
    Opcode = D0
    ModRM = F0 = (Mod=11) (R/O=110) (R/M=000)

    В манах от Intel и AMD такого не нашёл, Olly распознаёт как нечто вроде "sal r/m8, 1", при выполнении и правда производит умножение на 2. Вопрос вот в чём - нельзя ли объяснить это явление с помощью официальной документации, или это действительно недокументированная инструкция?
     
  2. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    sal al,1
    ранний вариант
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    По логике кодировки поля Reg в сдвиговых операциях 100\101 соответствует логическим сдвигам shl\shr, а 110\111 арифметическим sal\sar, но т.к. sal==shl, то значение 110 для sal практически не используется, хотя декодируется правильно
     
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.787
    Awk
    Кодировка арифметических, логических и циклических сдвигов имеет следующий формат:
    15|14|13|12|11|10|09| 08 | 7-6| 5-4| 03 |2-0|
    ------------------------------------------------
    1 | 1 | 0 | C| 0 | 0 |V |W/B |MOD|КОП|R/L|R/M|
    Бит С, в данном случае, определяет количество сдвигов, если он равен 0 — количество сдвигов задается непосредственно в команде, если C=1 количество сдвигов или равно 1, или задается регистром CL. Бит W/B определяет размер операнда — байт или слово/двойное слово. Бит V установлен в 0, если счетчик равен 1, V=1 если счетчик задается регистром CL. Биты 7 и 6 во втором байте определяют режим адресации, биты 5 и 4 — код операции сдвига, бит R/L — направление сдвига, биты R/M — операнд-получатель, определяемый из режима адресации. Обычно по команде «SAL» транслятор генерирует код команды SHL, хотя существует код команды SAL — D0Fx, который не всегда распознается дебагерами, но выполняется микропроцессором.
    КОП|R/L| Название |Команда |код
    ----------------------------------------------------------------------------------
    00 | 0 |циклический сдвиг операнда влево |ROL AL,1 |D0C0
    01 | 0 |циклический сдвиг через перенос влево|RCL AL,1 |D0D0
    10 | 0 |логический сдвиг влево |SHL AL,1 |D0E0
    11 | 0 |арифметический сдвиг влево |SAL AL,1 (только в кодах)|D0F0
    11 | 1 |арифметический сдвиг вправо |SAR AL,1 |D0F8
     
  5. Awk

    Awk New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2006
    Сообщения:
    8
    Картина прояснилась, всем спасибо за ответы!
    Больше вопросов по этому поводу не имею.