Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Materialy_po_SP_2013.doc
Скачиваний:
270
Добавлен:
11.05.2015
Размер:
754.69 Кб
Скачать

50 Понятие модульного программирования. Понятие подпрограммы. Ассемблерные процедуры и функции.

Понятие модульного программирования.

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

1. Использование механизма макроподстановок, позволяющего изменять исходный текст программы в соответствии с некоторыми предварительно описанными параметризованными объектами, имеющими формальные аргументы.

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

3. Использование механизма подпрограмм, написанных на разных языках программирования и соединяемых в единый модуль на этапе компоновки.

При описании модулей и процедур часто оперируют такими понятиями как аргумент, переменная, константа.

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

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

Константа– данные, значение которых никогда не изменяется.

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

Понятие подпрограммы.Ассемблерные процедуры и функции.

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

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

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

  • в начале программы, до первой исполняемой команды;

  • в конце, после команды, возвращающей управление операционной системе;

  • промежуточный вариант – тело процедуры располагается внутри другой процедуры или основной программы, в этом случае необходимо предусмотреть обход процедуры с помощью команды безусловного перехода JMP;

  • в другом модуле.

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

В системе команд микропроцессора есть две команды, осуществляющие работу с контекстом. Это команды callиret:

  • CALL [модификатор] имя процедуры – вызов процедуры (подпрограммы). КомандаCALL, подобноJMP, передает управление по адресу с символическим именемимя процедуры, но при этом в стеке сохраняется адрес возврата.Адрес возврата– это адрес команды, следующей после командыcall;

  • RET[число] – возвращает управление вызывающей программе, т.е. считывает адрес возврата из стека и загружает его в регистрыCSиIP/EIP, тем самым возвращая управление на команду, следующую в программе за командойCALL,[число] – необязательный параметр, обозначающий количество элементов, удаляемых из стека при возврате из процедуры.

При использовании CALL необходимо учитывать особенности организации ближних и дальних переходов (параметр [модификатор]).

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