Структура и образ памяти .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 ; Конец программы