Шаг 46.
Программы в COM-файлах

    На этом шаге мы рассмотрим структуру COM-файлов.

    Компоновщик LINK автоматически генерирует особый формат EXE-файлов, в котором присутствует специальный начальный блок (заголовок) размером не менее 512 байт. Программа EXE2BIN преобразует EXE-файлы в COM-файлы.

    Перечислим основные различия между EXE и COM-программами:

    Когда COM-программа начинает работать, то все сегментные регистры содержат адрес префикса программного сегмента (PSP) размером 256 байт (100h). Он содержит различную служебную информацию, в том числе команду выхода в DOS и стек. Префикс программного сегмента организуется как при выполнении COM-файла, так и при выполнении EXE-файла. Разница заключается в том, что PSP в COM-файле расположен в кодовом сегменте, в то время как для EXE-файла он создается вне кодового сегмента. Таким образом, адресация в сегменте кодов для COM-файла должна начинаться со смещения 100h от начала PSP, и, следовательно, после директивы SEGMENT в программе должна стоять директива ORG 100H для пропуска PSP:


Рис.1. Размещение в памяти COM- и EXE-программ

    Напомним, что если программа создается как COM-файл, то компоновщиком будет выдано сообщение: Warning: No STACK Segment. Это сообщение можно игнорировать, так как определение стека в программе не предполагалось. Для преобразования EXE-файла в COM-файл используется программа EXE2BIN, общий вид использования которой следующий:

             EXE2BIN  <EXE-файл>  <COM-файл>      .

    Например, команда:

           EXE2BIN CALC.EXE CALC.COM 

образует из файла CALC.EXE файл CALC.COM. Таким образом, на диске будут находиться два файла с одинаковыми именами, но различными расширениями.

    С дополнительной информацией по получению COM-файлов можно познакомиться на 26 шаге.

    Со следующего шага мы начнем рассматривать обработку символьной информации.




Предыдущий шаг Содержание Следующий шаг