Система команд – набор команд, имеющих двоичные наборы, служащие в качестве кода команды. В конкретной системе команд формируются определенные способы адресации (регистровый, регистрово-косвенный, непосредственный, прямой, стековый).
Данные в МП представляются в виде 1-байтовый двоичных кодов, которые можно трактовать как числа, коды символов, адреса ячеек памяти и т.п. Для выполнения арифметических операций над целыми числами имеются специальные команды.
Для идентификации отдельные биты нумеруют от 0 до 7 и считают расположенными слева направо. Нулевой бит соответствует младшему биту, а седьмой – старшему. Двухбайтовые целые числа должны быть расположены в соседних байтах памяти или в парном регистре.
6 групп команд:
Пересылочные команды, Команды арифметических и логических операций; Команды работы с аккумулятором, Команды передачи управления; Команды работы с парными регистрами, Специальные команды
Команда
| Принцип работы
| Пояснения
|
Арифметические и логические операции
|
INR
| [ R ] + 1 ® R
| Инкремент (увеличение на логическую 1 определенного регистра) 1-байтная команда. Регистровый СА
|
DCR
| [ R ] – 1 ® R
| Декремент (уменьшение на 1 определенного регистра)
1 байт. Регистровый СА
|
ADD B
| [ A ] + [ R ] ® A
| Сложение регистра с аккумулятором. Результат помещается в аккумулятор. Второй и третий байты команды составляют адрес области памяти, в которой находится одно из слагаемых. 1 байт. Регистровый СА.
|
ADI 25
| [ A ] + [ B2 ] ® A
| Содержимое второго бита команды прибавляется к содержимому аккумулятора. Непосредственный способ адресации. 2 байта, Непосредственный СА
|
ADC B
| [ A ] + [ R ] + [ C ] ® A
| Сложение регистра и аккумулятора. Используется для многобайтного сложения, где необходимо учитывать перенос из младшей тетрады в старшую. «С» показывает, что триггер переноса заполнен. 1 байт. Регистровый СА.
|
ACI 25
| [ A ] + [ B2 ] + [ C ] ® A
| Сложение непосредственных данных со значением аккумулятора. Используется для многобайтного сложения. 2 байта, Непосредственный СА
|
SUB B
| [ A ] - [ R ] ® A
| Команды вычитания выполняются в дополнительном коде. Вычитание происходит путем инвертирования значений всех разрядов вычитаемого, добавления к ним 1 младшего разряда и сложения полученного числа с уменьшаемым. Логическая 1 в старшем разряде является признаком отрицательного числа. 8-разрядный дополнительный код дает возможность представлять числа в диапазоне -128 до +127. Если результат выполнения команды является отрицательным, нулевым или возникает сигнал заема в старший разряд, соответствующие разряды регистра устанавливаются в 1. 1 байт. Регистровый СА.
|
SUI 25
| [ A ] - [ B2 ] ® A
| Вычитание из аккумулятора непосредственных данных. 2 байта, Непосредственный СА
|
SBB B
| [ A ] - [ R ] - [ C ] ® A
| Многобайтное вычитание с учетом триггера переполнения. 1 байт. Регистровый СА.
|
SBI 25
| [ A ] - [ B2 ] - [ C ] ® A
| Многобайтное вычитание непосредственных данных из аккумулятора с учетом триггера переполнения. 2 байта, Непосредственный СА
|
ANA B
| [ A ] ^ [ R ] ® A
| Команды логических операций выполняются поразрядно (нет переноса в старший разряд). Логическое умножение. 1 байт. Регистровый СА.
|
ANI 25
| [ A ] ^ [ B2 ] ® A
| Логическое умножение непосредственных данных. 2 байта, Непосредственный СА
|
XRA B
| [ A ] " [ R ] ® A
| Исключающая ИЛИ. 1 байт. Регистровый СА.
|
XRI 25
| [ A ] " [ B 2 ] ® A
| 2 байта, Непосредственный СА
|
ORA B
| [ A ] V [ R ] ® A
| Логическая ИЛИ. 1 байт. Регистровый СА.
|
ORI 25
| [ A ] V [ В2 ] ® A
| Логическая ИЛИ. 2 байта, Непосредственный СА
|
CMP B
| [ A ] - [ R ]
| Эта команда влияет только на регистр признаков. Ее используют в алгоритмах, где необходимо исследование флага. 1 байт. Регистровый СА.
|
CPI 25
| [ A ] - [ B2 ]
| 2 байта, Непосредственный СА
|
Команды работы с аккумулятором.Вместо ячейки памяти можно адресовать внешнее устройство.
|
STA
| [ A ] ® M ([B2, B3])
| Содержание аккумулятора посылается в ячейку памяти по адресу, который содержится во 2-м и 3-м байте. Прямой способ адресации. 3 байта. Прямой СА
|
LDA
| [ M ([B2, B3]) ] ® A
| Команда загрузки аккумулятора. Содержание ячейки памяти посылается в аккумулятор. 3 байта. Прямой СА
|
Команды десятичной коррекции
4 случая коррекции: 1) в младшей тетраде появились запрещенные комбинации
2) когда появляется дополнительный перенос из младшей тетрады в старшую
3) в старшей тетраде появляются запрещенные кодовые комбинации
4) когда возникает основной перенос (из старшего разряда)
|
DAA
|
| Запуск узла десятичной коррекции. Узел ДК предназначен для представления действий АЛУ в двоично-десятичном коде. При прибавлении к любому некорректному коэффициенту кода 6 происходит перенос в старшей тетраде и результат остатка не превзойдет корректных весовых коэффициентов. 1 байт
|
CMA
| [ ] ® A
| Коррекция аккумулятора. 1 байт
|
STC
| 1 ® C
| Установка 1 в код переполнения. 1 байт
|
CMC
| [ ] ® C
| Инверсия кода переполнения. 1 байт
|
Команды сдвига
|
RLC
| [ Am ] ® Am+1
[ A7 ] ® A0
[ A7 ] ® C
| Каждый разряд аккумулятора выталкиваем в триггер переполнения С. Применяются в команде управления. 1 байтные команды
Циклический сдвиг влево
|
RAL
| [ Am ] ® Am+1
[ A7 ] ® C
[ C ] ® A0
| Арифметический сдвиг влево
|
RRC
| [ Am ] ® Am-1
[ A0 ] ® A7
[ A0 ] ® C
| Циклический сдвиг вправо
|
RAR
| [ Am ] ® Am-1
[ A0 ] ® C
[ C ] ® A7
| Арифметический сдвиг вправо
|
Команды передачи управления
|
J/MP/
| [ PC ] + 2 ® PC
| Передача управления. Изменяет ход программы.
JMP – передача управления без условия
JNZ – если не 0
JZ – если 0
МП анализирует регистр признаков. МП либо делает эту команду (если условие выполняется) или не делает, если не выполняется. 3 байт. Непосредственный СА
|
C/ALL/
| [ PCH ] ® M ([SP] – 1)
[ PCL ] ® M ([SP] – 2)
[ SP ] – 2 ® SP
[ B3, B2 ] ® PC
| Команда вызова подпрограммы. Используется для обслуживания запросов на прерывание.
1FC3 – начальная точка подпрограммы. 3 байта, Регистрово-косвенный СА
|
R/ET/
| [ M ([SP]) ] ® PC
[ M ([SP] + 1) ] ® PCH
[ SP ] + 2 ® SP
| Команда возвращения в программу в точку, отстоящую на 2 байта адреса. Возврат из последней точка подпрограммы в основную невозможно, т.к. память стековая и возврат идет через извлечение вершины стека. Возврат происходит последовательно. 1-байтная команда. Чтобы вернуться в основную программу с прежними данными, можно занести все данные в подпрограмме до точки расхождения. 1 байт, Регистрово-косвенный СА.
|
Команды работы с парными регистрами
|
LXI B, 1FC3H
| [ B3, B2 ] ® RP
| Загрузка данных парного регистра. 3-байтная команда. Определена для ВС, DE, HL и SP. Непосредственный способ адресации. Вершины стека загружаются при помощи этой команды. 3 байта. Непосредственный СА
|
STAX B
| [ A ] ® M ([RP])
| Содержимое аккумулятора переносится в память. Обозначается только старший регистр пары (например, В, а не ВС). 1 байт. Регистрово-косвенный СА
|
LDAX B
| [M ([RP])] ® [ A ]
| Обратная команда. Используется регистрово-косвенный способ адресации. Индексными регистрами являются BC и DE.1 байт. Регистрово-косвенный СА
|
INX B
| [ RP ] + 1 ® RP
| Инкремент. Определены для пар ВС, DE, HL и SP. 1 байт
|
DCX B
| [ RP ] – 1 ® RP
| Декремент. Определены для пар ВС, DE, HL и SP. 1 байт
|
DAD H
| [ RP ] + [ HL ] ® HL
| Команда двойного сложения. Если DAD H, то регистр удваивает свое значение. 1 байт
|
POP B
| [M ([SP])] ® RPL
[M ([SP]+1)] ® RPH
[SP]+2 ® SP
| Команда работы со стеком. Используется для пар ВС, DE, HL и PCW. Извлечение из стека. С помощью команды CALL заносится сначала старший, затем младший байт, при РОР извлекается сначала младший, затем старший байты. Поэтому в паре ВС запись идет в С. 1 байт. Регистрово-косвенный СА
|
PUSH
| [ PCH ] ® M ([SP] – 1)
[ PCL ] ® M ([SP] – 2)
[ SP ] – 2 ® SP
| Команда работы со стеком. Загрузка в стек. Указывается адрес новой вершины стека. 1 байт. Регистрово-косвенный СА
|
SHLD 1FC3H
| [ L ] ® M ([B3, B2])
[ H ] ® M ([B3, B2]+1)
| Это команды, определенные для регистровой пары HL.
Загрузка содержимого регистровой пары в ячейку памяти. 3 байт. Прямой СА
|
LHLD 1FC3H
| [M ([B3, B2])] ® L
[M ([B3,B2] + 1)] ® H
| Извлечение из памяти данных и занесение их в регистровую память. 3 байт. Прямой СА
|
PCHL
| [ HL ] ® PC
| Эквивалентно команде JUMP. 1 байт. Регистровый СА
|
XTHL
| [ L ] «M ([SP])
[ H ] «M ([SP] + 1)
| Команда обмена. Меняет содержимое регистровой пары с ячейкой памяти, по адресу указателя стека. 1 байт.
|
SPHL
| [ HL ] ® SP
| Меняется вершина указателя стека. 1 байт. Регистровый СА
|
XCHG
| [ H ] «[ D ]
[ L ] «[ E ]
| Команда обмена между регистровыми парами BC и DE. 1 байт
|
Специальные команды
|
IN 2FH
| [ВУ ([B2])] ® A
| Команда ввода. Ввод информации по адресу 2F. 2 байт.
|
OUT 2FH
| [ A ] ® ВУ ([B2])
| Команда вывода. 2 байт
|
NOP
| [ PC ] + 1 ® PC
| Команда, обозначающая код операции. Код этой операции 00. Ячейки памяти необходимо обнулить перед началом команды, чтобы МП не выполнял никаких действий. 1 байт
|
HLT
| [ PC ] ® PC
| Команда остановок. МП останавливается, т.к. нет приращения РС. 1 байт
|
EI
|
| Разрешить прерывание. Установка в 1 триггер обслуживания прерывания. 1 байт
|
DI
|
| Запретить прерывание. Установка в 0 триггер обслуживания запроса на прерывание. 1 байт
|
RST N
| [ PCH ] ® M ([SP] – 1)
[ PCL ] ® M ([SP] – 2)
[ SP ] – 2 ® SP
8 × N ® PC
| Стандартная команда для обработки подпрограммы.
N = 0…7. На каждую программу отдается 8 ячеек памяти, начиная с 0-й. По этой команде записываются таблицы переходов. МП выполняет следующие действия:
1) прячется точка возврата в стек
2) смещается указатель стека
3) программный счетчик переходит в точку возврата.
1 байт
ПРИМЕР RST 7
Подпрограмма начинается в 38 ячейке памяти. Для этого вычисляют число 8 × 7 = 56 в 16-ной системе.
56: 16 = 3 и 8 в остатке.
RST 7 0038
|
Псевдокоманды – команды, не имеющие машинного эквивалента. Команды работы с транслятором.
Виды псевдокоманд:
ORG – установить счетчик. Показывает, с какого адреса будет начинаться команда.
DB – определить байт
DW – определить слово
DS – зарезервировать память с текущей ячейки
PW 1FC3; - последние байты переставлять в памяти МП
SET – присвоить значение.
EQV – эквивалентность. Переустановка значения.
LIST – вывод листинга программы
MACRO … END MACRO – процедура макроопределения
IF <…> = 0 – то трансляция IF <…> ≠ 0 – пропускается. Заканчивается END IF
END – конец трансляции