Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на вопросы ОС.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
36.44 Кб
Скачать

21.Вызовы, возвраты и определение подпрограмм

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

передает управление с автоматическим сохранением адреса возврата в

стеке для успешного возвращения к выполнению текущей программы

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

адрес первого оператора подпрограммы. Возврат управления в основную

программу происходит по команде RET.

22.Основные сведения об организации подпрограмм

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

передает управление с автоматическим сохранением адреса возврата в

стеке для успешного возвращения к выполнению текущей программы

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

адрес первого оператора подпрограммы. Возврат управления в основную

программу происходит по команде RET.

В силу сегментирования памяти микропроцессора ВМ86 выделяют два

типа команды CALL: NEAR (внутрисегментный вызов), когда

подпрограмма находится в текущем сегменте кода, и FAR (межсегментный

вызов), когда код подпрограммы находится в другом сегменте. В

соответствии с типом вызова в стеке запоминаются соответственно либо

только указатель команд PC, либо указатель команд PC и сегментный

регистр CS.

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

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

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

старое содержимого PC и, при необходимости (в зависимости от типа

вызова), содержимого CS.

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

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

данные и только после этого происходит вызов подпрограммы. Если

использовать обычную команду RET, после возврата из подпрограммы в

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

Поэтому необходимо будет принять меры по очистке стека, иначе он

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

Для упрощения такой работы со стеком в систему команд ВМ86 была

введена модификация команды возврата из прерывания RET disp. При

возврате управления, после того как из стека были выгружены PC и CS, к

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

команде. Таким образом, в основной программе после вызова

подпрограммы не нужно освобождать стек от переданных данных, это

делается автоматически.

23.Директивы определения данных.

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

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

байт начальными данными и определения переменных данных

Все директивы определения данных имеют некоторые общие

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

данные и резервировать место для неинициализированных данных. Для

инициализированных данных определяется некоторое начальное значе-

ние. Неинициализированные данные определяются без задания началь-

ного значения (говорят, что их начальное значение является неоп-

ределенным). В директивах определения данных неинициализированные

данные указываются с помощью символа ?. Все прочее должно предс-

тавлять значение инициализированных данных. О том, как следует

различать инициализированные и неинициализированные данные, расс-

казывается в Главе 7.

Другим средством, которое применяется во всех директивах

определения данных, является использование для указания повторе-

ния блока данных ключевого слова DUP.