одна мнемоника, несколько опкодов

Тема в разделе "WASM.ASSEMBLER", создана пользователем hello_world, 10 апр 2006.

  1. hello_world

    hello_world New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2003
    Сообщения:
    55
    Адрес:
    москва
    Всем привет.

    Вопрос вроде простой, но внятного обьяснения нигде не нашел.

    Для чего существуют "сокращенные" варианты опкодов, которые позволяют делать тоже самое, что и обычные, только без байта mod r/m?

    Например:
    Код (Text):
    1.  
    2. 00000000: 8B0544332211                 mov       eax,[011223344]
    3. 00000006: A144332211                   mov       eax,[011223344]
    4.  


    Т.е. я не пойму какой в этом смысл. Или они чем-то различаются (например скоростью)?

    Еще вопрос в том, всегда ли HLL компиляторы генерят "сокращенные" опкоды?
     
  2. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    1. Нужно смотреть как с исторической перспективы так и с точки зрения какие возможности даёт сам формат.

    Сам формат уж если используется в конкретном варианте modrm позволяет в частности закодировать в качестве контейнера любой из регистров общего назначения которые входят в кодировку трёх битного поля в купе с префиксами(66) и переключателем множества полные\неполные регистры (w). Т.е. дешифратор уже декодирует modrm как - то и если поле закодировано по его правилам, есть или нет ещё другая возможность (опкод) он тупо декодирует.

    А с точки исторической перспективы - важна была очень память, поэтому подход отличался от нынешного универсального (в смысле что сейчас уже мы адресовать можем любыми регистрами, и цепочками пользуемся не так часто), преобладали цепочки, ax\al\ah имели большую нагрузку чем при универсальном подходе. Поэтому для них вводили альтернативные инструкции, они работали побыстрее и были покороче. Можно было кодировать и обычным способом (см. выше про логику дешифратора) но рекомендовалось для ax (акумулятора) использовать альтернативные.

    Сейчас - не скажу быстрее они или медленне, скороее всего всё едино, ну ты очень общЁ спрашиваешь. Непонятно про какие модели x86, поэтому точно ответить невозможно.



    По поводу второго вопроса - тоже слишком общЁ, не думаю что существует человек который видел\пробывал\стал специалистом по всем компиляторам.

    Можно говорить как о тенденции лишь, что, например, ассемблеры для x86 в большинстве (т.е. не все) стараются выбрать более компактный опкод если есть альтернативы в кодировании. А про HLL - там от многого может зависить. В частности и от опций компиляции, процессора для которого оптимизируется и ещё черте чего.
     
  3. hello_world

    hello_world New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2003
    Сообщения:
    55
    Адрес:
    москва
    The Svin

    Спасибо. Я так и думал что дело в совместимости.

    Вопрос задал потому, что мне надо написать небольшой ассемблер (с поддержкой 15-20 мнемоник и mod r/m) и меня удивила нелогичность кодирования некоторых команд.

    А по поводу HLL вопрос отпал, потому что я нашел тулзу pe_stat :)
     
  4. SDragon

    SDragon New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2005
    Сообщения:
    133
    Адрес:
    Siberia


    А что это за штука и где ее можно найти? (Искал гуглом, не нашел)
     
  5. hello_world

    hello_world New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2003
    Сообщения:
    55
    Адрес:
    москва
  6. SDragon

    SDragon New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2005
    Сообщения:
    133
    Адрес:
    Siberia
    Спасибо!