Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебн пособ по арх и прогр МП.doc
Скачиваний:
64
Добавлен:
10.12.2013
Размер:
1.59 Mб
Скачать

4.2.5. Структура программы.

Данная программа содержит упрощенные директивы определения сегментовDOSSEG,MODEL,STACK,DATASEGиCODESEG, а также директивуEND. В каждой программе на Ассемблере, чтобы обеспечить определение сегментов и управление ими, необходимы директивы определения сегментов (упрощенные или стандартные), а завершать программу на Ассемблере всегда должна директиваEND. Директивы описаныв разделах 4.5 и 4.6.

Рассмотрим, например, следующую программу:

IDEAL ;включаем режим IDEAL Tasm

DOSSEG ; директива упорядочивания сегментов

MODEL SMALL ; модели кода и данных ближнего типа

STACK 200h ; стек объемом 512 байт

DATASEG ; начало сегмента данных

DisplayString DB 13,10 ; описание какой-то переменной

CODESEG ; начало сегмента кода

Begin:

mov ax,@Data

mov ds,ax ; DS указывает на сегмент

; данных

.

.

.

mov ah,4ch ; функция DOS завершения

int 21h ; программы

END Begin ; директива, отмечающая конец исходного

; кода и указывающая, где начинать

; выполнение при запуске программы

4.2.6. Директивы startupcode и exitcode.

Директива STARTUPCODEвыполняет код инициализации программы, зависящий от текущей модели и операционной системы.

Синтаксис:

STARTUPCCODE;для режимаIDEAL

или

.STARTUP; для режимаMasm.

STARTUPCODEинициализирует регистры DS, SS и SP. Для моделейSMALL, MEDIUM, COMPACT, LARGE, HUGE и TRANSCAL TASMустанавливаетDSиSSна @data, аSP- на вершину стека. При использовании моделейTINYиTCHUGEдирективаSTARTUPCODEне изменяет содержимого сегментных регистров.

Идентификатор @Startupавтоматически помещается перед начальным кодом, генерируемым директивойSTARTUP, и представляет собой метку ближнего типа, указывающую на начало программы. Таким образом, в начале программы не нужно ставить метку (как в примере раздела 4.7, где на начало программы указывает метка Begin). Также не нужно указывать эту метку в директиве END.

Для автоматического создания в программе кода завершения программы, требуемого установленным типом операционной системы, предназначена директива EXITCODE. Ее можно указывать в нескольких местах программы, в которых необходимо указать точку выхода. Синтаксис в режимеIDEAL:

EXITCODE[код_возврата] ;для режимаIDEAL

.EXIT[код_возврата] ; для режимаMasm.

Необязательный параметр код_возврата - выражение, результат вычисления которого возвращается операционной системе по завершении работы программы. По умолчанию TASMприсваивает коду возврата значение, находящееся в регистре AX.

Таким образом, программа, представленная в разделе 4.7, может быть изменена:

IDEAL ;включаем режим IDEAL Tasm

DOSSEG ; директива упорядочивания сегментов

MODEL SMALL ; модели кода и данных ближнего типа

STACK 200h ; стек объемом 512 байт

DATASEG ; начало сегмента данных

DisplayString DB 13,10 ; описание какой-то переменной

CODESEG ; начало сегмента кода

STARTUPCODE ;директива, указывающая на начало программы

.

.

.

EXITCODE ;директива завершения программы

END ;директива, отмечающая конец исходного кода

Сравним с разделом 4.7. Видно, что программа стала более короткой и более простой для понимания и запоминания.