Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
на печать11.doc
Скачиваний:
41
Добавлен:
11.06.2015
Размер:
1.04 Mб
Скачать

17.Понятие о подпрограмме; вызов подпрограммы; стек; адрес возврата; рекурсивная подпрограмма.

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

Стек – стопка. Под стек выделяется область памяти, размещенанная в сегменте стека, адресуемая по регистру SS. SP – указатель стека, хранит адрес текущей вершины стека. Со стеком возможны 2 основных и 2 дополнительных операции. Основные: запись числа в стек, указатель стека модифицируется, чтобы указывать на ближайшую свободную ячейку, в эту ячейку записывается сохраняемая величина, считывание из стека, из вершины считывается число, указатель модифицируется, так, чтобы указывать на предыдущую из указанных ячеек. В большинстве ЭВМ стек растет в сторону уменьшения адресов. При записи указатель уменьшается, при считывании растет. Дополнительные: проверка на переполнение и пустоту. Вызов подпрограммы происходит с помощью команды CALL <адрес, имя подпрограммы>

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

18.Способы передачи параметров в подпрограммы; передача параметров по ссылке и по значению.

Формальные и фактические параметры

Чтобы отличать параметры подпрограммы, описанные в её заголовке и теле, от параметров, указываемых при вызове подпрограммы, первые принято называть формальными параметрами, вторые — фактическими параметрами. При вызове подпрограммы фактические параметры, указанные в команде вызова, становятся значениями соответствующих формальных параметров, чем и обеспечивается передача данных в подпрограмму.

Способ передачи параметров в подпрограмму

Существует несколько способов передачи параметров в подпрограмму.

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

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

Передача параметров через стек. Это фактически разновидность передачи параметра по значению «с ручным приводом», в данном случае отсутствует понятие формальных и фактических параметров. Все параметры лежат на стеке, причём их типы, количество и порядок не контролируются компилятором.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]