Cтраница 3
В этом примере при вызове процедуры InputoutputExample значение входного параметра передается от переменной, определенной в вызывающей процедуре, переменной input в вызываемой процедуре. Поэтому изменение значения переменной input в вызываемой процедуре не влияет на значение переменной в вызывающей процедуре. Использование конструкции VAR для обоих выходных параметров означает, что в вызываемую процедуру пересылаются указатели переменных, определенных в вызывающей процедуре. Эти указатели приравнивают значения переменных outputl и output2 переменным, определенным в вызывающей процедуре. Поэтому при изменении переменных outputl и output2 соответствующие данные в вызывающей процедуре также меняются. В Паскале информация, содержащаяся в нескольких выходных параметрах, может быть передана в вызывающую процедуру. [31]
Если аргументами являются метки или меточные переменные, to их значения могут быть использованы для выхода из подпрограммы в вызывающую процедуру. Однако такой возврат усложняет логику взаимосвязи подпрограмм, и прибегать к нему не рекомендуется. [32]
![]() |
Стек для вызовов рекурсивной процедуры. [33] |
Однако там мы сделали так, что окончание выполнения вызова ВНУТПОРЯДОК с фактическим параметром ПРАВЫЙСЫШУЗЕЛ ] завершает выполнение и самой вызывающей процедуры. [34]
Если в процессе выполнения процедуры-функции С мы попадаем на - этот оператор, то вычисляется значение указанного выражения, это значение возвращается вызывающей процедуре в качестве значения функции С и этим выполнение процедуры-функции С заканчивается. Атрибут RETURNS ( атрибуты) в операторе начала процедуры-функции указывает атрибуты, в соответствии с которыми надо преобразовать вычисленное значение выражения из оператора RETURN перед его возвращением в качестве значения функции С. [35]
Вызываемая процедура будет в этом случае выполняться параллельно с вызывающей процедурой. Вызывающая процедура называется присоединяющей ветвью. Вызываемая процедура называется присоединенной ветвью. [36]
Читатель мог бы, конечно, спросить: Как может вызывающая процедура, которая имеет только дескриптор доступа к видимой части объекта домен ( Public AD), снабдить процессор необходимой информацией для установления нового контекста, домен определения которого охватывает целый домен, указываемый дескриптором доступа Private AD. Вызывающая процедура не обладает дескриптором доступа Private AD и не может получить его во владение, поскольку иначе была бы нарушена схема защиты системы. [37]
Те элементы информации, которые должны быть доступны подпрограмме, чтобы она могла выполнить свою функцию, называются параметрами. Вызывающая процедура должна передать параметры подпрограмме. Согласно данному определению, адрес возврата, очевидно, является параметром, и мы уже обсудили, как он передается в подпрограмму командой JSR. Существует несколько способов передачи параметров, которые позволяют внутри подпрограммы определить, откуда брать данные и куда пересылать результаты. При программировании на языке ассемблера применение любого из них не вызовет никаких затруднений, поскольку в этом случае программист точно знает, где что происходит. Гораздо легче запутаться при программировании на языках высокого уровня, так как здесь механизм от нас скрыт и неизвестно, какой в действительности способ применяется. [38]
![]() |
Асинхронное выполнение программы. [39] |
Таким образом, главным различием между обычным и мультизадачным режимом выполнения программы является различный способ управления процессором и устройствами ввода-вывода. Обычно вызывающая процедура передает управление вызываемой. В мультизадачной среде устанавливается дополнительный поток управления, с тем чтобы обе процедуры могли выполняться параллельно. Передача управления этим процедурам выполняется в порядке их приоритетов или места в системной очереди. [40]
После указанных операций матрица СЛАУ целиком подготовлена для проведения итераций по МСГ. Управление передается в вызывающую процедуру. [41]
В приведенном выше примере значение функции SPR равно либо нулю, либо значению выражения U V W. Значение функции заменяет в вызывающей процедуре вызов функции, и вычисление выражения, которое содержало этот вызов функции, продолжается. [42]
![]() |
Процедура ОЖИДАНИЯ ВКЛЮЧЕНИЯ ПЕРЕКЛЮЧАТЕЛЯ. [43] |
ПЕРЕКЛЮЧАТЕЛЯ во ВХОДНОМ модуле и проверяет состояние переключателя: если переключатель не включен, то считывание и проверка повторяются до тех пор, пока переключатель не перейдет во включенное состояние. После этого управление передается вызывающей процедуре. [44]
Когда таймер срабатывает, устанавливается параметр ПРОДОЛЖЕНИЕ для обозначения того, что движение продолжалось в течение 5 с. После этого управление передается вызывающей процедуре для завершения цикла. Этот третий путь показан на рис. 4.17 в. На каждом рисунке те операции, которые не являются частью рассматриваемого пути, опущены, а интересующие конструкции выделяются жирным шрифтом. [45]