ВУЗ:
Составители:
Рубрика:
Пример 1 — Пусть команда CALL 010F находится по адресу 0100.
Вычисляем disp, учитывая, что команда трехбайтовая: disp = 010F —
(0100 + 3) = 000C. В целом получаем:
Address Command Assembler
0100 E8 CALL 010F
0101 OC
0102 00
0103
КОП следующей
команды
Как выполняется команда CALL 010F ?
1). Stack:= <IP> = 0103 (спрятать в стек адрес следующей
команды, то есть адрес возврата);
2). IP:= 010F (назначить IP новый адрес — адрес подпрограммы).
8.1.2 Внутрисегментный, с косвенной адресацией
а) Ассемблер: CALL NEAR dst. Комментарий: перейти по адресу,
который находится в dst (2 байта);
б) КОП:
Пример 2 — Пусть АХ=010F и пусть имеет место следующий фрагмент
программы:
Address Command Assembler
0100 FF CALL AX
0101 E0
0102
КОП следующей
команды
Результат выполнения этого фрагмента:
1) Stack := <IP> = 0106;
2) IP := <AX> = 010F.
8.2 Межсегментные переходы
8.2.1 Межсегментный, с прямой адресацией; команда 5-и байтовая:
55
Пример 1 — Пусть команда CALL 010F находится по адресу 0100. Вычисляем disp, учитывая, что команда трехбайтовая: disp = 010F — (0100 + 3) = 000C. В целом получаем: Address Command Assembler 0100 E8 CALL 010F 0101 OC 0102 00 КОП следующей 0103 команды Как выполняется команда CALL 010F ? 1). Stack:== 0103 (спрятать в стек адрес следующей команды, то есть адрес возврата); 2). IP:= 010F (назначить IP новый адрес — адрес подпрограммы). 8.1.2 Внутрисегментный, с косвенной адресацией а) Ассемблер: CALL NEAR dst. Комментарий: перейти по адресу, который находится в dst (2 байта); б) КОП: Пример 2 — Пусть АХ=010F и пусть имеет место следующий фрагмент программы: Address Command Assembler 0100 FF CALL AX 0101 E0 КОП следующей 0102 команды Результат выполнения этого фрагмента: 1) Stack := = 0106; 2) IP := = 010F. 8.2 Межсегментные переходы 8.2.1 Межсегментный, с прямой адресацией; команда 5-и байтовая: 55
Страницы
- « первая
- ‹ предыдущая
- …
- 53
- 54
- 55
- 56
- 57
- …
- следующая ›
- последняя »