WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте
Исполняемый файл DOS, CP/M
Расширение .com
Тип формата двоичный, исполняемый
Развит в .EXE

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

Структура

В системах DOS и в 8-битной CP/M COM-файл — простой тип исполняемого файла, при выполнении которого данные, код и стек находятся в одном и том же 16-битном сегменте. Поэтому размер файла не может превышать 65280 байт (что на 256 байт меньше размера сегмента — 216 байт). COM-файлы для DOS можно выполнять в некоторых версиях Windows, а также на эмуляторах.

Кроме COM-файлов DOS поддерживает файлы в формате EXE, обладающие более сложной структурой. Тип файла определяется при запуске автоматически (в формате EXE в начале файла имеется специальная сигнатура), независимо от расширения.

Примеры

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

 1 use16               ;Генерировать 16-битный код
 2 org 100h            ;Программа начинается с адреса 100h
 3  
 4     mov dx, hello   ;В DX адрес строки.
 5     mov ah, 9       ;Номер функции DOS.
 6     int 21h         ;Обращение к функции DOS.
 7  
 8     mov ax, 4C00h   ;В регистр AH помещаем 4Ch, в AL – 00h.
 9     int 21h         ;Завершение программы
10 ;-------------------------------------------------------
11 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[1].

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

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

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

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

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

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

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

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

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

См. также

Примечания

  1. 1 2 3 Форматы файлов для программ на FASM под Windows (рус.). Проверено 17 сентября 2018.
  2. Фролов А., Фролов Г. MS-DOS для программиста. — М, 1995. — Т. 18.
  3. Банк лекций Siblec.ru - Электронная техника, радиотехника и связь. Формальные, технические, естественные, общественные, гуманитарные, и другие науки. 5.8. EXE- и COM-программы. Вычислительные машины, системы и сети. siblec.ru. Проверено 17 сентября 2018.

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии