Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сп экзамен (Автосохраненный).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
427.44 Кб
Скачать

1)Блочная структура программы: внутренние и внешние процедуры

Процедуры могут быть внутренними, внешними и модульными. Описание внутренней процедуры непосредственно включается в текст охватывающей программной единицы (носителя) и не может содержать вложенных процедур. Внешняя процедура существует автономно и может быть разработана на дру- гих языках (С и его версии, ассемблер). Программные единицы бывают следующих видов: главная программа, внеш- няя процедура, модуль и блок данных. Каждая из них • физически отделена от других; • начинается оператором-заголовком, содержащим специфическое для данной программной единицы ключевое слово: program, subroutine; function, module, block data. В.Б. Альгин «Курс лекций по компьютерной информатике» 125 • заканчивается предложением end с повторением (иногда не обязатель- ным, но рекомендуемым) того же ключевого слова и собственного имени программной единицы; • обрабатывается компилятором отдельно от остальных. Любая программная единица может содержать неограниченное число пред- ложений вида include '' (при необходимости — с указанием пути к файлу). Стандартные директории для поиска вставок задаются настройкой MDS. Вставленный текст далее обра- батывается компилятором как составная часть программной единицы. Выполняемая программа состоит из головной программы и произвольного числа остальных программных единиц. Частью головной программы могут быть внутренние процедуры. Вложенные процедуры любого вида имеют доступ ко всем объектам своего носителя. Внешняя процедура отличается от головной программы только заголовком и ключевым словом в завершающей строке. Она приводится в действие опера- тором call из вызывающей программной единицы или указателем функции (для функций). Внутренние процедуры выглядят так же, как модульные, но не могут иметь вложенных в них процедур.

2)блочная структура программы: правила описания и вызова процедур

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

В режиме Ideal она имеет следующий синтаксис:

PROC [[модификатор_языка] язык] имя [расстояние]

[ARG список_аргументов] [RETURN список_элементов];

[LOCAL список_аргументов]

[USES список_элементов]

.

.

.

ENDP [имя]

В режиме MASM используется следующий синтаксис:

имя PROC [[модификатор_языка] язык] [расстояние]

[ARG список_аргументов] [RETURN список_элементов];

[LOCAL список_аргументов]

[USES список_элементов]

.

.

.

[имя] ENDP

Турбо Ассемблер также воспринимает для определения процедур

синтаксис MASM.

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

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

  • call ИмяПроцедуры@num — вызов процедуры (подпрограммы).

  • ret число — возврат управления вызывающей программе.

число — необязательный параметр, обозначающий количество байт, удаляемых из стека при возврате из процедуры. Для вызова подпро- граммы-процедуры используется оператор CALL, имеющий вид CALL (S) где S — список фактических параметров. Между формальными и фактиче- скими параметрами должно соблюдаться соответствие по порядку следования и типу. Оператор CALL помещается в вызывающем программном модуле.