Вызывающая подпрограмма - Большая Энциклопедия Нефти и Газа, статья, страница 1
Одна из бед новой России, что понятия ум, честь и совесть стали взаимоисключающими. Законы Мерфи (еще...)

Вызывающая подпрограмма

Cтраница 1


1 Последовательный вызов подпрограмм. [1]

Вызывающая подпрограмма обязана до перехода к вызываемой загрузить в общий регистр 13 адрес первого слова своей области сохранения. Стандартно эта загрузка производится при входе в подпрограмму. Вызываемая подпрограмма должна записать во второе слово своей области сохранения адрес области сохранения вызывающей подпрограммы, а в третье слово области сохранения вызывающей подпрограммы - адрес своей области сохранения.  [2]

Область сохранения создается вызывающей подпрограммой, а вызываемая подпрограмма обеспечивает сохранение в ней содержимого регистров и восстановление их при возврате управления вызвавшей подпрограмме. Если вызываемая подпрограмма, - в свою очередь, тоже вызывает подпрограмму, то и в ней должна быть создана своя область сохранения. Поэтому может быть создано большое число таких областей сохранения.  [3]

Область сохранения создается вызывающей подпрограммой, а вызываемая подпрограмма обеспечивает сохранение в ней содержимого регистров и восстановление их при возврате управления вызвавшей подпрограмме. Если вызываемая подпрограмма, в свою очередь, тоже вызывает подпрограмму, то и в ней должна быть создана своя область сохранения. Поэтому может быть создано большое число таких областей сохранения.  [4]

Регистр 14 содержит адрес возврата в вызывающую подпрограмму. Регистр 15 содержит адрес входа в вызываемую подпрограмму.  [5]

Если вызванная подпрограмма имеет параметры, то вызывающая подпрограмма должна поместить в регистр 1 адрес поля, выровненного по границе слова и содержащего адресные константы с адресами данных, передаваемых вызванной программе. Последняя адресная константа должна иметь старший бит, установленный в единицу.  [6]

7 Последовательный вызов подпрограмм. [7]

По соглашению именно вызываемая подпрограмма должна записать в область сохранения вызывающей подпрограммы значения из всех общих регистров, которые она может изменить, а при возвращении в вызывающую подпрограмму восстановить все измененные значения. Первое слово каждой области сохранения является резервным и может использоваться произвольно.  [8]

9 Последовательный вызов подпрограмм. [9]

По соглашению именно вызываемая подпрограмма должна записать в область сохранения вызывающей подпрограммы значения из всех общих регистров, которые она может изменить, а при возвращении в вызывающую подпрограмму восстановить все измененные значения. Первое слово каждой области сохранения является резервным и может использоваться произвольно.  [10]

В качестве примера рассмотрим программу, модули которой читают и обрабатывают записи некоторого файла. Вызывающая подпрограмма может содержать цикл для повторной активизации модуля чтения до получения индикатора, свидетельствующего об окончании файла. Если такой индикатор не устанавливается в заглушке модуля чтения, вызывающая программа будет продолжать активизации бесконечно. Поэтому заглушка должна программироваться так, чтобы, прочитав несколько тестовых записей, установить индикатор конца файла. Таким образом, цикл рано или поздно закончится, причем будут проверены как активизирующая подпрограмма, так и подпрограмма, завершающая обработку файла.  [11]

Порядковый номер указывает номер оператора, содержащего обращение к подпрограмме. Оператор с указанным номером относится к вызывающей подпрограмме, имя которой указано в следующей строке.  [12]

Даже если аппаратура не позволяет непосредственно реализовать этот механизм, он легко может быть промоделирован с использованием адресов команд и команд перехода. Необходимо только связать с каждой подпрограммой место для записи точки возврата в вызывающую подпрограмму. Когда какая-нибудь другая программа вызывает подпрограмму, она должна сначала записать соответствующую точку возврата в обусловленное место в вызываемой подпрограмме. Вызываемая подпрограмма возвращает управление вызывающей подпрограмме, просто передавая управление в эту точку возврата.  [13]

Вызовы подпрограмм подчиняются правилу последний вошел - первый вышел ( last-in - first-out): в каждый момент выполнения следующей подпрограммой, которая должна возвратить управление своей вызывающей программе, будет та подпрограмма, вход в которую был осуществлен позднее всего. Это правило позволяет следующим образом использовать центральный стек: при всяком вызове подпрограммы В вызывающая подпрограмма А записывает соответствующую точку возврата на вершину центрального стека. Если В вызывает С, то В записывает точку возврата для С опять в этот же стек. Если С рекурсивно вызывает В, то С вновь записывает точку возврата в центральный стек. Предположим теперь, что выполнение В ( ее рекурсивного вызова) заканчивается. Тогда В просто выбирает из центрального стека верхнюю точку возврата, удаляет ее из стека и возвращает управление в эту точку, которая будет соответствующей точкой в С. Когда завершается С, она снова обращается к центральному стеку, выбирает и удаляет из стека текущую верхнюю точку возврата и возвращает управление в эту точку возврата, которая на этот раз является соответствующей точкой в В. Таким образом, мы правильно распутываем структуру вызовов.  [14]

ХО, ХК - начальная и конечная координаты х отрезка интегрирования Хо я Xk AA ( 1) - массив, в котором последовательно располагаются коэффициенты матриц разрешающей системы, вычисленные при л 0, лсср ( о ь) / 2; хь. Коэффициенты матриц А ( х0), ( х), А ( ЖЬ) упорядочены в одномерном массиве АА по столбцам. В вызывающей подпрограмме конкретно указывается размерность массива HH ( L), где L SXN; N - число дифференциальных уравнений в системе; Yl ( l), Y2 ( l), Y3 ( l), Y4 ( l), Z ( l) - рабочие массивы. В вызывающей подпрограмме указываются размерности массивов LN2 N; AX ( 1) - рабочий массив.  [15]



Страницы:      1    2