Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Финогенов-основы_языка_ассемблера.doc
Скачиваний:
45
Добавлен:
17.09.2019
Размер:
3.35 Mб
Скачать

Глава 3

Команды и алгоритмы

99

тельно треть этих программ написана в формате .COM (COMMAND.COM, FORMAT.COM; SYS.COM и др.), а две трети - в формате .EXE (FC.EXE, PRINT.EXE, XCOPY.EXE и т.д.). Ниже мы рассмотрим правила составле­ния и особенности исполнения как .ЕХЕ-, так и .СОМ-программ.

Другой критерий классификации программ определяет способ взаимо­действия прикладной программы с другими программам и самой DOS. По этому критерию программы делятся на два вида: транзитные и резидентные. Ход выполнения транзитной программы (а к транзитным относится подавляющее большинство приложений DOS) выглядит следующим об­разом. Пользователь запускает программу, вводя с клавиатуры ее имя, завершаемое нажатием клавиши Enter. Соответствующие программы-ком­поненты DOS отыскивают на диске файл с указанным именем, загружа­ют его в память и передают управление на входную точку этой программы. Далее программа выполняется, фактически монополизируя ресурсы ком­пьютера. Пока она на завершилась, пользователь не имеет доступа к DOS и, соответственно, лишен возможности запустить другую программу или выполнить какую-либо команду DOS. Ввод с клавиатуры возможен толь­ко в ответ на запрос текущей программы, если в ней предусмотрено обра­щение к клавиатуре за получением каких-либо данных.

Совсем по-другому функционирует резидентная программа. Пользо­ватель запускает се точно так же, как и транзитную, вводя с клавиатуры ее имя. Программы DOS загружают программный файл в память и переда­ют упраштенис на точку входа. Однако дальше вычислительный процесс развивается по-иному. Программа выполняет только свой начальный, инициализирующий фрагмент, после чего вызывает специальную функ­цию DOS (с номером 31h). Эта функция завершает программу и возвра­щает управление в DOS, но не освобождает память от завершившейся программы, а остаатяет эту программу в памяти, делая се резидентной. Программа остается в памяти и, можно сказать, ничего не делает. По­скольку управление передано DOS, пользователь может вводить с клави­атуры любые команды и, в частности, запускать другие транзитные (или резидентные) программы. Когда будет активизирована находящаяся в па­мяти резидентная программа' Как правило, резидентные программы вклю­чают в себя обработчики аппаратных или программных прерываний. Если, например, в резидентной программе имеется обработчик прерываний от системного таймера, который, как известно, выдает сигналы прерыва­ний приблизительно 18 раз в секунду, то каждое такое прерывание будет предавать управление резидентной программе, которая может, например, периодически выводить на экран текущее время или какую-то иную ин­формацию. Работа резидентной программы будет протекать независимо от других программ и параллельно с ними. Другим классическим примером резидентной программы является русификатор клавиатуры, который по­лучает управление при нажатии любой клавиши, независимо от того, какая программа сейчас выполняется. Задача русификатора — определить по имеющемуся в нем флагу, на каком языке работает пользователь, и в необходимых случаях сформировать соответствующий нажатой клавише код ASCII русской буквы.

Следует заметить, что необходимость в резидентных программах воз­никла лишь потому, что MS-DOS является существенно однозадачной системой. В многозадачной операционной системе Windows понятие рези­дентной программы в принципе отсутствует.

Разумеется, своими особенностями составления и функционирова­ния обладают и обработчики прерываний — чрезвычайно важный класс программ, обслуживающих многочисленные внешние устройства компь­ютера — клавиатуру, мышь, магнитные диски и проч., а также нестан­дартную аппаратуру, если компьютер используется для управления науч­ной установкой или технологическим процессом.

Рассмотрим основные правила составления и функционирования пе­речисленных типов программ, чтобы в дальнейшем можно было исполь­зовать их в примерах, иллюстрирующих те или иные средства языка ас­семблера.

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

Характерные особенности программ типа .ЕХЕ подробно рассматри-тись в предыдущих главах. Приведем еще несколько обобщающих сооб-сений. Структура типичной программы на языке ассемблера выглядит тедующим образом.

.586

code segment use 16

assume CS:code, main proc

mov AX,data mov DS,AX

mov AX,4COOh

hit 2 111 main endp code ends data segment use!6

data ends

stk segment stack

db 256 dup(O) stk ends

end main

разрешение трансляции всех ;команд (386-486-Pentium) ;Начало сегмента команд ; 16-разрядное приложение DS:data

; Начало главной процедуры Инициализация ;сегментного регистра DS ;Текст главной процедуры ;Вызов функции DOS ;завершения программы ;Конец главной процедуры ;Конец сегмента команд ;Начато сегмента данных ;Опрсдсления данных ;Конец сегмента данных ; Начало сегмента стека ;Стек

;Консц сегмента стека ;Консц программы и точка входа

Программа начинается с директивы ассемблера .586, разрешающей Использовать в тексте программы весь набор команд процессора Pentium (кроме привилегированных). Если программа будет использовать только базовый набор команд МП 86, указание этой директивы не обязательно.

100