В 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; Конец программы