Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
37
Добавлен:
02.06.2015
Размер:
9.91 Mб
Скачать

Вставка подпрограммы (продолжение-1)

Однако в ходе работы основной программы Q возможно следующее. Настал момент для старта подпрограммы

P, которой нужны аргументы x1, x2, ..., xn. В данный момент аргументы хранятся в каких-то регистрах Ri1,

... , Rin , а не в регистрах R1, ... , Rn , как нужно. Поэтому перед применением подпрограммы P мы

должны извлечь аргументы из Ri1, ... , Rin и переслать

их в регистры R1, ... , Rn такой пересылки аргументов

выполняется следующее действие.

1) Перед командами из P размещается набор команд

T(i1 ,1), ... ,T(in ,n).

Вставка подпрограммы (продолжение-2)

Пусть основная программа Q вызвала подпрограмму P и в начало зарезервированных регистров R1, ... , Rn скопированы числа x1, x2, ..., xn, с которыми начнет работать подпрограмма P. Однако в регистрах Rn+1, ... , R может оставаться «мусор» - произвольные числа, оставшиеся от предыдущей работы Q. По правилам

работы МНР в последующих регистрах Rn+1, ... , Rk

должны быть только одни нули. Поэтому нужно

выполнить обнуление этих регистров от мусора, которое осуществляется следующим способом.

2) Выполняется набор команд Z(n+1), ... , Z( ).

Вставка подпрограммы (продолжение-3)

После выполнения подпрограммы P результат

находится в регистре R1. Однако регистр R1

нужен для последующих вычислений

программы Q. Поэтому из регистра R1 результат выполнения подпрограммы P нужно

пересылать для его последующего

использования на хранение в некоторый

рабочий регистр Ri, где i> (P). Это можно осуществить следующим способом.

3) Выполняется команда переадресации T(1,i).

Вставка подпрограммы (продолжение-4)

Следующие действия назовем вставкой подпрограммы.

1) Распределение памяти. Вычисляется число = (P) и выделяется память R1, … R , достаточная для работы подпрограммы P. Задается регистр Ri, где i> , для хранения результата работы подпрограммы.

2) Извлечение аргументов. Для этого записываются следующие команды: T(i1 ,1), ... ,T(in ,n). Для передачи аргументов из места их хранения в регистры R1, ... , Rn.

3) Очистка регистров. Для этого записываются следующие команды: Z(n+1), … , Z ( ).

4) Вставка команд подпрограммы P.

5) Пересылка результата на хранение. Добавляется команда T(1,i).

Вставка подпрограммы (окончание)

В итоге в основной программе получается следующий фрагмент

T(i1 ,1)

...

T(in ,n)

Z(n+1)

...

Z( ) P

T(1,i)

Вставку данного фрагмента в основную программу обозначаем через P[i1, ... , in i].