3.3.4. Процедуры

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

метка ргос      язык тип USES регистры     ; TASM

ИЛИ

метка ргос      тип язык USES регистры     ; MASM/WASM

ret

метка , endp

Все операнды PROC необязательны.

Тип может принимать значения NEAR и FAR, и если он указан, все команды RET в теле процедуры будут заменены соответственно на RETN и RETE По умол­чанию подразумевается, что процедура имеет тип NEAR в моделях памяти TINY, SMALL и COMPACT.

Операнд «язык» действует аналогично такому же операнду директивы .MODEL, определяя взаимодействие процедуры с языками высокого уровня. В некоторых ассемблерах директива PROC позволяет также считать параметры, передаваемые

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

USES - список регистров, значения которых изменяет процедура. Ассемблер по­мещает в начало процедуры набор команд PUSH, а перед командой RET - набор

команд POP, так что значения перечисленных регистров будут восстановлены.