Структура и образ памяти .Exe программы
Образ .exe программы в памяти [_], представленный на рис. 2.5, начинается с префикса программного сегмента PSP (Program Segment Prefix). Вслед за PSP располагаются сегменты программы. Сегментные регистры ES и DS автоматически инициализируются на начало PSP. Это даёт возможность, при сохранении значения одного из регистров, обращаться к нему в случае необходимости. В указатель команд IP загружается относительный адрес точки входа в программу, а в указатель стека SP - смещение конца сегмента стека.
Таким образом, после загрузки программы в память адресуемыми являются все сегменты, кроме сегмента данных. Инициализация регистра DS производится обычно в первых строках программы.
Листинг 1.4.Шаблон стандартного формата .exe программы.
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 AX, DataSg ; инициализация сегмента данных
MOV DS, AX
;Тело программы
MOV AH, 004Ch ; Функция DOS выхода из программы
MOV AL, [exCode] ; Возврат значения кода выхода
INT 21h ; Вызов DOS. Останов программы.
CODESG ENDS
END Start ; Конец программы
Листинг 1.5.Шаблон упрощенного формата .exe программы.
%TITLE “Шаблон стандартного формата .exe программ”
IDEAL
MODEL small
STACK 256
;Директивы INCLUDE “filename”
;Макроопределения EQU и =
DATASEG
;Если программа будет прервана по ошибке, то соответствующий код ошибки записывается в exCode и выполняется команда перехода на метку Exit.
exCode DB 0
;Описания других переменных
CODESEG
Start:
MOV AX, @DATA ; Установка в DS адреса сегмента данных
MOV DS, AX ;
MOV ES, AX ; Установка ES = DS
INT 21h ; Вызов DOS. Останов программы.
; Тело программы
Exit:
MOV AH, 004Ch ; Функция DOS выхода из программы
MOV AL, [exCode] ; Возврат значения кода выхода
INT 21h ; Вызов DOS. Останов программы.
END Start ; Конец программы