- •Введение
- •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
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
После выполнения программы: DX=7FFO.
6 Арифметико-логические команды
По назначению арифметико-логические команды (команды АЛУ) разделяются на две группы:
а) арифметические; б) логические.
По кодам операции они разделяются на (2 типа x 8 видов) =
16 команд. Схемы выполнения 2-х типов команд АЛУ приведены на
рисунке 7.
Рисунок 7 — Схема выполнения команд АЛУ
Рассмотрим обобщенные КОПы для этих типов команд АЛУ. а) 1-й тип: машинный код команд АЛУ для команд типа: dst:=<dst> операция <src>.
б) 2-й тип: машинный код команд АЛУ с непосредственными данными (вместо src указывают данные в качестве второго числа): dst:=<dst> операция data.
Здесь в разряде D9 указывают знаковый признак данных.
1)Если S=0, то data — беззнаковый операнд, и длина его соответствует: при W=0 —байт; при W=1 — слово.
2)Если S=1, то:
а) data длиной только в 1 байт;
б) D7 —знак; число воспринимается в дополнительном коде;
в) если dst — слово, то data расширяется до слова (знак переносится в D15).
Все эти тонкости, на первый взгляд, являются запутанными, но если отталкиваться от четкого представления, как в цифровой электронике представляются положительные и отрицательные числа со знаком и без знака, и как реализуются операции сложения и вычитания (последняя заменяется сложением с дополнительным кодом вычитаемого), то все встанет на свои места.
В таблице 5 представлены команды в ассемблере и комментарии для всех типов команд. Коды типов команд приводятся не по порядку, а по смыслу, связанному с назначением групп родственных команд. Все команды АЛУ, приведенные в таблице 5, воздействуют на флаги.
Таблица 5 —Команды АЛУ
№ |
Вид |
Ассембле |
Комментарий для команд АЛУ, содержащих: |
||
п/п |
команд |
р |
а) dst и src (тип 1) |
б) dst и data (тип2) |
|
|
ы |
|
|
|
|
1 |
000 |
ADD |
dst:=<dst>+<src> |
dst:=<dst>+data |
|
2 |
010 |
ADC |
dst:=<dst>+<src>+<cf> |
dst:=<dst>+data+<cf> |
|
3 |
101 |
SUB |
dst:=<dst>-<src> |
dst:=<dst>-data |
|
4 |
011 |
SBB |
dst:=<dst>-<src>-<cf> |
dst:=<dst>-data-<cf> |
|
5 |
001 |
OR |
dst:=<dst> <src> |
dst:=<dst> data |
|
(дизъюнкция —ИЛИ) |
|||||
|
|
|
|||
6 |
100 |
AND |
dst:=<dst> <src> |
dst:=<dst> data |
|
(конъюнкция —И) |
|||||
|
|
|
|||
7 |
110 |
XOR |
dst:=<dst>+<src> |
dst:=<dst>+data |
|
(сложение по модулю 2) |
|||||
|
|
|
|||
8 |
111 |
CMP |
<dst>-<src> |
<dst>-data |
|
(компарация — сравнение) |
|||||
|
|
|
Рассмотрим команды АЛУ в порядке номеров пунктов таблицы 5.
6.1 Команды сложения
а) Сложение содержимым dst и src; результат — в dst.
Ассемблер с комментариями (примеры):
ADD AX,BX ; AX:=<AX>+<BX>
ADD SI,[1CDO] ; SI:=<SI>+<M1СD0>
в) Сложение содержимого dst и данных, указанных в команде. Ассемблер c комментариями (примеры):
39
ADD CX,1350 |
; CX:=<CX>+1350 |
||
ADD |
BYTE |
[1500], 2F ; M1500:=<M1500>+2F |
|
ADD |
WORD |
[1500],20 ; M1501,M1500:=<M1501,M1500>+(-02) |
Составим машинный код последней команды, используя таблицу 5 для определения вида команды и таблицу 3 (глава 3) для определения адреса dst:
83 06 00 15 FE
КОП Адрес data
FE —это не что иное, как дополнительный код отрицательного числа: 20 (H-код). Действительно, если преобразовать -02 из прямого кода в дополнительный, то и получим FE:
|
|
S Мантисса |
|
||
-216 = 1 0000010 |
|
S —место знака |
|||
|
|
|
инверсия |
||
|
|
1 |
1111101 |
|
|
+0 |
0000001 |
|
= FE16 |
||
|
1 |
1111110 |
|
Следовательно, эту же операцию можно представить так: ADD WORD [1500],FE? Оказывается, нельзя. Поскольку не указан знак, а любой редактор ассемблера дополняет байт или слово в части старших бит нулями (то есть их можно не указывать), то в результате работы транслятора для команды ADD WORD [1500],FE получится следующий машинный код:
8306 0015 FE00
КОП Адрес data
И полный ассемблер этой команды будет таков:
ADD WORD [1500],OOFE
А это совсем другая команда.
6.2 Команда сложения с учетом переноса
Эта команда складывает не просто 2 числа, а добавляет к ним <CF>. Это замечательная команда, потому что без нее невозможно было бы достаточно просто складывать многобайтовые числа. Возьмем пример для десятичных чисел:
59
+36
85 и 1 держим в уме. Единица —это перенос: CF = 1. Естественно, что если при сложении старших чисел не учитывать
перенос от предыдущей суммы, то результат будет неверным. Чтобы 2-я сумма была корректной, необходимо ее сложить с переносом:
8
40
+<CF> от предыдущего сложения |
|
|
|
||||
9 |
|
|
|
|
|
|
|
Итого: 95. |
|
|
|
|
|
|
|
Рассмотрим пример сложения многобайтовых чисел. |
|
||||||
Пример |
1 — |
Пусть |
1-ое |
слагаемое |
находится |
в |
|
M1501,M1500 (двухбайтовое число), а второе слагаемое — в BX. Сумму |
|||||||
поместить в M1601,M1600. |
|
|
|
|
|
||
Ответ: Если складывать по байтам, то это будет выглядеть так: |
|
||||||
ADD |
BL,[1500]; Сложить младшие байты чисел |
|
|
||||
MOV |
[1600],BL; и переслать младшую часть суммы в M1600. |
|
|||||
ADC |
BH,[1501]; Сложить старшие байты слагаемых и + возмож- |
||||||
MOV |
[1601],BH; ный перенос от предыдущей суммы и M1601. |
|
6.3 Операция вычитания
Эта команда выполняется чуть сложнее, чем команда сложения.
Вотличие от сложения, операция вычитания простыми логическими средствами не реализуется. Операция вычитания производится следующим образом:
а) вычитаемое преобразуется в дополнительный код; б) дополнительный код вычитаемого складывается с
уменьшаемым.
Само собой разумеется, что все это выполняется автоматически.
Вотличие от сложения, перенос в этом случае направляется в CF через инвертор. Посмотрим на абстрактных примерах, что из этого выходит.
Пусть A —уменьшаемое, B —вычитаемое.
Случай 1: A>B. Пусть A=1000, B=0101 (двоичные числа). Преобразуем B в дополнительный код (без знака):
0101
инверсия
1010 + 0001
Bдоп=1011 — дополнительный код B. Теперь складываем: A+Bдоп:
1000
+1011
1 0011
Перенос = 1. Но этот перенос при вычитании инвертируется, и только потом попадает в CF. Значит, в этом случае CF=0. Еще раз: 10002- 01012= 00112 и CF=0. (Кстати, результат получили в прямом коде).
Случай 2: A<B. Пусть A=0101, а B=1000. По той же технологии преобразуем B:
1000
инверсия
0111
41