Итак, следующий список содержит все уже рассмотренные нами требования к подпрограммам:
S1: Сохранение регистров.
S2: Определение базовых регистров.
S3: Восстановление регистров.
S4: Переход по адресу, содержащемуся в регистре 14 (возврат к вызывающей программе).
Если подпрограмма в свою очередь производит вызов, то она должна удовлетворять также некоторым требованиям, налагаемым на вызывающую программу. Итак, наш список должен быть дополнен еще одним пунктом:
S5: Требования к вызывающей программе, если подпрограмма сама производит обращение.
Перед тем как приступить к более подробному изучению требований, налагаемых на вызывающие программы, рассмотрим случаи, в которых основную с нашей точки зрения программу следует оформлять в виде подпрограммы. Безусловно, если наша программа может вызываться другими программами пользователей, то она должна быть составлена как подпрограмма. Однако это же необходимо сделать, если рассматриваемая программа выполняется под управлением операционной системы OS или одного из вариантов систем OS/VS. В таких случаях совершенно безразлично, рассматриваем ли мы сами нашу программу как подпрограмму и является ли она сама управляющей среди программ нашего пакета. Другими словами, все программы, выполняющиеся под управлением систем OS или OS/VS, на самом деле представляют собой подпрограммы и соответственно должны удовлетворять требованиям, предъявляемым к подпрограммам.
Жизнь, которую у меня украли. Мужское / Женское. Выпуск от 24.05.2023
Однако в операционных системах DOS и DOS/VS все же существует различие между основными программами и подпрограммами, к которым они обращаются. Вопросы, связанные с организацией работы в системе DOS, будут рассмотрены в разд. 13.6.
Вернемся к списку требований, предъявляемых к вызывающим программам. К настоящему моменту он выглядит так:
С1: Требования к подпрограммам.
С5: Загрузка адреса начала подпрограммы в регистр 15.
С6: Загрузка адреса возврата в регистр 14.
С7: Передача управления по адресу точки входа.
Но список по-прежнему не полон. При обсуждении вопросов, связанных с сохранением регистров, мы сказали, что при обращении к подпрограмме регистр 13 должен содержать адрес начала 72-байтовой области сохранения. Задумывались ли вы над тем, где на самом деле расположена эта область и как ее адрес попадает в регистр 13? Ответ на поставленный вопрос таков: резервирование памяти под область сохранения выполняется вызывающей программой, она же производит загрузку адреса ее начала в регистр 13 перед вызовом подпрограммы.
Итак, подпрограмма переписывает информацию из регистров в поле, адрес которого находится в регистре 13. Эта информация, таким образом, оказывается в области сохранения основной программы. Если подпрограмма в свою очередь производит вызов еще одной подпрограммы, то эта последняя подпрограмма производит сохранение содержимого регистров в области, заданной вызвавшей ее подпрограммой. Описанный процесс может продолжаться неограниченно. При этом каждая вновь вызванная подпрограмма производит сохранение содержимого регистров в области, заданной вызвавшей ее программой.
Жиза моего детства #shorts
На рис. 13.8 изображена цепочка областей сохранения, возникающих в описанном нами процессе. Программа MAIN производит запись в область, отведенную ей операционной системой. MAIN обращается к подпрограммеSUB1, которая в свою очередь использует область сохранения, заданную основной программой. SUB1 вызывает SUB2, копирующую содержимое регистров в поле, определенное в программе SUB1.
Область сохранения может быть зарезервирована так:
SAVEAREA DS 18F
Адрес начала этой области может быть загружен в регистр 13 командой
если базовый регистр уже определен. Итак, общую структуру вызывающей программы можно попытаться представить в следующем виде (неверно!):
вычисления и вызовы подпрограмм

