<<
>>

Безусловные переходы

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

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

Для организации безусловного перехода в регистры сs и iр (или только iр) загру- жается их новое содержимое, то есть новый указатель. При этом их старое содер- жимое — старый указатель — безвозвратно теряется. Это значит, что после со- вершения перехода восстановить точку программы, из которой он был совершен, невозможно. На рис. 4.36, а приведен пример выполнения безусловного перехо- да по команде jmр Ml.

Вызов подпрограмм осуществляется с помощью команды с мнемокодом call (вызвать). В команду call входит метка директивы рrос (от procedure — про- цедура), с которой в языке Ассемблер принято начинать подпрограммы.

Закан- чиваются подпрограммы директивой епdр (от end procedure — конец процеду- ры), которая должна иметь ту же самую метку, что и директива рrос.

Обращение к подпрограмме происходит следующим образом. Вначале старое значение указателя из регистров сs:iр помещается в стек (рис. 4.36, б). Отме- тим, что в момент выполнения команды call регистры сs:iр содержат адрес команды, которая расположена непосредственно за этой командой вызова под- программы. На рис. 4.36, б эта точка программы отмечена меткой VI. Затем из команды вызова выбирается новый указатель (в примере на рисунке это указа- тель на метку Р1 начала подпрограммы), который загружается в регистры сs:iр. Тем самым обеспечивается переход к выполнению вызванной подпрограммы.

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

Чтобы та- кой возврат произошел, в подпрограмму должна быть включена команда rеt (от return — возврат), схема выполнения которой показана на рис. 4.36, в. По коман- де rеt производятся выборка указателя из вершины стека и последующая его загрузка в пару регистров сs:iр. В примере на рис. 4.36 из стека выбирается

указатель, соответствующий метке VI, которой отмечена команда, непосредст- венно следующая за командой вызова call Рl.

Использование стека для хранения последовательности адресов возвратов позво- ляет правильно организовать вложенные обращения к подпрограммам. На рис. 4.37 изображена схема выполнения вложенных вызовов, когда из основной програм- мы вызывается подпрограмма Рl, а из нее — другая подпрограмма Р2. Во время выполнения первого вызова по команде call Рl (рис. 4.37, а) в стек попадает адрес точки возврата VI и управление передается в начало подпрограммы Рl. Внутри подпрограммы Рl вызывается другая подпрограмма Р2. По команде call Р2 в стек попадает адрес второй точки возврата V2 и происходит переход в начало второй подпрограммы Р 2 (рис. 4.37, б).

Предполагается, что в теле подпрограммы Р2 других вызовов нет. Поэтому в мо- мент выполнения находящейся в теле подпрограммы Р2 команды rеt из верши- ны стека выбирается адрес второй точки возврата V2 (рис. 4.37, в) и таким обра- зом осуществляется возвращение в первую подпрограмму Рl, в ту ее точку, из которой была вызвана подпрограмма Р2.

Когда закончится выполнение подпрограммы Рl и начнется выполнение ее ко- манды rеt (рис. 4.37, г), из вершины стека окажется выбранным адрес первой точки возврата VI и, следовательно, осуществится возврат в основную программу.

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

<< | >>
Источник: Степанов А. Н.. Архитектура вычислительных систем и компьютерных сетей. 2007

Еще по теме Безусловные переходы:

  1. ПЕРЕХОД ЦИФР «22 — 4». ХАРАКТЕРИСТИКИ ПЕРЕХОДА
  2. ПЕРЕХОД ЦИФР «8 — 11», ХАРАКТЕРИСТИКИ ПЕРЕХОДА
  3. ПЕРЕХОД ЦИФР «6 — 7». ХАРАКТЕРИСТИКИ ПЕРЕХОДА
  4. РЕФЛЕКС БЕЗУСЛОВНЫЙ
  5. БЕЗУСЛОВНАЯ ЛЮБОВЬ
  6. Безусловное уважение клиента
  7. «БЕЗУСЛОВНЫЙ» РЕФЛЕКС
  8. ТОРМОЖЕНИЕ БЕЗУСЛОВНОЕ
  9. 2. Честность и бескорыстие – безусловные факторы воспитания
  10. § 29 Передача и переход прав по обязательствам. – Римская конструкция права передачи. – Облегчение передачи новейшим законодательством. – Передаточная надпись. – Ограничения передачи. – Действие передачи. – Ответственность передатчика и права приобретателя. – Вступление в право кредитора или суброгация. – Русский закон передачи. – Передача заемных писем. – Переход требований к кредиторам.