Урок 4

Процедуры и оператор CALL

Типичный синтаксис процедуры:

NAME PROC FAR
.
.
NAME ENDP

Операнд FAR информирует систему о том, что данный адрес явля ется точкой входа для выполнения, а директива ENDP определя ет конец процедуры. Кодовый сегмент, однако, может содержать любое количество процедур, которые разделяются директивами PROC и ENDP. Типичная организация многопроцедурной программы приведена на рис. 7.3. Обратите внимание на следующие особенности:

директивы PROC по меткам B10 и C10 имеют операнд NEAR

для указания того, что эти процедуры находятся в текущем кодовом сегменте. Во многих последующих примерах этот операнд опущен, так как по умолчанию ассемблер принимает тип NEAR.

Каждая процедура имеет уникальное имя и содержит собственную директиву ENDP для указания конца процедуры.

Команда RET всегда выполняет возврат в вызывающую программу.

Использование процедур дает хорошую возможность организовать логическую структуру программы. Кроме того, операнды для команды CALL могут иметь значения, выходящие за границу от -128 до +127 байт. Технически управление в процедуру типа NEAR может быть передано с помощью команд перехода или даже обычным построчным кодированием. Но в большенстве случаев рекомендуется использовать команду CALL для передачи управления в процедуру и команду RET для возврата.

Прерывания

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

int номер_прерывания

где номер_прерывания - число от нуля до 255 (в компьютере IBM PC возможны лишь 256 различных процедур обработки прерываний). Каждому номеру сопоставляется адрес обработчика прерывания и внешнее событие, которое это прерывание вызывает. В MS-DOS прерывания используются для выполнения системных функций. Для того, чтоюы вызвать функцию DOS, нужно заполнить регистры общего назначения и выполнить команду int 21h. Подробна каждая функция описана в справочниках. Вот один из них: http://www.codenet.ru/progr/dos/