CALL: Вызов процедуры. Выполняет короткий или длинный вызов процедуры для связи подпрограмм. Для возврата из процедуры используется команда RET. Команда CALL уменьшает содержимое SP на 2 и заносит в стек адрес следующей команды (из IP), а затем устанавливает в регистре IP относительный адрес процедуры. Впоследствии команда RET использует значение в стеке для возврата. Существует четыре типа команды CALL для вызова внутри сегмента и между сегментами. Команда межсегментного вызова сначала уменьшает SP, заносит в стек адрес из регистра CS, а затем загружает в стек внутрисегментный указатель.
Пример ассемблер кода с использованием данной команды:view source
01
org100h
02
callfunc
03
movax,4c00h
04
int21h
05
msg db"Hello CALL!$"
06
func:
07
movah,9
08
movdx,msg
09
int21h
10
ret
Программа вызывает функцию которая выводит строку на экран, затем возвращается на следующую команду после CALL, то есть в нашем случае выполниться mov ax,4c00h.