Структура и образ памяти .com программы

В MS DOS существует два типа исполняемых файлов: программы с расширением .com и .exe. Для исполняемых программ загружаемых в память DOS создает специальный блок размером в 256 байт (100h), называемый префиксом программного сегмента (PSP - Program Segment Prefix). Структура PSP показана в таблице 2.4.

Таблица 2.4.

Структура префикса программного сегмента [].

Смещение Назначение
00 - 15 Указатели и векторы адресов DOS
16 – 2B Зарезервировано
2C – 2D Адрес сегмента текущей строки описания конфигурации
2E – 5B Зарезервировано
5C – 7F Блоки управления файлами 1 и 2, используемые в первых версиях DOS
80 – FF Область переноса данных и копия текущего буфера команд.

Образ памяти программы типа .com показан на рис. 2.4. Программа типа .com содержит один сегмент, включающий все компоненты программы: PSP, программный код, данные и стек. Поэтому размер .com программы не может быть больше 64 кбайт минус размер PSP и два резервных байта в конце стека. После загрузки программы все сегментные инициализируются базовым адресом PSP. Пространство кодов начинается со смещением 100h, данные непосредственно следуют за кодами. Указатель стека автоматически инициализируется числом FFFEh.

 
 

В Листингах 2.1. и 2.2. рассматриваются шаблоны, содержащие только самое необходимое для написание .com программы.

Листинг 1.2.Шаблон стандартного формата .com программы.

TITLE “Шаблон упрощенного формата .com программ”

;Директивы INCLUDE “filename”

;Макроопределения EQU и =

DATASG SEGMENT Para ‘Data’

;Если программа будет прервана по ошибке, то соответствующий код ошибки записывается в exCode и выполняется команда перехода на метку Exit.

exCode DB 0

; описания других переменных

DATASG ENDS

STACKSG SEGMENT Para STACK ‘Stack’

db 100h dup(?)

STACKSG ENDS

CODESG SEGMENT Para ‘Code’

ASSUME CS:CODESG, DS:DATASG, SS:STACKSG

Start:

;тело программы, вызовы подпрограмм и т.п.

MOV AH, 004Ch ; Функция DOS выхода из программы

MOV AL, [exCode] ; Возврат значения кода выхода

INT 21h ; Вызов DOS. Останов программы.

END Start ; Конец программы

Листинг 1.3.Шаблон упрощенного формата .com программы.

%TITLE “Шаблон упрощенного формата .com программ”

IDEAL

MODEL tiny

;Директивы INCLUDE “filename”

;Макроопределения EQU и =

DATASEG

;Если программа будет прервана по ошибке, то соответствующий код ошибки записывается в exCode и выполняется команда перехода на метку Exit.

exCode DB 0

;Описания других переменных

CODESEG

ORG 100h ; Cстандартный адрес начала .com программы

Start:

;Тело программы

Exit:

MOV AH, 004Ch ; Функция DOS выхода из программы

MOV AL, [exCode] ; Возврат значения кода выхода

INT 21h ; Вызов DOS. Останов программы.

END Start ; Конец программы