3) 16-разрядный программный счетчик (счетчик команд) “program counter” PC, в котором хранится адрес следующей команды;
4) 16-разрядный указатель стека “stek point” SP, хранящий адрес ячейки памяти, куда был записан последний введенный в стек байт.
Ряд команд МП манипулирует регистровыми парами B, D, H, PSW (слово состояния программы). Пара регистров обычно содержит либо адрес ячейки памяти, либо два байта непосредственных данных.
В начальной области памяти (обычно в ПЗУ) располагается программа пользователя. Затем (обязательно в ОЗУ) идет память данных и стек. Стек - специально организованная область ОЗУ, предназначенная для временного хранения данных или адресов. Число, записанное в стек последним, извлекается из него первым. Указатель стека SP хранит адрес последней ячейки стека, в которой записана информация. При вызове подпрограммы в стеке автоматически сохраняется адрес возврата в основную программу. Как правило, в начале каждой подпрограммы сохраняют в стеке содержимое всех задействованных при ее выполнении регистров, а в конце подпрограммы восстанавливают их из стека.
5. Методы адресации и примеры команд
Система команд микропроцессора содержит 78 базовых команд (общее число команд с учетом возможных модификаций - 244): пересылки данных, обработки данных и управления ходом выполнения программы.
Программа может непосредственно составляться в виде последовательности машинных двоичных кодов команд, для более компактной формы которых используется их шестнадцатиричное представление. Более удобно пользоваться мнемоническими обозначениями команд, т.е. писать ее на языке ассемблера. Специальная программа Ассемблер может перевести с помощью ЭВМ рабочую программу МП в машинные коды. Но и при ручной трансляции (она может потребоваться при выполнении лабораторных работ на отладочных устройствах) предварительная запись программы на мнемоническом языке более наглядна.
Система команд микропроцессора i8080 использует различные методы адресации данных:
прямая адресация (адрес порта указывается во втором байте команды ввода данных в регистр аккумулятор IN)
IN PA; (A) ¬ (PA) DBH КОП – код операции IN
80H
2-байт – адрес порта PAрегистровая прямая адресация (в команде задается код пары РОН, где находится операнд данных)
INX H; (HL) ¬ (HL)+1 23H КОП – код операции INX
регистровая косвенная адресация (адрес ячейки памяти, где находится операнд, определяется содержимым пары РОН)
ADD M; (A) ¬ (A)+((HL)) 86H КОП – код операции ADD
непосредственная адресация (операнд содержится в команде: младший байт – во втором, старший байт – в третьем байтах команды)
LXI H, 850H; (HL) ¬ 850H 21H КОП – код операции LXI
50H
2-й байт80H
3-й байтстековая адресация (адрес ячейки памяти, содержащей операнд, находится в указателе стека SP)
PUSH PSW; ((SP)-1) ¬ (A), ((SP-2) ¬ (F), (SP) ¬ (SP)-2
F5H
КОП – код операции записи в стек служебного слова.6. Программирование на языке ассемблера
Язык ассемблера допускает представление всех элементов программы в символической (буквенно-цифровой) форме, отражающей их содержательный смысл. В качестве алфавита допустимых символов принят код ASCII (американский стандартный код для обмена информацией). Каждая строка ассемблера соответствует одной команде или псевдокоманде (директиве) и может содержать поля метки, мнемоники команды, операнда и комментария. При наличии в программе синтаксических ошибок ассемблер в процессе трансляции выдает сообщения об ошибках.
Метка ассоциируется с 16-битовым адресом той ячейки памяти, где будет размещен первый байт отмеченной команды. Использование меток освобождает программиста от необходимости оперировать абсолютными адресами памяти при записи команд передачи управления. Метка должна начинаться с буквы и заканчиваться двоеточием, может содержать до шести символов. Не допускается использовать в качестве меток ключевые слова (мнемоники команд и директив). Символическое обозначение должно быть уникальным (может появиться в поле метки только один раз).
Мнемокод команды может включать до четырех символов и вместе с обозначениями операндов образует группу ключевых слов ассемблера.
Поле операнда содержит числовые и символьные непосредственные данные, обозначения регистров и регистровых пар МП, адреса памяти. Возможно использование выражений, содержащих простейшие арифметические и логические операции, обработку которых ассемблер при трансляции производит в формате 16-разрядных двоичных чисел. Операнд в виде строки символов, заключенной в апострофы, транслируется в последовательность кодов ASCII этих символов.
Поле комментария начинается с точки с запятой и полностью игнорируется ассемблером. В поле комментария фиксируется обычно функция, которую выполняет группа команд в конкретной прикладной программе.
Кроме команд программа может содержать директивы ассемблера:
ORG – начальный адрес массива, END – прекращение трансляции, EQU – эквивалентность (присвоение), DB – определить байт и тд.
Команды микропроцессора серии К580 (i8080)
Команда | N б | N т | Описание команды | Флаги |
Группа команд пересылки данных | ||||
MOV r1,r2 | 1 | 5 | Пересылка данных из r2 в r1 | |
MOV М,r | 1 | 7 | Пересылка данных из r в память | |
MOV r,М | 1 | 7 | Пересылка данных из памяти в r | |
XCHG | 1 | 4 | Обмен данными между парами регистров HL и DL | |
MVI r,d8 | 2 | 7 | Занесение байта данных в регистр | |
MVI M,d8 | 2 | 10 | Занесение байта данных в память | |
LXI rp,d16 | 3 | 10 | Занесение двух байтов данных в пару регистров ( B,D,H,SP ) | |
LDAX rp | 1 | 7 | Занесение в А содержимого ячейки, косвенно адресуемой парой регистров (B или D) | |
LDA adr16 | 3 | 13 | Загрузка в А содержимого ячейки с указанным адресом | |
STAX rp | 1 | 7 | Занесение содержимого А в ячейку, косвенно адресуемую парой регистров (B или D) | |
STA adr16 | 3 | 13 | Занесение содержимого А в ячейку с указанным адресом | |
LHLD adr16 | 3 | 16 | Загрузка в регистры H, L содержимого ячеек с указанным адресом и адресом, на единицу большим | |
SHLD adr16 | 3 | 16 | Занесение содержимого регистров H,L в две ячейки памяти | |
Группа команд обработки данных | ||||
ADD r | 1 | 4 | Сложение содержимого r и А | Z,S,P,C,AC |
ADD M | 1 | 7 | Сложение содержимого ячейки памяти и А | Z,S,P,C,AC |
ADС r | 1 | 4 | Сложение содержимого r и А с учетом переноса С | Z,S,P,C,AC |
ADС M | 1 | 7 | Сложение содержимого ячейки памяти и А с учетом переноса С | Z,S,P,C,AC |
DAA | 1 | 4 | Десятичная коррекция А | Z,S,P,C,AC |
Команда | N б | N т | Описание команды | Флаги |
SUB r | 1 | 4 | Вычитание содержимого r из A | Z,S,P,C,AC |
SUB M | 1 | 7 | Вычитание содержимого ячейки памяти из A | Z,S,P,C,AC |
SBB r | 1 | 4 | Вычитание содержимого r из A с заемом | Z,S,P,C,AC |
SUBB M | 1 | 7 | Вычитание содержимого ячейки памяти из A с заемом | Z,S,P,C,AC |
ANA r | 1 | 4 | Поразрядное «И» над содержимым r и A | Z,S,P,C=0, AC=0 |
ANA M | 1 | 7 | Поразрядное «И» над содержимым ячейки памяти и A | Z,S,P,C=0, AC=0 |
XRA r | 1 | 4 | Поразрядное «Исключающее ИЛИ» над содержимым r и A | Z,S,P,C=0, AC=0 |
XRA M | 1 | 7 | Поразрядное «Исключающее ИЛИ» над содержимым ячейки памяти и A | Z,S,P,C=0, AC=0 |
ORA r | 1 | 4 | Поразрядное «ИЛИ» над содержимым r и A | Z,S,P,C=0, AC=0 |
ORA M | 1 | 7 | Поразрядное «ИЛИ» над содержимым ячейки памяти и A | Z,S,P,C=0, AC=0 |
CMP r | 1 | 4 | Сравнение содержимого r и A | Z,S,P,C,AC |
CMP M | 1 | 7 | Сравнение содержимого ячейки памяти и A | Z,S,P,C,AC |
ADI d8 | 2 | 7 | Сложение байта и A | Z,S,P,C,AC |
ACI d8 | 2 | 7 | Сложение байта и A с учетом переноса | Z,S,P,C,AC |
SUI d8 | 2 | 7 | Вычитание байта из A | Z,S,P,C,AC |
SBI d8 | 2 | 7 | Вычитание байта из A с учетом переноса | Z,S,P,C,AC |
ANI d8 | 2 | 7 | Поразрядное «И» байта и A | Z,S,P,C=0, AC=0 |
XRI d8 | 2 | 7 | Поразрядное «исключающее ИЛИ» байта и A | Z,S,P,C=0, AC=0 |
Команда | N б | N т | Описание команды | Флаги |
ORI d8 | 2 | 7 | Поразрядное «ИЛИ» байта и A | Z,S,P,C=0, AC=0 |
CPI d8 | 2 | 7 | Сравнение содержимого A и байта | Z,S,P,C,AC |
DAD rp | 1 | 10 | Сложение содержимого пары HL и регистровых пар (B,D,H,SP) | Z,S,P,C,AC |
INR r | 1 | 5 | Увеличение содержимого r на 1 | Z,S,P,AC |
INR M | 1 | 10 | Увеличение содержимого ячейки памяти на 1 | Z,S,P,AC |
DCR r | 1 | 5 | Уменьшение содержимого r на 1 | Z,S,P,AC |
DCR M | 1 | 10 | Уменьшение содержимого ячейки памяти на 1 | Z,S,P,AC |
INX rp | 1 | 5 | Увеличение содержимого пары регистров на 1 | |
DCX rp | 1 | 5 | Уменьшение содержимого пары регистров на 1 | |
RLC | 1 | 4 | Циклический сдвиг A влево | C |
RRC | 1 | 4 | Циклический сдвиг A вправо | C |
RAL | 1 | 4 | Циклический сдвиг A влево через перенос | C |
RAR | 1 | 4 | Циклический сдвиг A вправо через перенос | C |
CMA | 1 | 4 | Поразрядное инвертирование A | |
STC | 1 | 4 | Установка признака переноса | C=1 |
CMC | 1 | 4 | Инвертирование флага переноса | C=C |
Группа команд управления ходом выполнения программы | ||||
JMP adr16 | 3 | 10 | Безусловный переход по адресу | |
JC adr16 | 3 | 10 | Переход по адресу при наличии переноса | |
JNC adr16 | 3 | 10 | Переход по адресу при отсутствии переноса | |
JZ adr16 | 3 | 10 | Переход по адресу при нуле | |
JNZ adr16 | 3 | 10 | Переход по адресу при отсутствии нуля | |
JP adr16 | 3 | 10 | Переход по адресу при плюсе | |
Команда | N б | N т | Описание команды | Флаги |
JM adr16 | 3 | 10 | Переход по адресу при минусе | |
JPE adr16 | 3 | 10 | Переход по адресу при четности | |
JPO adr16 | 3 | 10 | Переход по адресу при нечетности | |
CALL adr16 | 3 | 17 | Вызов подпрограммы | |
CC adr16 | 3 | 11/17 | Вызов подпрограммы при переносе | |
CNC adr16 | 3 | 11/17 | Вызов подпрограммы при отсутствии переноса | |
CZ adr16 | 3 | 11/17 | Вызов подпрограммы при нуле | |
CNZ adr16 | 3 | 11/17 | Вызов подпрограммы при отсутствии нуля | |
CP adr16 | 3 | 11/17 | Вызов подпрограммы при плюсе | |
CM adr16 | 3 | 11/17 | Вызов подпрограммы при минусе | |
CPE adr16 | 3 | 11/17 | Вызов подпрограммы при четности | |
CPO adr16 | 3 | 11/17 | Вызов подпрограммы при нечетности | |
RET | 1 | 10 | Возврат | |
RC | 1 | 5/11 | Возврат при переносе | |
RNC | 1 | 5/11 | Возврат при отсутствии переноса | |
RZ | 1 | 5/11 | Возврат при нуле | |
RNZ | 1 | 5/11 | Возврат при отсутствии нуля | |
RP | 1 | 5/11 | Возврат при плюсе | |
RM | 1 | 5/11 | Возврат при минусе | |
RPE | 1 | 5/11 | Возврат при четности | |
RPO | 1 | 5/11 | Возврат при нечетности | |
RST N | 1 | 11 | Повторный запуск с адреса 8N | |
IN adr8 | 2 | 10 | Ввод данных из порта в A | |
OUT adr8 | 2 | 10 | Вывод данных в порт из A | |
PUSH rp | 1 | 11 | Занесение содержимого пары регистров (B,D,H,PSW) в стек | |
POP rp | 1 | 10 | Выдача данных из стека в пару регистров (B,D,H,PSW) | Z,S,P,C,AC |
Команда | N б | N т | Описание команды | Флаги |
XTHL | 1 | 18 | Обмен данными между вершиной стека и парой HL | |
SPHL | 1 | 5 | Занести в указатель стека содержимое регистровой пары HL | |
DI | 1 | 4 | Запретить прерывание | |
EI | 1 | 4 | Разрешить прерывание | |
NOP | 1 | 4 | Холостая операция | |
HLT | 1 | 7 | Останов |
Примечание: