Параметры указанные в момент вызова подпрограммы из основной программы

Этот оператор предназначен для выполнения отдельно заданной последовательности операторов — подпрограммы-процедуры.

В блок-схеме алгоритма для отображения оператора вызова процедуры используется блок «предопределенный процесс».

2. Операторы ввода предназначены для ввода значений переменных с клавиатуры.

3. Операторы вывода выводят указанные в операторе значения на экран монитора.

В блок-схеме алгоритма для отображения операторов ввода/вывода можно использовать одноименный блок «ввод-вывод».

6.11.Подпрограммы.

Если группа одних и тех же действий повторяется в разных местах программы, то целесообразно их выделить в подпрограмму.

Определение. Подпрограмма — это часть программы, оформленная в виде отдельной синтаксической конструкции и снабженная именем. Подпрограмма является вспомогательным алгоритмом. Подпрограмма представляет собой отдельный программный модуль, который реализует отдельный алгоритм.

Подпрограмма описывается в разделе описаний основной программы.

ОСНОВЫ ЧПУ — #42 — ПОДПРОГРАММА / Программирование обработки на станках с ЧПУ

Подпрограмма состоит из нескольких частей: заголовка (который определяет вид подпрограммы), имени, списка параметров (параметры могут отсутствовать), тела подпрограммы (операторов, которые будут выполняться при ее вызове), завершения подпрограммы. Параметры разделяются на аргументы и результаты.

В процессе выполнения подпрограммы аргументы не меняются. Чтобы работа подпрограммы имела смысл, она должна получить данные из внешней программы. Данные передаются подпрограмме в виде параметров (аргументов).

Во время написания подпрограммы заранее неизвестно, какие конкретно параметры она будет получать во время вызова ее из основной программы, их значения будут переданы из основной программы. Поэтому, параметры, которые указываются в заголовке программы, называются формальными. Они нужны только для описания тела подпрограммы.

А конкретные параметры, которые указываются в момент вызова подпрограммы, называются фактическими. При выполнении подпрограмма работает с фактическими параметрами. Все переменные, описанные в разделе описаний основной программы, доступны во всех описанных в ней подпрограммах, если описание переменных предшествует описанию подпрограмм.

Эти переменные называются глобальными. Переменные, объявленные в разделе описаний подпрограммы, как и параметры подпрограммы, доступны только в теле этой подпрограммы. Поэтому они называются локальными переменными.

Подпрограммы бывают двух видов: процедуры и функции.

4. Процедура просто выполняет группу операторов, входящих в нее.

5. Функция вычисляет некоторое значение и передает его (возвращает) в главную программу. Это значение имеет определенный тип, поэтому и сама функция имеет тип. Любая функция в основной программе используется в составе выражений.

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

Передача параметров в функцию по указателю c++. Передача указателя в функцию си. Урок #48

Подпрограммы могут быть вложенными, то есть входить в состав других подпрограмм, а не только основных программ. В некоторых языках программирования допускается вызов подпрограммы из себя самой. Это называется рекурсией.

Понятие подпрограммы, как обособленной именованной части программы со своим собственным локальным контекстом имен является в большинстве языков программирования основным средством структурирования программ.

6.12.Технологии программирования.

Определение. Технология программирования — это система методов, способов и приемов разработки и отладки программы.

В настоящее время нашли широкое применение следующие технологии программирования: Модульное (алгоритмическое) программирование, Структурное программирование, Объектно-ориентированное программирование.

6.12.1.Модульное (алгоритмическое) программирование. [25] )

Основная идея алгоритмического программирования — разбиение программы на последовательность модулей, каждый из которых выполняет одно или несколько действий. Единственное требование к модулю, чтобы его выполнение всегда начиналось с первой команды и всегда заканчивалось на самой последней команде модуля. Алгоритм на выбранном языке программирования записывается с помощью команд описания данных, вычисления значений и управления последовательностью выполнения программы. Текст программы представляет собой линейную последовательность операторов присваивания, цикла и условных операторов. Таким способом можно решать не очень сложные задачи и составлять программы, содержащие несколько сот строк кода.

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

