
- •I8085 — это i8080 с некоторыми дополнительными и улучшенными характеристиками, к которым относятся:
- •Формат байта состояния и типы машинного цикла процессора i8080
- •Смена состояний процессора при выполнении программы
- •Регистры процессора i8080
- •Флаги, признаки и условия выполнения команд
- •Команды передачи данных i8080
- •Арифметические команды i8080
- •Логические команды
- •Команды передачи управления
- •Команды стека, ввода-вывода и машинного управления
Регистры процессора i8080
Теперь рассмотрим такие компоненты архитектуры процессора как регистры. i8080 имеет десять программно-доступных регистров:
1. IP (Instruction Pointer) — указатель команд. Содержит адрес очередного байта команды. Другое название этого регистра — счетчик программы (Program Counter, PC). На линейных участках программы он инкрементируется схемой инкремента-декремента в каждом машинном цикле. При передаче управления его содержимое заменяется адресом перехода.
2. SP (Stack Pointer) — указатель стека. Содержит адрес верхушки стека, т.е. адрес последней заполненной ячейки стека. SP декрементируется перед помещением в стек очередного байта и инкрементируется после извлечения очередного байта. Помещение в стек и извлечение из стека осуществляется двумя байтами. В системах на основе процессоров Intel принят обратный порядок хранения слов (little endian order — в противоположность big endian order — прямому порядку хранения слов) в памяти, при котором по порядку возрастания адресов сначала хранится младший байт, затем старший. В соответствии с ним сначала в стек помещается старший байт, затем младший. Извлечение из стека происходит в обратном порядке.
3. Регистры общего назначения (РОН). Это шесть 8-ми разрядных (B, C, D, E, H, L) или три 16-ти разрядных (BC, DE, HL) регистра. Используются в командах передачи данных, арифметических и логических командах как операнды-источники или операнды-приемники. Имеют специализацию указателей данных (содержат адрес операнда): HL — в командах перемещения данных (MOV), арифметических и логических командах с операндом в памяти данных; BC, DE — в командах загрузки или размещения аккумулятора.
4. А — аккумулятор или регистр результата. Он также относится к группе регистров общего назначения. Однако, его описание вынесено в отдельный пункт, так как этот регистр имеет наибольшую специализацию. По умолчанию (неявно) аккумулятор используется в качестве источника и приемника во многих командах. По этой причине он сильнее других регистров связан с АЛУ.
5. F — регистр флагов (признаков, условий, состояния). Этот регистр также сильно связан с АЛУ. Его формат таков:
-
7
6
5
4
3
2
1
0
S
Z
AC
P
CY
CY (Carry) — флаг переноса;
P (Parity) — флаг паритета (четности);
AC (Auxiliary Carry) — флаг дополнительного переноса;
Z (Zero) — флаг нуля;
S (Sign) — флаг знака.
Флаги, признаки и условия выполнения команд
Все эти флаги являются признаками результата предыдущей арифметической или логической операции. Потому часто используется другое название регистра флагов — регистр признаков. Значения флагов влияют на процесс ветвления программы (передачу управления, поток управления). Ветвления: переходы, вызовы подпрограмм и возвраты из подпрограмм — бывают безусловными и условными. Последние осуществляются при выполнении какого-либо условия. Количество возможных условий и, соответственно, количества условных переходов, вызовов и возвратов связаны с количеством флагов следующим образом:
NC=2(NF-1),
где NC — количество условий;
NF — количество флагов.
Единственным флагом, который не порождает никаких условий, является флаг дополнительного переноса. Он используется процессором при выполнении команды десятичной коррекции аккумулятора. Оставшиеся четыре флага соответствуют следующим условиям:
-
перенос (CY=1);
-
нет переноса (CY=0);
-
чет (P=1);
-
нечет (P=0);
-
ноль (Z=1);
-
не ноль (Z=0);
-
минус (S=1);
-
плюс (S=0).
По этой причине регистр флагов называется также регистром условий.
Признаки результата предыдущей операции определенным образом характеризуют состояние процессора и программы. Поэтому регистр флагов называют еще и регистром состояния. А совокупность аккумулятора и регистра флагов — словом состояния процессора или программы (PSW, Processor (Program) Status Word). Однако нужно иметь в виду, что термин состояние используется также и в другом смысле, как тип машинного цикла, характеризуемый байтом состояния, выводимым процессором на шину данных в первом такте каждого машинного цикла.
Хотя аккумулятор и называется по-другому регистром результата, не всегда результат выполнения арифметической операции оказывается в нем. Поэтому надо отметить, что значения флагов устанавливаются именно по результату операции, а не по значению аккумулятора.
Программно-недоступные регистры процессора i8080
Теперь необходимо упомянуть о программно-недоступных регистрах. Их на структурной схеме i8080 два:
-
WZ — регистр временного хранения. Его размер — 16 бит. Используется при обменах, например, при обмене пары HL с верхушкой стека (команда XTHL).
-
Регистр команд. В него помещается код операции (КОП) команды. Процессор в первом цикле извлекает КОП команды и помещает его в регистр команд. Дешифратор команд дешифрирует его, и на основе этого устройство управления формирует сигналы, которые организуют дальнейший процесс выполнения этой команды.
Тип данных процессора i8080
Единственным типом данных процессора i8080 являются данные в дополнительном коде. Т. е. при выполнении арифметических операций процессор рассматривает операнды как числа в дополнительном коде. Положительные числа в дополнительном коде представляются так же, как и в прямом коде. Отрицательные числа представляются в дополнительном коде по следующему правилу:
-
В двоичной системе счисления записывается абсолютное значение (модуль) данного отрицательного числа. Количество разрядов соответствует размеру операнда.
-
Разряды инвертируются.
-
К полученному числу прибавляется единица.
Пример. Представление числа -9 в дополнительном коде.
-
910 = 000010012
-
Побитная инверсия дает 11110110
-
Прибавляем единичку и получаем 11110111= F7h
Проверка: F7 + 9 = 100.
Видно, что у отрицательных чисел всегда в старшем разряде единица. Поэтому флаг знака повторяет старший бит результата.
Вычитание происходит путем сложения уменьшаемого с вычитаемым в дополнительном коде. Во флаг CY при этом записывается инвертированное значение переноса:
9 00001001
-6 +11111010
3
100000011
CY=0 (перенос инвертируется)
6 00000110
-9
+11110111
-3 011111101
CY=1 (перенос инвертируется)
Для флага вспомогательного переноса AC это не так. Этот флаг командами вычитания не инвертируется. В этом флаге при выполнении команд вычитания оказывается реальный перенос из третьего разряда аккумулятора в четвертый, возникающий при сложении уменьшаемого и взятого с обратным знаком вычитаемого. Рассмотрим в качестве примера команду SUB A, B при условии, что A=02h, а B=01h. После выполнения этой команды A=01h, AC=1, CY=0. Рассмотрим, как выполняет эту операцию процессор:
Видно, что перенос происходит как из третьего, так и из седьмого разряда. Перенос из третьего разряда не инвертируется (AC=1), а из седьмого — инвертируется (CY=0).
СИСТЕМА КОМАНД ПРОЦЕССОРА i8080
Общая характеристика системы команд i8080
Группы команд процессора i8080
Всего в системе команд процессора i8080 имеется 244 команды.
Фирма Intel выделяет пять групп команд процессора i8080:
-
Команды передачи данных: регистр - регистр, регистр - память, память - регистр, память команд - память данных:
-
Перемещение.
-
Загрузка.
-
Размещение.
-
Обмен.
-
-
Арифметические команды:
-
Сложение-вычитание.
-
Инкремент-декремент.
-
Десятичная коррекция аккумулятора.
-
-
Логические команды:
-
Логические операции И, ИЛИ, Искл. ИЛИ, НЕ.
-
Сравнение.
-
Сдвиг.
-
Установка переноса.
-
-
Команды перехода (ветвления, передачи управления):
-
Условные и безусловный переходы.
-
Условные и безусловный вызовы подпрограмм, в т. ч. повторные запуски (рестарты).
-
Условные и безусловный возвраты из подпрограмм.
-
-
Команды стека, ввода-вывода и машинного управления:
-
Помещение в стек и извлечение из стека 16-разрядных регистров (кроме PC), в том числе слова состояния программы (Program Status Word, PSW), старший байт которого представляет собой аккумулятор, а младший — регистр флагов.
-
Ввод-вывод.
-
Разрешение-запрещение прерываний.
-
Останов.
-
Отсутствие операции.
-
Формат команд процессора i8080
По количеству байтов команды процессора i8080 могут быть однобайтными, двухбайтными и трехбайтными. Если в команде используется непосредственная или прямая адресация, то число байтов в команде — два или три. В остальных случаях команда состоит из одного байта. Первый байт команды называется кодом операции. Он также имеет свой определенный формат.
Признаки результата выполнения команд процессора i8080
В i8080 фиксируется пять признаков результата выполнения команд:
-
С (CY) — признак (флаг) переноса (Carry). Он устанавливается в следующих случаях:
-
если был перенос из старшего разряда результата операции сложения или же заем в старший разряд уменьшаемого при выполнении команды вычитания;
-
если был сдвиг единички из крайнего разряда аккумулятора при выполнении команд сдвига;
-
если выполнилась команда установки признака переноса или его инвертирования в случае первоначального нулевого значения.
Р — признак (флаг) четности (Parity). Он устанавливается в том случае, если число единичек результата арифметической или логической операции четно.
АС — признак (флаг) дополнительного переноса. Он устанавливается в том случае, если был перенос из 3-го разряда в 4-й или же заем из 4-го разряда в 3-й при выполнении арифметических операций.
Z — признак (флаг) нуля (Zero). Он устанавливается в том случае, если результат арифметической или логической операции равен нулю.
S — признак (флаг) знака (Sign). Он устанавливается в том случае, если результат арифметической или логической операции — отрицательное число (повторяет старший бит результата).
Сбрасываются флаги, соответственно, в противоположных перечисленным случаях.
Все они содержатся в регистре флагов, который является также регистром признаков, поскольку все флаги этого регистра являются признаками результата. Четыре из этих пяти признаков формируют восемь условий команд условных переходов, вызовов подпрограмм и возвратов из подпрограмм.
Способы адресации в процессоре i8080
В командах процессора i8080 используются пять базисных способов адресации:
-
Неявная адресация.
Информация о местонахождении операндов в команде не содержится. Оно определяется неявно типом операции. Пример — команда STC — установить перенос.
-
Регистровая адресация.
Информация о местонахождении операндов представляет собой код регистра, который и является этим местонахождением. Пример — команда ADD C;
-
Непосредственная адресация.
Входные операнды находятся в самой команде и следуют непосредственно за кодом операции команды (первым байтом команды). В зависимости от типа операции ими могут быть данные или адрес. Примеры — ADI data, JMP addr;
-
Прямая адресация.
Информация о местонахождении операнда представляет собой адрес ячейки памяти или порта ввода-вывода внешнего устройства, который содержится в команде и следует непосредственно (прямо) за кодом операции. Пример — LDA addr16.
-
Косвенная (косвенно-регистровая) адресация.
Информация о местонахождении операнда представляет собой код регистра, который содержит адрес ячейки памяти, в которой находится операнд. Эта информация может и не присутствовать в команде в явном виде, а определяться типом операции и специализацией регистров процессора. Примеры — ADD M (регистр, содержащий адрес одного из операндов команды, HL, определяется неявно, в соответствии со своей специализацией), LDAX B (код регистра, содержащего адрес операнда-источника, BC, содержится в команде).
Кодировка регистров в командах процессора i8080
Кодировка регистров, а также ячейки памяти в командах процессора i8080 такова:
8-разрядные регистры:
000 — B
001 — C
010 — D
011 — E
100 — H
101 — L
110 — M (ячейка памяти)
111 — A
16-разрядные регистры:
00 — BC
01 — DE
10 — HL
11 — SP
Если в мнемонике команды есть буква X, например, DCX B, INX B, LXI B, STAX B, то в операции участвует пара регистров (16-разрядный регистр).