Иллюстрированный самоучитель по Assembler


Организация приложений MS-DOS - часть 12


Рис. 3.1.

Образ памяти программы .СОМ

Программы типа .СОМ отличаются от .ЕХЕ-программ не только отсутствием сегментов данных и стека. В гл. 2 было показано, что при выравнивании сегментов на байт, что делается с помощью описателя byte

data segment byte

системные программы располагают сегменты загружаемой программы с некоторым перекрытием, что позволяет избежать пустых промежутков между сегментами в памяти, возникающих из-за того, что размеры сегментов могут быть не кратны величине параграфа - 16 байт. Такое расположение сегментов требует изменения значений ссылок на адреса ячеек памяти. В состав программного файла с расширением .ЕХЕ входит таблица с перечнем байтов программы, содержимое которых может подвергнуться изменению в процессе загрузки программы в память. Поэтому, кстати, размер файла с расширением .ЕХЕ может превышать истинный размер программы в памяти.

Программа типа .СОМ состоит из единственного сегмента, и проблема настройки ссылок не возникает. Файл с расширением .СОМ почти в точности отражает содержимое памяти после загрузки программы. Отличие заключается только в том, что в программном файле отсутствует префикс программы PSP, который система вставляет в программу в процессе ее загрузки. Таким образом, файл с расширением .СОМ обычно оказывается на 256 байт короче своего образа в памяти.

Если оттранслировать и скомпоновать программу, написанную в формате .СОМ, обычным образом, образуется программный файл с расширением .ЕХЕ. Этот файл можно запустить на выполнение, однако работать он будет неверно. Дело в том, что система, загружая файл типа .ЕХЕ в память, пристраивает перед загруженной программой префикс и настраивает на него регистры DS и ES. В результате значение DS окажется на 10h меньше, чем сегментный адрес сегмента с командами и данными, что приведет к неправильной адресации при обращении к полям данных. Программу, написанную в формате .СОМ, можно запускать только в виде файла с расширением .СОМ, для которого в DOS предусмотрен CBI алгоритм загрузки и запуска. Для того, чтобы компоновщик создал файл с расширением .СОМ, в строке запуска компоновщика необходимо предусмотреть ключ /t (при использовании компоновщика TLINK.EXE):




- Начало -  - Назад -  - Вперед -



Книжный магазин