6.12.2.Структурное программирование. [26] )

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

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

Возможность применения подпрограмм относят язык программирования к классу процедурных языков.

6.12.3.Объектно-ориентированное программирование. [27] )

Объектно-ориентированное программирование представляет собой способ программирования, напоминающий процесс человеческого мышления. Это более структурированный способ, чем другие технологии программирования. Он позволяет создавать модульные программы с представлением данных на определенном уровне абстракции.

Объектно-ориентированное программирование основано на понятии объекта.

Определение. Объект — это совокупность свойств (структур данных, характерных для этого объекта), методов их обработки (подпрограмм изменения свойств) и событий, на которые данный объект может реагировать, и которые приводят, как правило, к изменению свойств объекта.

Объекты могут иметь одинаковую структуру и отличаться только значениями свойств. В таких случаях в программе создается новый тип, основанный на единой структуре объекта, который называется классом. Важнейшая характеристика класса – возможность создания на его основе новых классов с наследованием всех его свойств и методов и добавлением собственных. Класс, не имеющий предшественника, называется базовым. Наследование позволяет создавать новые классы, повторно используя уже готовые исходные программы.

6.13.Тренировочные тестовые задания по разделу 6.

(правильные ответы см. в конце пособия).

1. Представленный алгоритм А является?

1. Циклическим алгоритмом

2. Линейным алгоритмом

3. Ветвящимся алгоритмом

4. Укрупненным алгоритмом

5. Подчиненным алгоритмом

2. Алгоритм – это:

§ Правила выполнения определенных действий

§ Набор команд для компьютера

§ Протокол вычислительной сети

§ Понятное и точное предписание исполнителю совершить последовательность действий, направленных на достижение поставленной цели

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

3. Суть такого свойства алгоритма, как результативность, заключается в том, что?

1. Алгоритм всегда состоит из последовательности шагов

2. Для записи алгоритма используются команды, которые входят в систему команд исполнителя

3. Алгоритм обеспечивает решение не одной конкретной задачи, а некоторого класса задач

4. При точном исполнении всех команд алгоритма определенный результат будет получен за конечное число шагов

5. Алгоритм должен состоять из команд, однозначно понимаемых исполнителем

4. Алгоритм называется циклическим, если?

1. При его выполнении предполагается многократное повторение одних и тех же действий

2. Последовательность выполнения команд зависит от истинности тех или иных условий

3. Команды выполняются последовательно, независимо от каких-либо условий

4. Включает в себя вспомогательный алгоритм

5. Является частью укрупненного алгоритма

5. Какое значение примет число S в результате выполнения данного алгоритма B?

V. 5 VI. 8 VII. 2 VIII. 0 IX. 12 Шаг1. Начало. Шаг2. f =4Шаг3. a = f /4 Шаг4. S = f +4 a Шаг5. Вывод результата S Шаг6. Конец. Алгоритм B к заданию V .

6. В каком виде представлен алгоритм C?

§ В виде словесного описания

§ В виде граф-схемы

§ В виде блок-схемы

§ В алгоритмическом виде

7. Какое значение примет число S в результате выполнения алгоритма D?

Читайте также:
Программа аудиторской проверки содержит перечень аудиторских процедур

1. 10

2. 4

3. 24

4. 0

5. 12

8. Какой блока их перечисленных используется в блок-схеме алгоритма для обозначения условия завершения цикла?

9. Формальные параметры процедуры:

Описываются в ее заголовке

Перечисляются при вызове процедуры

Указываются при описании данных в программе

Указываются при описании внутренних переменных процедуры

Таких параметров нет.

10. Синтаксис языка программирования это:

Совокупность значений (смысл) всех конструкций языка.

Набор правил построения конструкций языка

Только правильное написание служебных слов

Правильное описание используемых переменных в программе

11. Языки программирования высокого уровня

Используют операторы языка близкие к машинному коду

Ориентированы на конкретный тип процессора

Учитывают особенности конкретных компьютерных архитектур

Могут использоваться на разных типах компьютеров

Ориентированы на конкретные команды процессора.

12. Языки программирования баз данных:

Это языки программирования, предназначенные для записи алгоритмов, исполняемых на ЭВМ

Используются для управления базами данных

Предназначены для работы с текстовыми документами

Предназначены для работы с мультимедийными документами

13. Константа – это:

Величина, значение которой не изменяется в ходе выполнения программы

Величина, значение которой может изменяться в ходе выполнения программы.

Имя, которое служит для обозначения данных в программе

Результат вычисления выражения

Законченное предложение языка программирования

14. Константа а имеет значение 1,44, то есть а=1,44. Определите ее тип:

15. Задан массив К, размерность его . Определите правильную запись массива К:

К=

К=

К=

К=

16. Оператор присваивания предназначен для:

Явного указания последовательностей действий в соответствии с алгоритмом.

Выбора направления выполнения алгоритма в зависимости от некоторых условий

Изменения текущего значения переменной

Многократного выполнения одной и той же последовательности действий

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

17. Отдельный программный модуль, который реализует отдельный алгоритм называется:

Оператором цикла с параметром

Оператором вызова процедур

18. Параметры, которые указываются, в заголовке подпрограммы называются:

19. В какой технологии программирования используется следующий прием — программа разбивается на множество мелких подпрограмм, каждая из которых выполняет одно действие из предусмотренных исходным заданием:

Программирование на языках низкого уровня

20. Какой язык программирования относится к машинно-зависимым языкам:

HTML

Ответы на примерные тестовые задания

Ответы на задания по разделй 1

Ответы на задания по разделу 2

Ответы на задания по разделу 3

Ответы на задания по разделу 4

Ответы на задания по разделу 5

Ответы на задания по разделу 6

Приложение. С одержание части 2 «Основы информационных технологий»

7. Технологии обработки текстовой информации

7.1.Текстовые редакторы и процессоры.

7.2.Понятие о тексте и его обработке.

7.3.Этапы формирования текстового электронного документа.

7.4.Основные операции над текстом.

7.5.Приемы автоматизации разработки текстовых документов.

7.6.Специальные возможности текстовых процессоров.

7.7.Основы издательского делопроизводства.

7.8.Тренировочные тестовые задания по разделу 7.

8. Технология обработки графической информации

8.1.Теоретические основы представления графических данных.

8.2.Форматы графических данных.

8.4. Векторная графика.

8.5.Трехмерная (3D) графика.

8.6.Цвет и способы его описания.

8.8.Аппаратные и программные средства создания и обработки изображений.

8.9.Тренировочные тестовые задания по разделу 8.

9. Технология обработки числовой информации

9.1.Редакторы электронных таблиц и табличные процессоры.

9.2.Понятие об электронной таблице и ее обработке.

9.3.Этапы формирования электронной таблицы.

9.4.Основные операции над таблицей.

9.5.Вычисления в электронных таблицах

9.6.Приемы автоматизации разработки табличных документов.

9.7.Специальные возможности табличных процессоров.

9.8.Использование электронных таблиц для решения задач.

9.9.Тренировочные тестовые задания по разделу 9.

10.Технология хранения, поиска и сортировки информации

10.2.Требования, предъявляемые к БД и информации, хранящейся в ней.

10.3.Типы баз данных.

10.4.Основные понятия реляционных БД.

10.5.Операции по работе с БД.

10.6.Основные объекты в базах данных.

10.7.Основные операции по работе с объектами в БД.

10.8.Поиск записей. Понятие о запросе. Виды запросов и способы их организации.

10.9.Тренировочные тестовые задания по разделу 10.

11.1.Понятие мультимедиа. Гипертекст и гипермедиа. Объекты мультимедиа.

11.2.Средства обеспечения мультимедиа-технологий. Схемы хранения и воспроизведения мультимедиа-файлов.

11.3.Средства создания мультимедиа документов (обзор).

11.4.Тренировочные тестовые задания по разделу 11.

12.4.Средства реализации сетей.

12.5.Глобальная сеть Интернет.

12.6.Основы технологии WWW.

12.7.Тренировочные тестовые задания по разделу 12.

Ответы на приамерные тестовые задания (по части 2)

Литература для самостоятельной подготовки

В список литературы включены только учебники и учебные пособия, рекомендованные Министерством образования и науки Российской Федерации в качестве базовых для проведения занятий в школе по дисциплине «Информатика».

Гейн А.Г. и др. Информатика 10-11 кл. — М.: Просвещение, 2000…2002.

Кушниренко А.Г. и др. Основы информатики и вычислительной техники. 10-11 кл. — М.: Просвещение, 1997.

Кушниренко А.Г. и др. Информационная культура 10 кл. — М.: Дрофа, 2002.

Кушниренко А.Г. и др. Информационная культура 11 кл. — М.: Дрофа, 2000…2002.

Ляхович В.Ф. Информатика. 10-11 кл. — М.: Просвещение, 1998.

Информатика. /Под ред. Н.В.Макаровой. 10-11 кл. —С.-Петербург, Питер, 1999.

Угринович Н.Д. Информатика и информационные технологии. 10-11 кл. — М.: БИНОМ, 2000…2003.

Шафрин Ю.А. Информационные технологии. — М.: БИНОМ, 1998, 1999.

Авторский коллектив

Белов Владимир Семенович, к.т.н., доцент

Бруттан Юлия Викторовна, ст. преподаватель

Мотайленко Лилия Владимировна, к.т.н., доцент

Мотина Надежда Владимировна, ст. преподаватель

Николаев Виктор Васильевич, ст. преподаватель

Полетаева Ольга Александровна, ст. преподаватель

Хагги Петр Анзельмович, ст. преподаватель

Дата: 2018-12-28, просмотров: 319.

Источник: findout.su

Передача параметров в подпрограммы.

В общем случае параметры у процедур и функций могут отсутствовать. В этом случае аргументы (входные параметры) и результаты (выходные параметры) передаются как глобальные переменные (объявленные в охватывающем блоке), общие для всех подпрограмм, но если надо передать значения аргументов непосредственно в подпрограмму (через заголовок – так повышается понятность программы) и получить результат непосредственно в точке вызова подпрограммы (тоже через заголовок), то при описании процедур и функций необходимо описывать и комментировать все параметры (и входные и выходные) в их заголовках. Такие описания в заголовке подпрограммы — это описания формальных параметров подпрограммы:

Формальные параметры в программах на Паскале бывают двух типов:

1) . Параметры – значения (обычно это аргументы).

2) . Параметры – переменные (обычно это результаты).

Если в заголовке подпрограммы формальный параметр описан как параметр — значение, то при вызове подпрограммы значение соответствующего фактического параметра копируется в область памяти, отведенную (в момент вызова подпрограммы) под него в стеке исходя из типа соответствующего формального параметра. Все действия в теле подпрограммы всегда записываются над формальными параметрами и глобальными переменными (если они есть), а реально выполняются при вызове над копиями соответствующих фактических параметров (эти копии – в стеке) и над глобальными переменными. Вопрос только в том, что происходит дальше с измененными (если они менялись) значениями формальных параметров.

Особенностью использования параметров — значений является то, что все действия (изменения), которым будут подвергнуты в теле вызванной подпрограммы эти формальные параметры-значения подпрограммы, будут относиться лишь к копиям (в стеке) соответствующих объектов вызывающей подпрограммы (указанных как фактические параметры) и при выходе из вызываемой подпрограммы в вызывающую (подпрограмму) эти изменения не отразятся на значениях соответствующих объектов (в вызывающей подпрограмме), указанных как фактические параметры (при вызове).

