пятница, 22 мая 2009 г.

Директива MODEL

Сегодня поиграем с упрощенными директивами сегментации. Итак прога:

Стек хоть и не используется в нашей программе, определен для наглядности, размер стека так же выбран маленький чтобы его можно было увидеть в отладчике.
Смотрим листинг и EXE, созданные TASM:

Обращаем внимание на то что выделено красным, а так же что хотя мы определили данные и стек перед кодом, упрощенные директивы TASM, расположили сперва код, потом данные, потом стек. Причем хотя для данных в листинге видим выравнивание типа WORD, по факту TASM сделал выравнивание типа PARA, что видно на скрине экзешника. Так же стоит помедитировать на идентификаторы (Symbol Name) созданые TASM.

Теперь посмотрим как эту прогру оттранслировал MASM:

MASM обошёлся с атрибутами выравнивания более праведным образом. Из скрина EXE видно, что данные выравнены в соответствии с атрибутом WORD, что соответствует листингу программы. Соответственно размер программы оттранслированной MASM меньше на 14 байт, чем то, что сделал TASM.
Теперь побыстрому проги в отладчик и медитируем :)

Еще стоит заметить, что при использовании упрощенных директив сегментации, сегмент стека, хоть и определяется, но не создается в исполняемых файлах на диске. Он создается только в памяти.

Ну и на последок, так же прога но в режиме IDEAL TASM.

TASM оттранслировал ее с тем же размером, что и в режиме совместимости с MASM. В режиме IDEAL, как помним, чуток изменены названия директив определения сегментов.

Комментариев нет: