Типы программ

В операционной системе MSDOS машинный код программ хранится в файлах с расширением «ЕХЕ», либо «СОМ». Соответственно принято различать два типа программ.

Программы ЕХЕ состоят из трех основных сегментов: кода, данных, стека.

 

Рис.4.1. Программа типа ЕХЕ.

Программы типа СОМ занимают в оперативной памяти один сегмент – 64Кб. В сегменте расположены код, данные и стек.

Рис.4.2. Программа типа СОМ. Дно стека 65534.

Причем стек формируется в процессе запуска программы.

Независимо от типа программы обе они снабжаются ОС специальным блоком – префиксом сегмента программы (PSP). Размер этого блока всегда постоянный и равен 256 байтов. В нем в виде битовых полей хранится служебная информация для данной программы, переданная ей при запуске.

При разработке программ на Microsoft ассемблере нужно ввести описания ее сегментов. Для задания сегмента служит директива.

имя SEGMENT [атрибуты]

;содержание сегмента

имя ENDS

Атрибуты указывают:

способ выравнивания сегмента в оперативной памяти;

тип объединения;

имя класса.

Способ выравнивания по умолчанию задается на границу параграфа. Тип объединения показывает каким образом данный логический сегмент должен быть объединен с другим логическим сегментом имеющим тоже имя и находящимся в другом исходном модуле. Для сегмента стека тип объединения должен быть задан как STACK.

С помощью директивы ASSUME выполняют привязку сегментов программы к регистрам процессора.

Директива имеет вид:

ASSUME сегментный регистр : имя сегмента

Для СОМ программ необходимо наличие еще одной директивы:

ORG выражение – задает ассемблеру адрес (смещение) следующей ячейки оперативной памяти. Для СОМ программ необходимо указать смещение на величину PSP.

Как видно из рисунка 4.1. при запуске «ЕХЕ» программы регистр DS хранит адрес не сегмента данных, а PSP программы. Он должен быть настроен на сегмент данных программным кодом.

При запуске «СОМ» программы регистры автоматически загружаются адресами сегмента программы, благодаря директиве ORG.

Пример №1. Структура «ЕХЕ» программы.


;EXE program

codesg segment 'CODE'

assume CS: codesg,DS: datasg,

SS: stacksg

begin:

 

;Настройка регистра

;сегмента данных

;----------------------------

;Команды программы

;----------------------------

 

;Завершение работы программы

codesg ends

 

datasg segment 'DATA'

;Описание данных

datasg ends

stacksg segment stack 'STACK'

;Размер стека

stacksg ends

end begin ;Точка входа в

;программу


Пример №2. Структура «СОМ» программы.

;COM program

codesg segment 'CODE'

assume CS: codesg,DS: codesg

;----------------------------

org 100h

begin:

;Команды программы

;----------------------------

;Завершение работы программы

codesg ends

end begin ;Точка входа в программу