При передаче параметра — переменной в стек копируется не значение фактического параметра, а адрес фактического параметра. Соответствие между формальным и фактическим параметром устанавливается таким образом, что формальный параметр становится синонимом (они занимают одну и ту же область в памяти) фактического. Это приводит к тому, что изменение формальных параметров – переменных вызывает одновременное изменение и объектов, соответствующих фактическим параметрам. Поэтому по выходу из подпрограммы изменения параметров – переменных потеряны не будут (см. рис. ниже).

На Паскале параметры — значения описываются как обычные переменные:

Читайте также:
Программа проверяет на плагиат

procedure Summa (a : byte ; b : char 😉

Параметры — переменные на Паскале описываются после слова var:

( … var c : integer; … )

Особенность формальных и файтических параметров на Паскале:

0) в заголовке процедуры или функции описание одного формального параметра отделяется от другого точкой с запятой.

1) Каждый новый тип параметра — переменной должен сопровождаться словом var.

. var c : integer ; d : byte; d — параметр-значение

var c : integer ; var d : byte; d — параметр-переменная

2) Вызов процедуры имеет следующий вид:

Summa (1, 2, l, f);

фактические параметры

3)При вызове: один фактических параметр от другого отделяется запятой (а не ‘;’).

4) При описании подпрограммы после заголовка надо ставить точку с запятой.

5) Соответствие между формальными и фактическими параметрами устанавливается по порядку их записи слева направо.

6) Количество и тип формальных и фактических параметров должны совпадать.

7) Для формальных параметров – переменных соответствующим фактическим параметром может быть только переменные (не значение).

8) Для формальных параметров – значений соответствующим фактическими параметрами могут быть константы, переменные, вызовы функций, выражения.

9) Имена формальных и фактических параметров обычно не совпадают.

копирование при вызове стек

Фактические параметры

(в вызывающей п/п) копия a область памяти под форм. пар-р x (x:=a)

Var копия b область памяти под форм. пар-р y (y:=b)

a. ; адрес с область памяти под адрес факт. пар-ра z (z:=адрес_с^)

область памяти в стеке под копии значений и адреса фактических параметров вызова

b: . ;

наложение при вызове

