Учитывая ограниченные возможности памяти при разработке программ, нужно стараться сделать их как можно короче. С этой целью часть программы, которые неоднократно повторяются, или программы, которые часто используются, могут быть использованы в виде подпрограмм - последовательностей команд, выполнение которых может быть вызвано из любого места программы любое количество раз. Процесс передачи управления к подпрограмме называется ее вызовом.
Для вызова подпрограмм и возврата из них используются команды CALL, и RET.
При работе с подпрограммами используется стек МП. Стек - специально организованная область ОЗУ, используемая для временного сохранения данных или адресов. Число, записанное в стек последним извлекается из него первым. По принятой структуре организации com-программ, стек размещается в конце сегмента, т.е. вершина стека размещается по адресу CS:FFFF.
Команда RET помещает в программный счетчик последнее записанное на данный момент в стеке число. После этого выполнение программы будет осуществляться с этого адреса. Любая подпрограмма должна заканчиваться командой RET.
|
|
Автоматическое сохранение и восстановление адреса основной программы при выполнении подпрограмм позволяет сделать подпрограммы вложенными, то есть осуществить вызов одной подпрограммы из другой. Уровень вложенности определяется размером стека.
Существуют также команды условного вызова подпрограмм и возврата из них. Они позволяют вызвать подпрограмму и возвратиться из нее по определенному состоянию заданных разрядов регистра признаков (аналогично командам условного перехода) без использования дополнительных команд.
Помимо команд вызова подпрограмм и возврата из них со стеком можно обмениваться информацией с помощью команд PUSH (записать в стек содержание обозначенного регистра МП БИС) и POP (записать данные из стека в обозначенный регистр МП БИС).
2. ПРОГРАММА ИССЛЕДОВАНИЯ ПРОЦЕССА ВЫПОЛНЕНИЯ КОМАНД ВЫЗОВА И ВОЗВРАТА ИЗ ПОДПРОГРАММ, А ТАКЖЕ КОМАНД РАБОТЫ СО СТЕКОМ.