- •1 Введение
- •3 Вида мп:
- •Структурная схема трех-магистральной микроЭвм
- •2 Структурная схема мп
- •Регистры мп:
- •Устройство управления (уу)
- •Работа управляющего автомата. Цикл и такт
- •Работа первичного автомата
- •3 Способы адресации. Форматы команд
- •Форматы команд
- •Формирование кода команды на примере команд пересылки
- •Система команд
- •4 Ассемблер в системе команд 8-разрядного мп
- •5 Организация шин микроЭвм
- •Системный контроллер вк 28, вк 38
- •Генератор тактовых импульсов (гти)
- •6 Организация интерфейса ввода-вывода
- •Программируемый параллельный адаптер (ппа) ик 55
- •7 Контроллер прямого доступа в память (кпдп) (dma) ик 57
- •2 Типа работы:
- •8 Программируемый контроллер прерывания (пкп) вн 59
- •9 Программный интервальный таймер
Формирование кода команды на примере команд пересылки
MOV – передвижение, MVI – передвижение непосредственных данных
MOV RП, RИ – пересылка из регистра источника в регистр приемник
-
01
000
001
КОП
RП
RИ
КОП – код операции – пересылка.
Обозначения:
[…] – содержимое (…) – адрес. |
[RИ] RП содержимое RИ пересылается в RП |
MOV M, RИ – команда, записывающая содержимое RИ в память.
[RИ] M ([HL])
MVI RП, I
MVI B, 25 – запись 2-го байта в B
[B2] RП
Система команд
Система команд – набор команд, имеющих двоичные наборы, служащие в качестве кода команды. В конкретной системе команд формируются определенные способы адресации (регистровый, регистрово-косвенный, непосредственный, прямой, стековый).
Данные в МП представляются в виде 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 – конец трансляции