.COM

Материал из Википедии — свободной энциклопедии
Исполняемый файл DOS, CP/M
Расширение .com
MIME-тип application/x-dosexec[1]
Тип формата двоичный, исполняемый
Развит в .EXE, .CMD

.COM (

расширение файла
, использовалось в некоторых операционных системах в различных целях.

Структура

В системах

эмуляторах
.

Кроме COM-файлов DOS поддерживает файлы в формате

EXE, обладающие более сложной структурой. Тип файла определяется при запуске автоматически (в формате EXE в начале файла имеется специальная сигнатура), независимо от расширения. В CP/M-86 поддерживается файл формата .CMD
.

Примеры

Пример простой программы в формате .COM (для ассемблера

FASM
):

use16               ;Генерировать 16-битный код
org 100h            ;Программа начинается с адреса 100h
 
    mov dx, hello   ;В DX адрес строки.
    mov ah, 9       ;Номер функции DOS.
    int 21h         ;Обращение к функции DOS.
 
    mov ax, 4C00h   ;В регистр AH помещаем 4Ch, в AL – 00h.
    int 21h         ;Завершение программы
;-------------------------------------------------------
hello db 'Hello, world!$'

Директива «use 16» указывает ассемблеру, что нужно генерировать 16-битный код. Директива «org 100h» означает, что первая команда будет находиться по адресу 100h, а первые 256 байт (адреса 0000h – 00FFh) нужно пропустить (в этих адресах операционная система размещает префикс программного сегмента, PSP). Далее идут команды. Первой командой в регистр DX помещается адрес строки hello. Затем вызывается прерывание DOS int 21h с функцией 9, которая выводит строку на экран. При помощи функции 4Ch того же прерывания программа завершает работу (хотя здесь можно использовать и просто команду ret). Строка hello завершается символом ‘$’, который на экран не выводится, а сигнализирует конец строки для функции 9 прерывания int 21h[2].

Совместимость

Программы формата .COM не поддерживаются

эмулятор DOS, например DOSBox[2]
.

Работа с памятью

.COM — один из простейших форматов исполняемых файлов для процессоров семейства

8080 и x86. Программа, загруженная в память для исполнения, является точной копией файла на диске[2]
.

Запуск COM-программы в MS-DOS происходит следующим образом[3]:

  1. Система выделяет свободный сегмент памяти и заносит его адрес во все сегментные регистры (CS, DS, ES и SS).
  2. В первые 256 байт этого сегмента записывается
    PSP
    .
  3. Непосредственно за ним загружается содержимое COM-файла без изменений.
  4. Указатель стека (регистр SP) устанавливается на конец сегмента.
  5. В стек записывается 0000h (адрес возврата для команды ret).
  6. Управление передаётся по адресу CS:0100h, где находится первый байт исполняемого файла.

Модель памяти, используемую COM-программами, когда код программы, все её данные, PSP и стек расположены в одном сегменте, компиляторы высокоуровневых языков называют TINY (англ. tiny — крохотная).

Использование

COM-программы обычно являются небольшими приложениями, системными утилитами или небольшими резидентными программами[4].

Примечания

  1. https://github.com/file/file/blob/FILE5_37/magic/Magdir/msdos#L556 — 2019.
  2. 1 2 3 "Форматы файлов для программ на FASM под Windows". Архивировано 17 сентября 2018. Дата обращения: 17 сентября 2018.
  3. Фролов А., Фролов Г. MS-DOS для программиста. — М., 1995. — Т. 18.
  4. Банк лекций Siblec.ru - Электронная техника, радиотехника и связь. Формальные, технические, естественные, общественные, гуманитарные, и другие науки. 5.8. EXE- и COM-программы. Вычислительные машины, системы и сети. siblec.ru. Дата обращения: 17 сентября 2018. Архивировано 17 сентября 2018 года.