- •Введение
- •1 Основы микропроцессорной техники
- •1.1 Классификация команд и архитектура ЭВМ
- •1.2 Секционный микропроцессор.
- •1.3 Однокристальный микропроцессор.
- •1.4 Микропроцессорный модуль.
- •3.1 Тип кода операции с dst и rsc
- •3.2 Тип кода операции с dst. Группа коман MOV
- •4 Организация стековой памяти
- •5 Команды сдвигов и приращений.
- •5.1 Команды приращений
- •5.2 Команды сдвига
- •6 Арифметико-логические команды
- •6.1 Команды сложения
- •6.2 Команда сложения с учетом переноса
- •6.3 Операция вычитания
- •6.4 Команда вычитания с учетом заема
- •6.5 Команда логической функции ИЛИ
- •6.6 Команда логической функции И
- •6.7 Команда «Исключающая ИЛИ»
- •Внутриразрядная сумма = 0
- •6.8 Команда сравнения — компарации
- •7 Команды ветвления и переходов
- •7.1 Команды ветвления
- •7.2 Команды перехода
- •8.1 Внутрисегментные переходы
- •8.2 Межсегментные переходы
- •10 Цепочные команды
- •11 Другие одиночные команды
- •13.1 Процедура прерываний и команды прерываний
- •Адрес
- •13.2 Режимы работы ПКП
- •13.3 Программирование ПКП
- •14 Параллельный интерфейс
- •15 Последовательный интерфейс
- •15.1 Антология последовательного интерфейса
- •15.3 Описание регистров 8250 и программирование
- •Регистр управления линией
- •Регистр управления модемом
- •15.4 Порядок инициализации 8250
- •16 Программируемый таймер
- •16.7 Временные диаграммы таймера
- •16.8 Программирование таймера
- •Чтение счетчика канала 2
- •16.9 Чтение содержимого счетчиков
- •16.10 Таймер на системной плате IBM PC
- •17 Клавиатурный интерфейс
- •18. Заключение
- •Приложение А
- •Действие
- •Сегментный регистр
- •Действие команды
- •Действие команды
- •Действие команды
- •SAHF — сохранение <AH> в F
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
2) Смещение:
Смещение (disp) вычисляем относительно текущего значения адреса (содержимого IP после выборки команды), учитывая что команда JNBE (JA) — двухбайтовая. Текущее значение адреса: IP= 0100 + 2 = 0102. Ищем разность между конечным и текущим адресом: (0092 — 0102) = -0070. Берем только младший байт -70 и преобразуем это отрицательное число из прямого кода в дополнительный (D7 —знак):
Прямой |
Обратный |
Дополнительный |
|||||
S |
S |
|
S |
(S —знаковый бит) |
|||
1.11100002 |
1.00011112 |
1.00100002 = 9016. |
|
||||
Окончательно: |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
Address |
Command |
|
Assembler |
|||
|
|
0100 |
|
77 |
|
JNBE 0092 |
|
|
|
0101 |
|
90 |
|
|
|
Пример 3 – |
тоже самое, что и в примере 1, только перейти на |
||||||
адрес 182. |
|
|
|
|
|
|
|
Ответ: |
|
|
182 —102 = |
8016 = 12810 > 12710 - |
|||
Вычислим |
смещение: |
неосуществимо! Перебор на 1 адрес, так как максимальное смещение в этом случае может быть только 12710 = 7F16.
7.2 Команды перехода
Кроме команд типа JUMP с условным переходом (ветвления) есть и команды с безусловным переходом, которые позволяют «прыгать» не только в пределах ±7F, но и даже между сегментами. Рассмотрим их.
JMP — команда с безусловным переходом (пять типов)
1) Короткая, с относительной адресацией (смещением), 2-х байтовая; максимальная величина disp = ±7F.
а) ассемблер: JMP SHORT Addr;
б) КОП = ЕВ.
Пример 4 — Команда расположена на 0100 адресе. Прыгнуть на адрес 0105.
Определяем текущее значение IP: IP = 0100 + 2 = 0102.
Смещение: 0105 —0102 = 0003 = 03 (1 байт).
50
Address |
Command |
Assembler |
0100 |
EB |
JMP SHORT 0105 |
0101 |
03 |
|
2) Внутрисегментная, с относительной адресацией (смещением), 3-х байтовая (2-х байтовое смещение, D15 —знак);
а) ассемблер: JMP NEAR Addr;
б) КОП = Е9.
Пример 5 — Пусть исходные данные те же самые, что в примере 4, только применить внутрисегментную JMP с относительной адресацией.
Ответ:
Address |
Command |
Assembler |
0100 |
E9 |
JMP NEAR 0105 |
0101 |
03 |
|
0102 |
00 |
|
Примечание – Обычно при написании программ в ассемблере для команд с относительной адресацией не указывают SHORT или NEAR, так как транслятор по вычисленной им величине смещения сам выбирает тип перехода: короткий или внутрисегментный.
3) Внутрисегментная, с косвенной адресацией, 2-байтовая (КОП — 2 байта).
а) ассемблер: JMP NEAR dst (или просто: JMP dst). Комментарий: перейти по адресу, который хранится в dst;
б) КОП:
Пример 6 — Пусть в ячейке памяти с адресом 1CFO хранится число 5D, а в ячейке 1CF1 — 02. Представить команду перехода с косвенной адресацией (внутри сегмента), находящуюся по адресу 0100 и
имеющую в качестве dst 2-х байтовый источник M1CF1,1CF0:
Ответ:
а) ассемблер: JMP NEAR [1CFO] (или просто: JMP [1CF0]);
б) КОП:
51
Полностью:
Address |
Command |
Assembler |
0100 |
FF |
JMP [1CFO] |
0101 |
26 |
|
0102 |
FO |
|
0103 |
1C |
|
(IP) |
|
|
После выполнения команды: IP:= <M1CF1,M1CF0> = 025D. С этого адреса будет выбираться КОП следующей команды.
4) Межсегментная, с прямой адресацией, 5-и байтовая команда
(КОП —1 байт): |
|
|
|
|
|
|
|
||
а) ассемблер: JMP CS:IP; |
|
|
|
|
|||||
б) КОП= ЕА. |
|
|
|
|
|
|
|||
Пример |
7 — |
Пусть |
команда |
расположена |
|
по |
адресу |
||
175E:0100 =0176E0 (смотрите |
2-ю |
главу — |
формирование |
||||||
физического адреса). Перейти по адресу: CS = F000, IP = E987. |
|||||||||
Ответ: |
|
|
|
|
|
|
|
|
|
Полное представление: |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
Address |
Comman |
Assembler |
|
|
|
||
|
|
d |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
175E |
: 0100 |
EA |
JMP F000:E987 |
|
|
||
|
|
175E |
: 0101 |
87 |
|
|
|
|
|
|
|
175E |
: 0102 |
E9 |
|
|
|
|
|
|
|
175E |
: 0103 |
00 |
|
|
|
|
|
|
|
175E |
: 0104 |
F0 |
|
|
|
|
|
|
|
(CS) (IP) |
|
|
|
|
|
|
|
После |
выполнения |
команды |
изменится не |
|
только IP |
||||
(IP:=Е987),но и значение командного сегмента (CS:=F000), и |
|||||||||
следующий КОП будет выбираться с |
адреса F000:E987 = |
FE987. |
|||||||
«Скачок» = FE987 — EO = |
E72A7, то есть намного больше размера |
||||||||
сегмента (размер сегмента 1000016 |
= 6553610). |
|
|
|
|||||
5) Межсегментная, с косвенной адресацией. |
|
|
|
||||||
52 |
|
|
|
|
|
|
|
|
|
а) ассемблер: JMP FAR dst;
Примечание – Хранилищем адреса перехода может быть только ЗУ, так как длина этого слова 4 байта, а с таким размером регистров в составе МП нет. Поэтому в графе КОП всегда mod ≠ 11.
Пример 8 — Пусть в указанных ячейках памяти ЗУ хранятся
следующие байты: М2000 = 87, М2001 = Е9, М2002 = 00, М2003 = FO.
Выполним следующие команды:
MOV BX, 2000; BX:=2000 — адрес младшей ячейки адреса перехода; JMP FAR [BX]; перейти по этому адресу.
После этого произойдет переход на следующий адрес:
CS = F000, IP = E987.
КОП этой команды JMP:
Примечание – Необходимо иметь ввиду, что источником адреса являются ячейки памяти в текущем сегменте DS. Если же эти ячейки расположены в другом сегменте, то сначала надо загрузить новое значение сегмента в DS (смотрите 3-ю главу). Например:
MOV AX, значение сегмента
MOV DS,AX
или
MOV AX, значение сегмента
PUSH AX
POP DS
53