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