Рис. 13.8 Программа использует область сохранения, принадлежащую вызывающей программе
SAVE AREA DS 18F
резервирование памяти и константы
Посмотрим, как такая программа будет выполняться. По команде STM производится сохранение содержимого регистров с 14-го по 12-й в области памяти, заданной программой, вызвавшей программу CALLER. Следующие две команды служат для определения базового регистра и базового значения. Непосредственно за ними следует команда загрузки адреса начала области сохранения программы CALLER в регистр 13.
После выполнения необходимых вычислений производится восстановление регистров и возврат к вызывающей программе. Но посмотрите! Из какой области регистры будут загружены перед осуществлением перехода к основной программе? После выполнения команды LA в регистре 13 находится адрес области сохранения данной программы.
Выполнение команды LM (при условии, что (13) больше не менялось) приведет к помещению в регистры информации из поля SAVEAREA. Но это совсем не то место, куда исходное содержимое регистров было занесено с помощью команды STM. Теперь адрес настоящей области сохранения неизвестен.
Дело в том, что содержимое самого регистра 13 не было сохранено перед выполнением команды LA. После того как команда загрузки выполнена, прежнее содержимое регистра 13 потеряно и уже никак невозможно определить, где же находится область сохранения, необходимая нам для восстановления регистров. Карта острова сокровищ утеряна.
Почему нельзя сохранить регистр 13 вместе с остальными, используя команду
Несложные рассуждения показывают, что это никак не «поможет решению возникшей проблемы. Дело в том, что после выполнения команды LA всякая связь между данной программой и областью сохранения, предоставленной ей Вызывающей программой, исчезает.
Необходимо хранить (13) где-нибудь там, откуда его впоследствии несложно будет достать. В соответствии с принятым соглашением (13) записывается во второе слово области сохранения, определяемой данной подпрограммой. Такая запись содержимого регистра 13 должна быть произведена до того, как какая-нибудь команда работы с регистром изменит его содержимое. Затем, перед выполнением восстановления регистров, содержимое регистра 13 просто достается оттуда, куда оно было первоначально помещено.

