Команды вызова процедуры и возврата из нее

Опубликовано февраля 3, 2018 в Архитектура процессора Intel

CALL может использовать все способы задания адреса перехода вызываемой процедуры, кроме короткого относительного (SHORT).

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

Команды перехода но счетчику

Адрес возврата состоит из содержимого IP при ближнем вызове (CALL NEAR) и дополнительно из CS при дальнем вызове CALL FAR.

Таким образом, команда CALL выполняет следующие действия:

  1. сохраняет в стеке адрес возврата;
  2. осуществляет безусловную передачу управления по адресу вызова (адрес первой команды процедуры).

Если вызов дальний, в стеке сохраняется два слова, в соответствии с принципом размещения слов в памяти: сначала в стек помещается CS , а потом IP.

RET (RETurn) — осуществляет возврат из процедуры в основную программу и является завершающей командой в процедуре. Вид возврата, ближний или дальний, совпадает с видом предшествующего вызова. Команда RET производит извлечение из стека адреса возврата в виде содержимого IP (ближний возврат), либо в виде пары IP:CS (дальний возврат).

В машинном коде используются две модификации команды RET:

  1. однобайтная команда (содержит только код операции);
  2. трёх байтная команда (кроме кода операции, содержит непосредственный операнд).

При выполнении трёхбайтной команды RET дополнительно осуществляется сложение указателя стека SP с непосредственным операндом. С помощью этого дополнительного действия производится очистка стека от параметров отработавшей процедуры. 'Г.к. стек работает со словами, а не с байтами, для удаления трёх параметров в качестве непосредственного операнда используется значение 6.

Команды манипуляции флагами

Данные команды производят определённое воздействие:

  1. сброс CLC;
  2. установку STC;
  3. инвертирование СМС.

Эти действия осуществляются только в отношении 3-х флагов: переноса CF, направления DF и прерывания IF, причём инвертирование только в отношении флага переноса CF. Все команды манипуляции флагами являются однобайтными, т.е. неявно адресуют операнд в виде соответствующею флага.

Обратите внимание, что при заключении договора на абонентское обслуживание компьютеров на один год, на сайте ivit.pro, LANDING PAGE В ПОДАРОК!