Ассемблер и программирование для IBM PC



       

ГЛАВА 7. Логика и Организация Программы - часть 8


ПРОЦЕДУРЫ И ОПЕРАТОР CALL ------------------------------------------------------------

В предыдущих главах примеры содержали в кодовом сегменте только oдну процедуру, оформленную следующим образом:

BEGIN PROC FAR . . BEGIN ENDP

Операнд FAR информирует систему о том, что данный адрес явля ется точкой входа для выполнения, а директива ENDP определя ет конец процедуры. Кодовый сегмент, однако, может содержать

Ассемблер для IBM PC. Глава 7 140

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

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

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

ъ Для передачи управления в процедуре BEGIN имеются две команды: CALL B10 и CALL C10. В результате первой коман ды CALL управление передается процедуре B10 и начинает ся ее выполнение. Достигнув команды RET, управление возвращается на команду непосредственно следующую за CALL B10. Вторая команда CALL действует аналогично - передает управление в процедуру C10, выполняет ее команды и возвращает управление по команде RET.

------------------------------------------------------------ ------------------------------------------------------------ Рис. 7.3. Вызов процедур.

ъ Команда RET всегда выполняет возврат в вызывающую про грамму. Программа BEGIN вызывает процедуры B10 и C10, которые возвращают управление обратно в BEGIN. Для выполнения самой программы BEGIN операционная система DOS вызывает ее и в конце выполнения команда RET возвра щает управление в DOS. Если процедура B10 не содержит завершающей команды RET, то выполнение команд продолжит ся из B10 непосредственно в процедуре C10. Если процедура C10 не содержит команды RET, то будут выпол няться команды, оказавшиеся за процедурой C10 с непред сказуемым результатом.




Содержание  Назад  Вперед