Система команд


Дата добавления: 2014-01-11; просмотров: 7; лекция была полезна: 0 студентам(у); не полезна: 0 студентам(у).
Опубликованный материал нарушает авторские права? сообщите нам...

 

Система команд – набор команд, имеющих двоичные наборы, служащие в качестве кода команды. В конкретной системе команд формируются определенные способы адресации (регистровый, регистрово-косвенный, непосредственный, прямой, стековый).

Данные в МП представляются в виде 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– конец трансляции