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

Структура В системах DOS и в 8-битной CP/M-80 COM-файл — простой тип исполняемого файла. Файл начинается с адреса 100h. В CP/M-80 может занимать адреса до верхней границы TPA. В DOS и CP/m-86 при выполнении файла код, данные и стек находятся в одном и том же 16-битном сегменте. Поэтому размер файла не может превышать 65280 байт (что на 256 байт меньше размера сегмента — 216 байт). COM-файлы для DOS можно выполнять в некоторых версиях Windows, OS/2, а также на эмуляторах, таких как DOSBox.

Кроме 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.

Совместимость Программы формата .COM не поддерживаются 64-разрядными версиями Windows. В таком случае, для их запуска можно использовать эмулятор DOS, например DOSBox.

Работа с памятью .COM — один из простейших форматов исполняемых файлов для процессоров семейства 8080 и x86. Программа, загруженная в память для исполнения, является точной копией файла на диске.

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

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

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

Примечания

Категория:DOS Категория:Форматы исполняемых файлов com