· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› MASM оптимизация

Посл.отвђт Сообщенiе


Дата: Окт 29, 2004 10:18:06

Здравствуйте,

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

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

а он генерит:

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

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

Спасибо


Дата: Окт 29, 2004 13:20:35

Дык во 2м случае код меньше на байт.


Дата: Окт 29, 2004 13:45:48

может надо сказать assume ds:<сегмент_отличный_от_ассумед_для_ss> и он поставит префикс ?
или тупо перед командой написать segds


Дата: Окт 29, 2004 14:02:58

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

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

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


Дата: Окт 30, 2004 05:04:14

Или FASM


Дата: Окт 30, 2004 06:18:21

Ничего не понимаю - TASM что вставляет префикс переопределения сегмента перед командой которая вообще к памяти не обращается?


Дата: Окт 30, 2004 08:53:01

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


Дата: Окт 30, 2004 15:45:45 · Поправил: The Svin

sep
В общем я согласен, что MASM тяжело управляем но в этом случае
MASM не вставляет префикса хотя ему это явно указали в команду которая вообще это префикс принципиально использовать не может.
Это то же что требовать вставить префикс повторения перед mov например
repe mov eax,ecx
Если подойти формально (будь мы компилятором :) можно добится ведь чтобы требования мнемоники соблюдалось и без префикса переопределения сегмента, и тогда вообще претензий быть не может :)
lea ecx, dword ptr ds:[ebp*1][dwData]
Тогда формально будет адресоваться DS и без префикса переопределения сегмента, подчёркиваю формально т.к. значение сегментного регистра вообще ни как не влияет на то что загрузится в приемник. Но если разбирать modrm как отдельную сущность то при указанном синтаксисе ebp окажется в битовом поле индексного регистра и уже так как базовый регистр просто будет отсутсвовать modrm по умолчанию будет трактоваться декодором как обращающийся к DS.


Дата: Окт 30, 2004 17:33:47

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


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.045