Здравствуйте, Как бы сабж отключить навсегда ? В TASM есть замечательная директива NOSMART, а есть ли что-то подобное в MASM ? Проблема в том, что пишу в тексте: lea ecx, dword ptr ds:[ebp+dwData] а он генерит: lea ecx, dword ptr ss:[ebp+dwData] Как его заставить генерить тот код какой я пишу ? Спасибо
может надо сказать assume ds:<сегмент_отличный_от_ассумед_для_ss> и он поставит префикс ? или тупо перед командой написать segds
S_T_A_S_ Это хорошо, что меньше, но это самодеятельность Я же явно указал префикс замены сегмента. infern0 Я так понял, что в MASM нельзя отключить оптимизацию как в TASM. Всю документацию и FAQ перерыл. Проблему решил пока написанием "db 3eh" перед командой, но в данном случае наверное проще взять TASM.
Ничего не понимаю - TASM что вставляет префикс переопределения сегмента перед командой которая вообще к памяти не обращается?
sep В общем я согласен, что MASM тяжело управляем но в этом случае MASM не вставляет префикса хотя ему это явно указали в команду которая вообще это префикс принципиально использовать не может. Это то же что требовать вставить префикс повторения перед mov например repe mov eax,ecx Если подойти формально (будь мы компилятором можно добится ведь чтобы требования мнемоники соблюдалось и без префикса переопределения сегмента, и тогда вообще претензий быть не может lea ecx, dword ptr ds:[ebp*1][dwData] Тогда формально будет адресоваться DS и без префикса переопределения сегмента, подчёркиваю формально т.к. значение сегментного регистра вообще ни как не влияет на то что загрузится в приемник. Но если разбирать modrm как отдельную сущность то при указанном синтаксисе ebp окажется в битовом поле индексного регистра и уже так как базовый регистр просто будет отсутсвовать modrm по умолчанию будет трактоваться декодором как обращающийся к DS.