2.7. Основи програмування. виклики підпрограм
Практично в будь-якій програмі, незалежно від її змісту, зустрічаються ділянки, які потрібно виконувати (можливо, з невеликими змінами) кілька разів по ходу програми. Такі повторювані ділянки доцільно виділити із загальної програми, оформити у вигляді підпрограм і звертатися до них кожного разу, коли в основній програмі виникає необхідність їх виконання.
Підпрограма, в залежності від виконуваних нею функцій, може вимагати передачі з викликає програми певних даних (званих аргументами, або параметрами), повертати в зухвалу програму результати обчислень або обходитися і без того, і без іншого.
Підпрограма може бути оформлена у вигляді процедури, і тоді ім'я цієї процедури буде служити точкою входу в підпрограму:
drawline proc; Підпрограма-процедура
. ; Тіло підпрограми
ret; Команда повернення в зухвалу програму
drawline endp
З таким же успіхом можна обійтися без процедури, просто помітивши перший рядок програми деякою міткою:
drawline:; Підпрограма, що починається з мітки
. ; Тіло підпрограми
ret; Команда повернення в зухвалу програму
. ; Продовження основної програми або
; Інші підпрограми
code segment
main proc; Основна програма
...
call sub; Код Е8 dddd
...
main endp
sub proc near; Підпрограма
...
ret; Код СЗ
sub endp
code ends
Мал. 2.16. Участь стека в механізмі виклику ближньої підпрограми.
codel segment
assume CS: codel
main proc; Основна програма
call far ptr subr; Код 9А dddd ssss
...
main endp
codel ends
code2 segment
assume CS: code2
subr proc far; Оголошуємо підпрограму далекої
...
ret; Код СВ - дальній повернення
subr endp
code2 ends
Мал. 2.17. Участь стека в механізмі виклику дальньої підпрограми.