Иллюстрированный самоучитель по Assembler


386+ BTR Проверка и сброс бита - часть 2


; Установка бита 10, ZF=0

CALL Вызов подпрограммы


Команда call передает управление подпрограмме, сохранив перед этим в стеке смещение к точке возврата. Команда ret, которой обычно заканчивается подпрограмма, забирает из стека адрес возврата и возвращает управление на команду, следующую за командой call. Команда не воздействует на флаги процессора.

Команда call имеет четыре модификации:

- вызов прямой ближний (в пределах текущего программного сегмента);

- вызов прямой дальний (вызов подпрограммы, расположенной в другом программном сегменте);

- вызов косвенный ближний;

- вызов косвенный дальний.

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


near ptr - прямой ближний вызов;

far ptr - прямой дальний вызов;

word ptr - косвенный ближний вызов;

dword ptr - косвенный дальний вызов.


Команда call прямого ближнего вызова заносит в стек относительный адрес точки возврата в текущем программном сегменте и модифицирует IP так, чтобы в нем содержатся относительный адрес точки перехода в том же программном сегменте. Необходимая для вычисления этого адреса величина смещения от точки возврата до точки перехода содержится в коде команды, который занимает 3 байт (код операции E8h и смещение к точке перехода).

Команда call прямого дальнего вызова заносит в стек два слова - сначала сегментный адрес текущего программного сегмента, а затем (выше, в слово с меньшим адресом) относительный адрес точки возврата в текущем программном сегменте. Далее модифицируются регистры IP и CS: в IP помещается относительный адрес точки перехода в том сегменте, куда осуществляется переход, а в CS - сегментный адрес этого сегмента. Обе эти величины берутся из кода команды, который занимает 5 байтов (код операции 9А1г, относительный адрес вызываемой подпрограммы и ее сегментный адрес).




Начало  Назад  Вперед



Книжный магазин