ВУЗ:
Составители:
Рубрика:
8 Команды перехода между программой и подпрограммой
В этой главе рассмотрим команды переходов, позволяющие
осуществлять переход из тела программы к подпрограмме и возврат
назад. Сразу поставим точки над i: подпрограммой будем называть
такую программу, которая заканчивается безадресным переходом типа
RET (RET — RETURN — возврат). Эти команды используются, главным
образом, в двух видах.
Что делает микропроцессор, обнаружив КОП безадресного
перехода
RET NEAR (КОП=СЗ, ассемблер: RETN) или RET FAR (КОП=СВ,
ассемблер: RETF)?
а) если КОП = СЗ (ассемблер: RET или RETN), то МП
8086 производит скрытую операцию чтения стека POP IP: IP :=
<Stack>.
б) если КОП = СВ ( ассемблер: RETF — возврат издалека, из
другого сегмента), то МП 8086 производит две скрытых операции чтения
стека: сначала POP IP, потом POP CS:
IP := <Stack>;
CS := <Stack>.
Примечание – Процедуры чтения-записи стека изложены в главе 4,
поэтому подробности, связанные с организацией стека, здесь опускаются.
Поскольку смысл любой подпрограммы в том, чтобы выполнять
какую-то часто повторяемую процедуру и возвращаться туда, откуда
произошел «скачок» на подпрограмму, и принимая во внимание, как
происходит безадресный возврат, нетрудно догадаться, что где-то
должны позаботиться о том, чтобы прежде, чем сделать «скачок», в стеке
остался на сохранение адрес той команды, которая была следующей, но
еще не успела выполниться. И судя по командам возврата, должно быть
два типа таких команд-скачков, из которых одна перед «скачком»
отправляет в стек только содержимое IP, а вторая сначала отправляет в
стек содержимое CS, а потом —содержимое IP.
Рассмотрим эти два типа команд, которые имеют мнемонику
CALL1(CALL —вызов).
8.1 Внутрисегментные переходы
8.1.1 Внутрисегментный, с относительной адресацией; команда 3-х
байтовая:
а) ассемблер: CALL Addr;
б) КОП = Е8.
Все процедуры формирования смещения такие же, как в п.2 главы
7 для команды JMP.
54
8 Команды перехода между программой и подпрограммой
В этой главе рассмотрим команды переходов, позволяющие
осуществлять переход из тела программы к подпрограмме и возврат
назад. Сразу поставим точки над i: подпрограммой будем называть
такую программу, которая заканчивается безадресным переходом типа
RET (RET — RETURN — возврат). Эти команды используются, главным
образом, в двух видах.
Что делает микропроцессор, обнаружив КОП безадресного
перехода
RET NEAR (КОП=СЗ, ассемблер: RETN) или RET FAR (КОП=СВ,
ассемблер: RETF)?
а) если КОП = СЗ (ассемблер: RET или RETN), то МП
8086 производит скрытую операцию чтения стека POP IP: IP :=
.
б) если КОП = СВ ( ассемблер: RETF — возврат издалека, из
другого сегмента), то МП 8086 производит две скрытых операции чтения
стека: сначала POP IP, потом POP CS:
IP := ;
CS := .
Примечание – Процедуры чтения-записи стека изложены в главе 4,
поэтому подробности, связанные с организацией стека, здесь опускаются.
Поскольку смысл любой подпрограммы в том, чтобы выполнять
какую-то часто повторяемую процедуру и возвращаться туда, откуда
произошел «скачок» на подпрограмму, и принимая во внимание, как
происходит безадресный возврат, нетрудно догадаться, что где-то
должны позаботиться о том, чтобы прежде, чем сделать «скачок», в стеке
остался на сохранение адрес той команды, которая была следующей, но
еще не успела выполниться. И судя по командам возврата, должно быть
два типа таких команд-скачков, из которых одна перед «скачком»
отправляет в стек только содержимое IP, а вторая сначала отправляет в
стек содержимое CS, а потом —содержимое IP.
Рассмотрим эти два типа команд, которые имеют мнемонику
CALL1(CALL —вызов).
8.1 Внутрисегментные переходы
8.1.1 Внутрисегментный, с относительной адресацией; команда 3-х
байтовая:
а) ассемблер: CALL Addr;
б) КОП = Е8.
Все процедуры формирования смещения такие же, как в п.2 главы
7 для команды JMP.
54
Страницы
- « первая
- ‹ предыдущая
- …
- 52
- 53
- 54
- 55
- 56
- …
- следующая ›
- последняя »
