MASM оптимизация

Тема в разделе "WASM.WIN32", создана пользователем sep, 29 окт 2004.

  1. sep

    sep New Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    51
    Здравствуйте,



    Как бы сабж отключить навсегда ? В TASM есть замечательная директива NOSMART, а есть ли что-то подобное в MASM ? Проблема в том, что пишу в тексте:



    lea ecx, dword ptr ds:[ebp+dwData]



    а он генерит:



    lea ecx, dword ptr ss:[ebp+dwData]



    Как его заставить генерить тот код какой я пишу ?



    Спасибо
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Дык во 2м случае код меньше на байт.
     
  3. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    может надо сказать assume ds:<сегмент_отличный_от_ассумед_для_ss> и он поставит префикс ?

    или тупо перед командой написать segds
     
  4. sep

    sep New Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    51
    S_T_A_S_

    Это хорошо, что меньше, но это самодеятельность :) Я же явно указал префикс замены сегмента.



    infern0

    Я так понял, что в MASM нельзя отключить оптимизацию как в TASM. Всю документацию и FAQ перерыл.



    Проблему решил пока написанием "db 3eh" перед командой, но в данном случае наверное проще взять TASM.
     
  5. Foamplast

    Foamplast New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2003
    Сообщения:
    80
    Адрес:
    Russia
    Или FASM
     
  6. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    Ничего не понимаю - TASM что вставляет префикс переопределения сегмента перед командой которая вообще к памяти не обращается?
     
  7. sep

    sep New Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    51
    The Svin

    Это MASM не вставляет префикса хотя ему это явно указали
     
  8. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    sep

    В общем я согласен, что MASM тяжело управляем но в этом случае

    MASM не вставляет префикса хотя ему это явно указали в команду которая вообще это префикс принципиально использовать не может.

    Это то же что требовать вставить префикс повторения перед mov например

    repe mov eax,ecx

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

    lea ecx, dword ptr ds:[ebp*1][dwData]

    Тогда формально будет адресоваться DS и без префикса переопределения сегмента, подчёркиваю формально т.к. значение сегментного регистра вообще ни как не влияет на то что загрузится в приемник. Но если разбирать modrm как отдельную сущность то при указанном синтаксисе ebp окажется в битовом поле индексного регистра и уже так как базовый регистр просто будет отсутсвовать modrm по умолчанию будет трактоваться декодором как обращающийся к DS.
     
  9. sep

    sep New Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    51
    The Svin

    Спасибо за помощь :) Вы очень помогли.