Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы (книга Комаров) / Программирование на Ассемблере (ч 1).doc
Скачиваний:
148
Добавлен:
08.03.2015
Размер:
435.2 Кб
Скачать

3.4. Типовая структура текста программы

В общем случае ассемблерная программа представляет собой совокупность логических сегментов данных, стека и программного кода.

Для улучшения сопровождаемости программы ее текст должен иметь структурированную форму. При этом наиболее целесообразно использовать паскалеобразную структуру текста, которая имеет вид:

NAME Имя_программы

; Описание констант

Здесь описываются поименованные константы

; Описание нестандартных типов данных

Здесь описываются создаваемые пользователем нестандартные типы данных (структуры и записи)

; Описание переменных (сегмент данных)

Data SEGMENT

Здесь описываются переменные стандартных и нестандартных типов данных

Data ENDS

; Описание стека (сегмент стека)

Stack SEGMENT

DW 16DUP(?) ; Резервирование 16 слов под стек

StkTop LABELWORD ; Фиксация верхушки пустого стека

Stack ENDS

; Описание выполняемых действий (сегмент программного кода)

Code SEGMENT

ASSUMECS:Code, DS:Data, ES:Data, SS:Stack

; Описание программных исполнителей

Здесь описываются подпрограммы и макрокоманды, используемые в программе

; Основная программа (исполняемая часть)

Start:MOV AX, Data ; Инициализация

MOV DS, AX ; сегментных

MOV ES, AX ; регистров и

MOV AX, Stack ; указателя стека

MOV SS, AX

MOV SP, OFFSETStkTop

Здесь приводятся команды, решающие поставленную задачу

Code ENDS

ENDStart

Директива NAME присваивает внутреннее имя объектному модулю, генерируемому ассемблером при трансляции программы. Это имя используется для обращения к модулю при модульном программировании. В простейшем случае директива NAMEможет отсутствовать.

Далее программа содержит необязательные разделы описания поименованных констант и нестандартных типов данных, которые не вызывают расходования памяти системы.

Состояние и объем используемой памяти определяется логическими сегментами программы Data, Stack и Code, описанных директивами SEGMENTиENDS.

В сегменте данных Data описываются переменные стандартных и нестандартных типов, используемые в программе.

В сегменте стека Stack с помощью оператораDUP(?) зарезервировано 16 слов. ДирективаLABEL присваивает имя текущей ячейке памяти и определяет его тип. ПосколькуLABEL расположена за зарезервированной зоной памяти, то имя StkTop будет присвоено следующему слову, что определит верхушку пустого стека.

Сегмент программного кода Code содержит директиву ASSUME, связывающую имена сегментов с сегментными регистрами. При этом сегмент данных связан с регистрами DS и ES, что обеспечивает совмещение основного и дополнительного сегментов данных. Далее описываются подпрограммы и макрокоманды, используемые в программе. Начало исполняемой части программы обязательно помечается стартовой меткой, фиксирующей пусковой адрес программы. Исполняемая часть программы всегда начинается с инициализации сегментных регистров и указателя стека. После этого следуют команды, решающие поставленную задачу.

Текст программы завершается директивой END, в которой указывается стартовый адрес программы. Она сообщает ассемблеру о достижении конца исходного текста программы и необходимости ее запуска с команды, помеченной меткой Start.

Для успешного программирования на ассемблере необходимо научиться заполнять все разделы и сегменты типовой структуры программы.