Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УММ / Тема 2 / Тема 2 Лекция 2 / Тема 2 Лекция 2.docx
Скачиваний:
50
Добавлен:
16.03.2016
Размер:
4 Мб
Скачать

5. Подпрограммы и параметры

Достаточно часто встречается ситуация, когда отдельные части программы должны выполнять одни и те же действия по обработке данных (например, вычисление тригонометрической функции). В подобных случаях повторяющиеся части программы выделяют в подпрограмму, а в соответствующие места программы заносят лишь команды обращения к этой подпрограмме. В базовой ЭВМ для этой цели используется команда JSR («Обращение к подпрограмме»).

На рис. 7 показана часть основной программы, содержащая две команды JSR 300, с помощью которых осуществляется переход к выполнению команд подпрограммы.

По команде JSR 300, расположенной в ячейке 25, выполняются запись числа 25+1=26 в ячейку с адресом 300 и переход к первой исполняемой команде подпрограммы, расположенной в ячейке 301. Далее начинается процесс выполнения команд подпрограммы, который завершается на команде BR (300), расположенной в ячейке 326. Это команда безусловного перехода с косвенной адресацией. Она предписывает ЭВМ выполнить переход к команде, расположенной по адресу, сохраняемому в ячейке 300. Так как в эту ячейку ранее было занесено число 26, то будет исполняться команда, записанная в ячейке 26, т. е. следующая за обращением к подпрограмме.

По команде JSR 300, расположенной в ячейке 72, осуществляется запись числа 72+1=73 в ячейку с адресом 300 и начинается выполнение подпрограммы (с ячейки 301). При исполнении последней команды подпрограммы BR (300) будет осуществлен переход к команде, расположенной по адресу 73, т. е. адресу, хранимому в ячейке 300.

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

  1. помещает в ячейку М адрес следующей за JSR M команды, т. е. команды, которая должна выполняться вслед за командами подпрограммы;

  2. передает управление команде, расположенной в ячейке с адресом М+1.Последней исполняемой командой подпрограммы должна быть команда выхода, т. е. команда BR (M), по которой осуществляется переход к команде с адресом, хранимым в ячейке М.

Пример 5. Получить удвоенный модуль чисел X, Y и Z, хранящихся в ячейках памяти 58, 63 и 71 соответственно. Результаты (2|Х|, 2|Y|, 2|Z|) поместить в ячейки 74, 77 и 82.

Для решения этой задачи можно взять за основу программу примера 4, оформив ее фрагмент в виде подпрограммы (табл. 17). В программе табл. 17 в подпрограмму передается всего одна величина: в аккумулятор помещается число, модуль которого нужно удвоить. Результат вычислений (опять одна величина) возвращается в основную программу через тот же аккумулятор. А как же передать и (или) получить два или большее число параметров?

Таблица 15

Первый вариант получения удвоенного модуля трех чисел

В микроЭВМ, имеющих несколько аккумуляторов или, лучше сказать, регистров общего назначения, можно передавать в подпрограмму (или получать из нее) большее число параметров. Но и число регистров общего назначения также ограничено. Поэтому во всех микроЭВМ (как и в базовой ЭВМ) есть возможность обмена параметрами через ячейки памяти.

В табл. 15 приведен второй вариант программы для решения примера 7. Здесь использован один из возможных способов передачи параметров: размещение параметров непосредственно за командой JSR. Адрес возврата, записываемый командой JSR, в действительности является адресом первого параметра. В подпрограмме приходится производить наращивание этого адреса для выборки остальных параметров и получения действительного адреса возврата — адреса команды, расположенной за последним из параметров. В качестве параметров можно использовать константы или переменные (адреса). В последнем случае несколько усложняется обработка этих параметров (см. табл. 16).

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

Таблица 16

Второй вариант программы получения удвоенного модуля трех чисел

Соседние файлы в папке Тема 2 Лекция 2