Читайте также: |
|
Если подпрограмма и команда вызова находятся в разных сегментах, то такой вызов называется дальним - far. При этом для возврата из подпрограммы используется команда retf. Команда дальнего вызова записывается в виде:
call имя_сегмента:имя_подпрограммы
Рис.3.1. Дальний вызов подпрограммы
Для возврата в исходную точку программы в стек процессором заносится адрес текущего сегмента – содержимое регистра CS и смещение к следующей команде – содержимое регистра IP. Два слова(4 байта). Затем в регистр CS загружается адрес сегмента, где находится подпрограмма, в регистр IP адрес первой команды подпрограммы.
Рис.3.2. Состояние стека, far - вызов
Пример. Программа вывода символа с дальним вызовом.
format MZ
entry csg1:main
stack 512
;======================
segment csg1;Первый сегмент кода
;-------------------
main:
mov AX,dsg
mov DS,AX;DS -> dsg
;-------------------
call csg2:getSym;Вызов подпрограммы
;-------------------
mov AH,08
int 21h
mov AX,4C00h
int 21h
;======================
segment dsg;Сегмент данных
sym db 176;Символ
;======================
segment csg2;Второй сегмент кода
getSym:
mov AH,02
mov DL,[sym]
int 21h
retf
Дата добавления: 2015-07-26; просмотров: 79 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Ближний вызов подпрограммы | | | Передача исходных данных в подпрограмму |