Cтраница 4
![]() |
Регистровые окна системы UltraSPARC II. [46] |
Команда вызова процедуры скрывает старый набор регистров и путем изменения CWP предоставляет новый набор, который может использовать вызванная процедура. Однако некоторые регистры переносятся из вызывающей процедуры к вызванной процедуре, что обеспечивает эффективный способ передачи параметров между процедурами. [47]
Входной параметр ИД НОМЕР является номером, однозначно определяющим каждую процедуру для ее идентификации в модуле ТРАССИРОВЩИКА. ПАРАМЕТР N являются выходными параметрами вызывающих процедур, значения которых устанавливаются процедурой ТРАССИРОВЩИКА из СПИСКА ПАРАМЕТРОВ. [48]
![]() |
Взаимосвязь входных и выходных параметров с соответствующими процедурами. [49] |
ПЕРЕКЛЮЧАТЕЛЬ, который расположен в скобках за точкой с запятой. Параметры, которые передают информацию от вызываемой процедуры в вызывающую процедуру ( в данном примере от процедуры СЧИТЫВАНИЯ ПЕРЕКЛЮЧАТЕЛЯ в процедуру ОЖИДАНИЯ ВКЛЮЧЕНИЯ ПЕРЕКЛЮЧАТЕЛЯ), известны как выходные параметры и располагаются после точки с запятой. Если используется больше одного параметра, отдельные параметры разделяются запяты-ми. Параметры, передающие информацию в другом направлении, от вызывающей процедуры в вызываемую, называются входными параметрами и располагаются перед точкой с запятой. Связи между двумя процедурами и их входными и выходными параметрами показаны на рис. 4.5. Заметим, что вход и выход определены по отношению к вызываемой процедуре. [50]
![]() |
Процедура ОЖИДАНИЯ ВЫКЛЮЧЕНИЯ ПЕРЕКЛЮЧАТЕЛЯ. [51] |
ТЕКТОРА ДВИЖЕНИЯ и проверяет, сработал ли детектор движения. Если он не сработал, процедура ПРОВЕРКИ ДЕТЕКТОРА ДВИЖЕНИЯ возвращает управление вызывающей процедуре. [52]
У рекурсии есть один большой недостаток - она съедает память. Всякий раз, когда одна процедура вызывает другую, информация о выполнении вызывающей процедуры должна быть сохранена для того, чтобы после выполнения вызванной процедуры возобновить выполнение вызывающей процедуры на том же месте, где она остановилась. Это означает, что если процедура вызывает себя 100 раз, то 100 различных состояний должно быть записано сразу. Максимальный размер стека для DOS-приложений 16-разрядного компьютера, такого как IBM PC, составляет 64К, что позволяет разместить от 3000 до 4000 элементов стеков. А что вы станете делать, если операция должна быть повторена более 4000 раз. [53]
В результате звуковой сигнал остается включенным до тех пор, пока в процедуре ОЖИДАНИЯ ВКЛЮЧЕНИЯ ПЕРЕКЛЮЧАТЕЛЯ не будет выключен переключатель. Сигналы и таймер выключаются процедурой ВОССТАНОВЛЕНИЯ СИСТЕМЫ, после чего управление передается вызывающей процедуре. [54]
При вызове процедуры SUBROUTINE INOUTX указатели переменных, определенных в вызывающей процедуре, передаются в вызываемую процедуру. Эти указатели приравнивают переменные INPUT, OUTPT1 и OUTPT2 переменным, определенным в вызывающей процедуре. Поэтому при изменении OUTPT1 и OUTPT2 меняются также соответствующие данные в вызывающей процедуре. Таким образом, информация, содержащаяся в выходных параметрах, может быть передана в вызывающую процедуру. Необходимо заметить, что если меняется значение входного параметра в вызываемой программе, то соответствующая информация в вызывающей программе также меняется. Поэтому если предусмотрена обработка входного параметра в вызываемой программе, то чтобы избежать возможных ошибок, входной параметр необходимо скопировать в локальный параметр. [55]
![]() |
Пример, иллюстрирующий многократное выполнение процедуры. [56] |
На рис 6.17 показано, как прослеживается информация о вызовах вложенных процедур во время работы системы охранной сигнализации. Следует отметить, что каждый раз указатель в вершине стека обеспечивает надлежащее продолжение исполнения вызывающей процедуры после выполнения операции ВОЗВРАТА в вызываемой процедуре. [57]