Procedure P (x, y : read:

ПРИМЕР. Вычислить с помощью процедуры сумму 3-х чисел:

Var описание глобальных переменных

procedure summa(x, y, z: real;

begin описание процедуры

b:=2; ввод значений фактических параметров

writeln(‘s=’,s); до вызова

summa(a,b,c,s); вызов процедуры

writeln(‘s=’,s); после вызова

В результате выполнения данной программы на экран будет выведено две строки:

В этом примере x, y, z и g — в заголовке процедуры — формальные параметры. При вызове процедуры вформальные параметры примут значения соответствующих фактических:

причем g и s станут синонимами.

Что произойдет, если из заголовка удалить слово Var? Переменная g становится параметром — значением.

Что будет выведено на экран? В этом случае при вызове процедуры внутри процедуры g — примет значение 6. Это значение будет размещено в стеке и при выходе из процедуры там же и останется. Ввиду того, что не была установлена связь между фактическим и формальным параметром, значение S останется после вызова = 0. На экран будет выведено ,то значение s , которое она имела до вызова процедуры, т.е. s=0.

Дата добавления: 2016-05-28 ; просмотров: 2118 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ

Источник: poznayka.org

Передача параметров при вызове подпрограмм

Подпрограмма представляет собой самостоятельную компьютерную программу, включенную в состав более сложной программы (по отношению к подпрограмме она выступает в роли основной или вызывающей программы). В любом месте основной программы можно обратиться к подпрограмме (чаще говорят «вызвать подпрограмму»). Ядро процессора при этом должно перейти на ад­рес первой команды подпрограммы, а после ее завершения вернуться на адрес ко­манды основной программы, следующей за командой вызова подпрограммы.

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

Механизм поддержки работы с подпрограммами должен включать два основ­ных типа команд — команду вызова подпрограммы и команду возврата из подпро­граммы. Команда вызова подпрограммы должны обеспечить переход на первую ко­манду вызываемой подпрограммы, а команда возврата — переход на команду вызы­вающей программы, следующую за командой вызова. Команды относятся к категории команд управления ходом выполнения программы.

На рис. 17.1а показан пример использования подпрограммы. В данном примере имеется основная программа, которая разме­щена в оперативной памяти, начиная с адреса 4000. В основной программе существует вызов подпрограммы PROC1, которая размещена в оперативной памяти, начиная с адреса 4500.

Когда в процессе выполнения основной программы ядро процессора дойдет до этой команды, оно прервет выполнение основной программы и перейдет на выполнение подпро­граммы PROC1, поместив ее начальный адрес 4500 в счетчик команд. В теле под­программы PROC1 есть две команды вызова подпрограммы PROC2, которая разме­щена в оперативной памяти, начиная с адреса 4800.

Дойдя до каждой из этих команд, ядро процес­сора прекратит выполнять подпрограмму PROC1 и перейдет на выполнение подпрограммы PROC2. Встретив в подпрограмме команду RETURN, ядро процессора вер­нется в вызывающую программу и продолжит ее выполнение с команды, следую­щей за командой CALL, которая вызвала переход на только что завершенную под­программу. Этот процесс схематически показан на рис. 17.1.6.

Необходимо обратить внимание на следующие моменты:

подпрограмма может быть вызвана из любого места других программных
модулей. Таких вызовов может быть сколько угодно.

одна подпрограмма может быть вызвана из другой, которая, в свою очередь, вызвана третьей. Это называется вложенностью (nesting) вызовов. Глубина вложенности теоретически может быть произвольной.

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

Рис. 17.1. Вложенный вызов подпрограмм:

а — команды вызова и возврата; б — последовательность выполнения команд

Из всего этого следует, что ядро процессора при выполнении команды вызова подпрограммы должно каким-то образом сохранить адрес возврата (т.е. адрес команды вызывающей программы, следующей за выполняемой командой вызо­ва). Существует три места, где можно было бы сохранить адрес возврата:

начальный адрес подпрограммы;

верхняя ячейка стека.

Рассмотрим машинную команду CALL X, которая интерпретируется как «вызов подпрограммы, расположенной по адресу X». Если для хранения адреса возврата использовать регистр Rn, то выполнение команды CALL X должно про­ходить следующим образом (PC — счетчик команд ядра процессора):

В этой записи D — длина текущей команды. Затем адрес возврата оказывается в регистре Rn, откуда его может извлечь вызванная подпрограмма и сохранить где-либо в оперативной памяти для выполнения в дальнейшем возврата в вызывающую программу.

Если будет принято решение сохранять адрес возврата по начальному адре­су вызываемой подпрограммы, то при выполнении команды CALL X ядру процессора нужно будет выполнять следующие операции:

Это довольно удобно, поскольку адрес возврата всегда сохраняется в месте, точно известном подпрограмме (точнее, ее разработчику).

Оба описанных подхода работоспособны и используются на практике. Единственным, но довольно существенным их недостатком является невозможность реализации реентерабельныхподпрограмм. Реентерабельность подпрограммы означает, что она может быть вызвана повторно еще до завершения текущего вызова. Например, это происходит, если внутри подпрограммы вызывается дру­гая подпрограмма, которая, в свою очередь, вызывает первую. Реентерабельны­ми должны быть и подпрограммы, реализующие рекурсивные алгоритмы.

Более общим, и более надежным, подходом является использование для хра­нения адреса возврата стека. Когда ядро процессора выполняет команду вызова подпрограммы, адрес возврата помещается в верхнюю ячейку стека, а когда он выполняет команду возврата, извлекает этот адрес из верхней ячейки стека.

Стеки

Стек — это список элементов данных, обычно слов или байтов, доступ к которым ограничен следующим правилом: элементы этого списка могут добавляться толь­ко в его конец и удаляться только из конца. Конец списка называется вершиной стека, а его начало — дном. Такую структуру иногда называют магазином. Пред­ставьте себе стопку подносов в столовой.

Клиенты берут подносы сверху, работ­ники столовой, добавляя чистые подносы, тоже кладут их на верх стопки. Этот механизм хранения хорошо описывается емкой фразой «последним вошел — пер­вым вышел» (Last In First Out, LIFO), означающей, что элемент данных, помещенный в стек последним, удаляется из него первым. Операцию помещения но­вого элемента в стек часто называют его проталкиванием (push), а операцию извлечения последнего элемента из стека называют его выталкиванием (pop).

Читайте также:
Как написать программу в excel visual basic

Хранящиеся в оперативной памяти компьютера данные могут быть организованы в виде сте­ка, так чтобы последовательные элементы располагались друг за другом. Предположим, что первый элемент хранится по адресу BOTTOM, а когда в стек помещаются новые элементы, они располагаются в порядке уменьшения последовательных адресов. Таким образом, стек растет в направлении уменьшения адресов, что является весьма распространенной практикой.

На рис. 17.2 показано, как располагается в памяти компьютера стек, элементы которого занимают по одному слову.

На «дне» он содержит числовое значение 43, а на вершине — 28. Для отслеживания адреса вершины стека используется регистр ядра процессора, называемый указателем стека (Stack Pointer, SP). Это может быть один из регистров общего назначения или же регистр, специально предназначен­ный для этой цели.

Рис. 17.2. Стек слов в оперативной памяти

Если предположить, что оперативная память адресуется побайтно и слово имеет длину 32 разряда, операцию проталкивания в стек можно реализовать так:

где команда Subtract вычитает исходный операнд 4 из результирующего операн­да, содержащегося в регистре SP, и помещает результат в регистр SP. Эти две ко­манды помещают слово, хранящееся по адресу NEWiTEM, на вершину стека, предварительно уменьшая указатель стека на 4. Операция выталкивания из стека может быть реализована так:

Эти две команды перемещают значение, хранившееся на вершине стека, в дру­гое место оперативной памяти, по адресу ITEM, а затем уменьшают указатель стека на 4, чтобы он указывал на тот элемент, который теперь располагается на вершине стека. Результат выполнения каждой из этих операций для стека, показанного на рис. 17. 2, приведен на рис. 17.3.

Рис. 17.3. Результат выполнения операций со стеком

Если в архитектуре поддерживаются режимы автоинкрементной и автодекрементной адресации, для помещения нового элемента в стек достаточно команды

а выталкивание элемента из стека можно выполнить посредством команды

Когда стек используется программой, для него обычно выделяется фиксирован­ное количество ячеек оперативной памяти. В этом случае нужно проследить за тем, чтобы программа не пыталась помещать новые элементы в стек, достигший своего максимального размера. Кроме того, она не должна пытаться вытолкнуть элемент из пустого стека, что могло бы произойти в случае логической ошибки.

Предположим, что стек заполняется, начиная с адреса 2000 (BOTTOM) до 1500 и далее. Первоначально в регистр, играющий роль указателя стека, загружа­ется значение 2004. Напомним, что перед помещением в стек нового элемента данных из значения SP каждый раз вычитается 4. Поэтому начальное значение 2004 означает, что первый элемент стека будет иметь адрес 2000. Для предотвра­щения попыток помещения элемента в полный стек или удаления элемента из пустого стека нужно несколько усложнить реализацию операций проталкивания и выталкивания элемента. Для выполнения каждой из этих операций указаннойвыше команды недостаточно — ее нужно заменить последовательностью команд, приведенной в таблице 17.1.

Команда сравнения Compare src,dst выполняет операцию [src]-[dst] и устанавливает флаги условий в соответствии с полученным результатом. Она не изменяет значения ни одного из операндов. Фрагмент а таблицы 17.1 демонстрирует выталкивание элемента из стека, а фрагмент б этой же таблицы — помещение элемента в стек при реализации контроля пустого и полного стека при выполнении операций проталкивания и выталкивания элемента.

Команда

Фрагмент а

Compare #2000,SP

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

Фрагмент б

Передача параметров при вызове подпрограмм

Вызывая подпрограмму, программа должна передать ей параметры (операнды), или же их адреса. Закончив свою работу, подпрограмма вернет другие параметры — результаты выполнения. Такой обмен информацией между вызывающей программой и подпрограммой называ­ется передачей параметров. Передача параметров может выполняться нескольки­ми способами.

Например, параметры можно помещать в регистры или в оперативную память, от­куда подпрограмма сможет их считать. В качестве альтернативы параметры можно поместить в стек, используемый для хранения адресов возврата.

Использование регистров ядра процессора — способ простой и эффективный. В таблице 17.2 показано, как реализовать программу, выполняющую сложение последовательности чисел, в виде подпрограммы с передачей параметров через регистры.

Команда

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

Подпрограмма

Длина последовательности п, информация о которой хранится в оперативной памяти по адресу N, и адрес первого числа NUM1 передаются под­программе через регистры R1 и R2. Вычисленная подпрограммой сумма возвра­щается вызывающей программе через регистр R0. Первые две команды загружают в регистры R1 и R2 значения N и NUM1.

Команда CALL выполняет переход к подпрограмме, начинающейся по ад­ресу LISTADD. Кроме того, эта команда помещает в стек адрес воз­врата из подпрограммы. Подпрограмма вычисляет сумму и помещает ее в регистр R0. После возврата из подпрограммы вызывающая программа сохраняет эту сум­му в оперативной памяти по адресу SUM.

Если у подпрограммы много параметров, для их передачи может просто не хватить регистров общего назначения. С другой стороны, стек — структура гиб­кая, в него можно поместить много параметров. Следующий пример показывает, как выполняется передача параметров через стек.

В таблице 17.3приведена та же программа, выполняющая сложение последовательности чисел, но реализованная в виде подпрограммы LISTADD. Любая другая программа может вызвать указанную подпрограмму для сложения последовательности чисел. Подпрограмме LISTADD передается адрес первого числа в последовательности и количество ее элементов.

Подпрограмма выполня­ет сложение и возвращает полученную сумму. Ее параметры помещаются в стек процессора, на который указывает регистр SP. Предположим, что до вызова под­программы вершина стека располагается на уровне 1 (рис.17.4). Вызывающая программа помещает в стек адрес NUM1 и значение п и вызывает подпрограмму LISTADD. Кроме того, команда CALL помещает в стек адрес возврата из подпро­граммы. Теперь вершина стека располагается на уровне 2.

Команда

Предполагается, что вершина стека расположена на уровне 1

Рис.17.4. Программа, выполняющая сложение последовательности чисел и реализованная как подпрограмма, с передачей параметров через стек

Подпрограмма использует три регистра. Поскольку в них могут содержаться данные, принадлежащие вызывающей программе, их содержимое сохраняется в стеке. Для помещения в стек содержимого регистров от R0 до R2 использована команда MoveMultiple. Подобные команды имеются у многих архитектур.

Те­перь вершина стека располагается на уровне 3. С помощью индексной адресации подпрограмма считывает из стека параметры п и NUM1. Значение указателя сте­ка при этом не меняется, поскольку на вершине стека по-прежнему располагают­ся нужные элементы данных.

Значение п загружается в регистр R1, который будет играть роль счетчика, а адрес NUM1 — в регистр R2, который будет слу­жить указателем при сканировании списка значений. Регистр R0 должен содер­жать результат суммирования. Перед возвратом из подпрограммы содержимое ре­гистра R0 помещается в стек, заменяя параметр NUM1, который больше не нужен. Затем из стека восстанавливается содержимое трех регистров, использовав­шихся подпрограммой. Теперь верхним элементом стека является адрес возврата, расположенный на уровне 2. После возврата из подпрограммы вызывающая программа сохраняет результат в оперативной памяти по адресу SUM и возвращает вершину сте­ка на ее исходный уровень, уменьшая значение SP на 8.

Дата добавления: 2021-03-18 ; просмотров: 116 ; Мы поможем в написании вашей работы!

Источник: studopedia.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru