Команда CALL выполняет вызов подпрограммы, адрес которой задан операндом.

 

Команда CALL
Синтаксис: CALL op1
Операнды: op1 - i16, i32, i48, r/m16, r/m32, m48
Назначение: Вызов подпрограммы (процедуры)
Процессор: 8086+
Флаги: Не изменяются
Комментарий:

Команда CALL сохраняет в стеке адрес следующей команды и передает управление по адресу, указанному в операнде.
В зависимости от типа операнда процессор трактует его значение по-разному:

Непосредственное значение
Трактуется процессором как смещение адреса перехода относительно следующей команды или как адрес дальнего межсегментного перехода.

Регистр
Его значение будет принято процессором в качестве адреса перехода в пределах текущего сегмента.

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

При выполнении дальнего перехода, команда CALL помещает в стек сначала сегмент следующей команды, а затем ее смещение в сегменте. При выполнении ближнего перехода, сегмент в стек не заносится.
Операнды размером в 48 бит используются в защищенном режиме (16 бит на селектор, 32 бита на смещение).
Ограничения: Нет
Примеры:
call	l1		;Ближний переход, непосредственное смещение
call	l2		;Дальний переход, непосредственный адрес
call	ax		;Ближний переход, адрес в регистре AX
call	[bx]		;Ближний переход, адрес в ячейке памяти,
			;адресуемой регистром BX
call dword ptr [bx]	;Дальний переход, адрес в 32-битной ячейке памяти,
			;адресуемой регистром BX
l1:
	...
	ret

l2	proc	far
	...
	retf
	endp