10. Подпрограммы. Объявление, вызов. - mRrvz/bmstu-asm GitHub Wiki
имя_подпрограммы PROC [NEAR | FAR] ; по умолчанию NEAR, если не указать
;тело подпрограммы;
ret [кол-во используемых локальный переменных] ; ничего не указывается, если не использовались локальные переменные на стеке
имя_подпрограммы ENDP
; вызов любой (в плане расстояния) подпрограммы
call имя_подпрограммы
- Сохраняет адрес следующей команды в стеке (уменьшает SP и записывает по его адресу IP либо CS:IP, в зависимости от размера аргумента)
- Передаёт управление на значение аргумента.
- Загружает из стека адрес возврата, увеличивает SP
- Если указан операнд, его значение будет дополнительно прибавлено к SP для очистки стека от параметров
Отличие RETN и RETF в том, что 1ая команда делает возврат при ближнем переходе, 2ая - при дальнем (различие в кол-ве байт, считываемых из стека при возврате). Если используется RET, то ассемблер сам выберет между RETN и RETF в зависимости от описание подпрограммы (процедуры).
- Используется в подпрограмме для сохранения "начального" значения SP
- Адресация параметров
- Адресация локальных переменных
(подробнее см. стек)