- •15 Принципы построения и функционирования эвм на примере базовой эвм
- •1. Назначение и структура базовой эвм
- •2. Кодирование программ и система команд
- •3. Арифметические операции
- •4. Управление вычислительным процессом, сдвиги и логические операции
- •5. Подпрограммы и параметры
- •6. Основные стадии выполнения команды
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 выполняет следующие действия:
помещает в ячейку М адрес следующей за JSR M команды, т. е. команды, которая должна выполняться вслед за командами подпрограммы;
передает управление команде, расположенной в ячейке с адресом М+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
Второй вариант
программы получения удвоенного
модуля трех чисел