Рис. 13.9. Структура вызывающей программы.
Результат следования описанному правилу таков: второе слово области сохранения каждой подпрограммы содержит ссылку на область сохранения программы, вызвавшей ее. После выполнения нескольких последовательных обращений все возникшие области сохранения имеют структуру списка со ссылками, в котором каждая область содержит указатель на область, принадлежащую более старшей программе. Каждый новый вызов ведет к добавлению новых элементов, каждый возврат укорачивает список.
Этот фант оказывается очень полезным при отладке программ, содержащих обращения к подпрограммам, некоторые из которых являются вложенными. Используя рассмотренный список со ссылками, можно определить местонахождение области сохранения вызывающей программы, найти содержимое регистров на момент обращения к подпрограмме. Особенно нас может интересовать содержимое регистра 14, показывающее, из какого именно места программы был произведен вызов. По информации второго слова области сохранения можно определить адрес начала области, относящейся к программе, вызвавшей данную. Этот процесс, если это необходимо, может быть продолжен до тех пор, пока мы не доберемся до основной программы.
На рис. 13.9 изображена общая структура программы CALLER, производящей вызов подпрограммы SUBR. CALLER содержит команды определения области сохранения содержимого регистра 13. Наш теперь почти завершенный список требований к вызывающим программам выглядит так:
С1: Требования к подпрограммам, если данная программа не является основной в системе DOS.
С2: Сохранение (13).
СЗ: Резервирование 72-байтовой области и загрузка адреса ее начала в регистр 13.
С5: Загрузка адреса первого байта подпрограммы в регистр 15. С6: Загрузка адреса возврата в регистр 14.
С7: Передача управления по адресу точки входа.
Процедуры и функции Занятие 1. Понятие подпрограммы. Процедуры и функции. Стандартные подпрограммы. Примеры употребления подпрограмм в решении задач.
Определение. Подпрограмма – это отдельная функционально независимая часть программы. Любая подпрограмма обладает той же структурой, которой обладает и вся программа.
Подпрограммы решают три важные задачи:
• избавляют от необходимости многократно повторять в тексте программы аналогичные фрагменты;
• улучшают структуру программы, облегчая ее понимание;
• повышают устойчивость к ошибкам программирования и непредвидимым последствиям при модификациях программы.
Очень важно понимать, что в подпрограммы выделяется любой законченный фрагмент программы. В качестве ориентиров просмотрите следующие рекомендации.
1. Когда Вы несколько раз перепишите в программе одни и те же последовательности команд, необходимость введения подпрограммы приобретает характер острой внутренней потребности.
2. Иногда слишком много мелочей закрывают главное. Полезно убрать в подпрограмму подробности, заслоняющие смысл основной программы.
3. Полезно разбить длинную программу на составные части – просто как книгу разбивают на главы. При этом основная программа становится похожей на оглавление.
4. Бывают сложные частные алгоритмы. Полезно отладить их отдельно в небольших тестирующих программах. Включение программ с отлаженными алгоритмами в основную программу будет легким, если они оформлены как подпрограммы.
5. Все, что Вы сделали хорошо в одной программе, Вам захочется перенести в новые. Для повторного использования таких частей лучше сразу выделять в программе полезные алгоритмы в отдельные подпрограммы.
Подпрограммы могут быть стандартными, т.е. определенными системой, и собственными, т.е. определенными программистом.
Стандартная подпрограмма (процедура или функция) — подпрограмма, включенная в библиотеку программ ЭВМ, доступ к которой обеспечивается средствами языка программирования. Вызывается она по имени с заданием фактических параметров с типом описанным при описании данной процедуры в библиотечке процедур и функций.
Из набора стандартных процедур и функций по обработке одного типа информации составляются модули. Каждый модуль имеет своё имя (мы уже хорошо знакомы с модулями Crt, Graph). Доступ к процедурам и функциям модуля осуществляется при подключении этого модуля (Uses Crt, Graph).
Help содержит подробные описания предусмотренных средой программирования процедур и функций. Для вызова помощи при работе со стандартными процедурами и функциями нужно поставить на имя подпрограммы курсор и нажать клавиши . Описание процедур и функций в Help строится по стандартному принципу.
Задание. Вызовите помощь по функции Cos и рассмотрите предоставленную информацию.
Сначала идет краткое описание подпрограммы (в одну фразу). Далее под словом Declaration (Объявление) следует интерфейсная часть процедуры или функции, которая особенно часто необходима для определения типа переменных при обращении к ним. Далее под словом Target приводятся платформы, на которых может использоваться подпрограмма: Windows, real (реальный режим DOS), protected (защищенный режим DOS).
После слова Remarks следуют заметки, содержащие необходимые детали использования. В разделе See Also приведены имена подпрограмм, связанных с данной по смыслу или по совместному применению. Если перемещать курсор по этим именам (они выделяются курсорной рамкой), то выбрав одно из них (нажать клавишу ), можно получить справку по следующей функции.
Каждая процедура и функция сопровождается примером применения, переключение к которому дает последняя строка программы. Любой текст из Help может быть скопирован в редактируемый файл обычными приемами копирования через буфер. Копирование примеров или заголовков функций облегчает работу.
Существует другой способ получения помощи по процедурам и функциям. Для этого нужно использовать пункт меню Help/Reserved words (зарезервированные слова) или Help/Standard units (стандартные модули).
Задание. Рассмотрите список процедур и функций, выберите какие-либо и просмотрите предлагаемую информацию.
В стандартных модулях содержится большое количество стандартных подпрограмм, но невозможно создать модуля, который бы содержал все нужные программисту подпрограммы. Поэтому большую роль в создании программ играют собственные подпрограммы, которые создает программист для решения конкретной задачи.
Существует два способа объединения программ и подпрограмм:
1. Текст подпрограмм может быть приведен в разделе описания использующей их программы.
2. Подпрограммы группируются в отдельных файлах, имеющих специальную структуру – модулях. Для того чтобы основная программа могла использовать модуль, он должен быть подключен к основной программе.
Первый способ применяется тогда, когда программа в целом не очень большая, а ее подпрограммы, скорее всего, не будут использоваться в других программах. Второй способ желателен, в частности, для той программы, которую Вы будете создавать в качестве курсовой работы при завершении учебы в городской школе юного программиста.
Структура текста подпрограммы соответствует структуре текста основной программы за двумя исключениями:
• подпрограмма начинается с заголовка, содержащего имя подпрограммы, передаваемые в нее и возвращаемые от нее периметры, запись заголовка подпрограммы отличается от заголовка программы;
• подпрограмма кончается не точкой, а точкой с запятой.
Вызов подпрограммы происходит при каждом употреблении ее имени в основной (или вызывающей ) программе. При вызове подпрограммы выполнение основной программы приостанавливается, и управление передается в подпрограмму, где выполняются команды, заданные в ней. Подпрограмма завершается, если выполнены все ее процедуры до завершающего слова End или по специальной команде выхода из подпрограммы Exit. По окончании работы подпрограммы управление возвращается основной программе, иначе говоря, к первой команде, следующей за обращением к этой подпрограмме.
В языке Pascal определяются два типа подпрограмм – процедуры и функции. Основное различие между процедурой и функцией состоит в том, что процедура только выполняет какую-либо законченную последовательность действий, не возвращая результата работы в основную программу, а функция и выполняет действия, и возвращает результат.
Например, вызов функции
вернет в основную программу значение наименьшего из двух чисел и это значение будет присвоено переменной M.
Любая подпрограмма должна быть описана до того, как она будет вызвана в программе или в другой подпрограмме. Все переменные, которые использует подпрограмма, могут быть либо глобальные либо локальные.
Определение. Глобальными называются переменные, объявленные в основной программе и доступные как программе, так и всем ее подпрограммам.
Определение. Локальными называются переменные, объявленные внутри подпрограммы и доступные только ей самой.
Обмен информацией между основной программой и подпрограммой может осуществляться только с помощью глобальных переменных.
Подпрограмма может использовать любые глобальные переменные кроме тех, которые имеют те же имена, что и локальные переменные. Переменные с совпадающими именами, которые могут быть описаны в основной программе или других подпрограммах, не имеют ничего общего с локальными переменными. если переменная описана. Если переменная описана в основной программе и не переопределена в подпрограмме, она может использоваться в подпрограмме. Память для локальных (т.е. описанных в подпрограмме) переменных выделяется на время исполнения данной подпрограммы в специальной области, называемой стеком. При завершении работы подпрограммы память освобождается, поэтому все внутренние результаты работы подпрограммы не сохраняются от одного обращения к другому.
Если говорить о плюсах использования в программировании подпрограмм, то можно назвать следующие:
• Программы с использованием подпрограмм позволяют реализовать один из самых прогрессивных методов программирования – структурное программирование.
• Программа становится более читаемой.
• Экономия памяти, которая получается из-за того, что память для хранения переменных, используемых в подпрограммах, выделяется только на время работы подпрограммы.
В языке Паскаль выделяют два вида подпрограмм: процедуры (Procedure) и функции (Function). Любая программа может содержать несколько процедур и функций. Структура любой подпрограммы аналогична структуре всей программы. Подпрограмма должна быть описана до того, как будет использована в программе или другой подпрограмме.
Процедуры и функции объявляются в разделе описания вслед за разделом переменных.
Тогда общая структура программы выглядит так:
Выполнение программы начинается с операторов основной программы. При необходимости вызывается подпрограмма и начинают действовать её операторы. Затем управление передаётся в основную программу, которая продолжает выполняться.
Обращение к подпрограмме — переход к выполнению подпрограммы с заданием информации, необходимой для ее выполнения и возврата.
Подпрограмма вызывается по своему имени с указанием необходимых параметров.
На этом занятии рассмотрим примеры организации наиболее простого вызова подпрограмм.
Задание. Рассмотрите решение предложенных задач, наберите на компьютере, проверьте работоспособность, внесите свои изменения и дополните своими комментариями.
Задача 1. Написать программу, состоящую из трех подпрограмм и основной программы. Подпрограммы должны организовывать ввод чисел, вычисление их суммы и вывод результата.
writeln(‘По вызову активизировалась процедура «Input»‘,#10);
writeln(‘Введите два числа через пробел — ‘);
writeln(‘Для сложения подключилась процедура «Summa»‘,#10);
writeln(‘Заключительная часть. Процедура «Output»‘,#10,#13);
writeln(‘Их сумма — ‘,x);
Задача 2. Найти среднее арифметическое двух чисел.
Function SredArif(A, B:integer):real;
SredArif:=(A+B)/2;
write(‘Введите два числа ‘);
write(‘Cреднее арифметическое этих чисел равно ‘,Rez:5:3);
Источник: studfile.net
В программировании — отдельная часть программы, вызываемая из других программ. Кроссворд 12 букв
Разгадываешь кроссворд и не знаешь что такое в программировании — отдельная часть программы, вызываемая из других программ? Вот подсказка и ответ на данный вопрос:
Первая буква « п », вторая буква « о », третья буква « д », четвертая буква « п », пятая буква « р », шестая буква « о », седьмая буква « г », восьмая буква « р », девятая буква « а », десятая буква « м », одинадцатая буква « м », двенадцатая буква « а ». Всего 12 букв.
Ответ на вопрос «в программировании — отдельная часть программы, вызываемая из других программ» в сканворде
Если вам не помогла подсказка, то вот вам готовый ответ: слово из 12 букв – подпрограмма.
Альтернативные вопросы для слова «подпрограмма»
- Часть компьютерной программы
- Часть алгоритма
Смотрите также
- Значение слов
- Разбор слов
- Предложения со словом
- Ответы на кроссворды
Источник: vslovarike.ru