ВУЗ:
Составители:
Рубрика:
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
- …
- следующая ›
- последняя »