1. ЦЕЛЬ ЗАНЯТИЯ

Изучение набора команд микропроцессора КР580ИК80: уяснения назначениякаждой группы команд; возможностей, представляемых каждой командой; способов адресации данных в командах; форматов команд и данных.

2. СОДЕРЖАНИЕ ЗАНЯТИЯ

2.1. Изучение описания команд микропроцессора КР580ИК80 и их формата.

2.2. Отработка практических навыков использования регистров микропроцессора.

2.3. Исследование способов адресации данных в командах.

3. МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ПРОВЕДЕНИЮ САМОСТОЯТЕЛЬНОЙ РАБОТЫ И ПОДГОТОВКЕ К ЗАНЯТИЮ.

Для успешной самостоятельной работы студентов над разделом "Микропроцессорная техника" необходимо изучить набор команд микропроцессора КР580ИК80, приведенный в приложении; познакомиться е внутренней организацией регистров в микро-ЭВМ и операциями с парами регистров и стеком, форматами команд и данных, способами адресаций данных, а также рассмотреть краткие сведения из теории, приведенные в настоящих методических указаниях.

3.1. ОПИСАНИЕ ОСНОВНЫХ КОМАНД

Описание команд МП КР580ИК80 приведено  в приложении 1.

3.1.1.  Команды манипулирования с данными.

Одна иа основных задач МП, загрузка аккумулятора (А) данными,  выполняется непосредственной командой. М ٧ 1 А (данные). Данные,  загружаемые в аккумулятор,  запоминаются в байте,  следующем за кодом.

После того, как данные введены в А, необходимы команды для работы с ними,  например,  INR А (приращение на единицу содержимого А) или СМА  (инвертирование содержимого А).

3.1.2. Команды передачи между А и памятью.

Команды LDA (адрес) (загрузка А) и STA (адрес) (запоминание содержимого А) передают данные между А и памятью. А адрес ячейки памяти указывается в двух байтах, следующих за операционным кодом.

3.1.3. Команды проверки и перехода. Чтобы проверить содержимое А, используется команда СPI (данные)  (непосредственное сравнение). При этом сравниваются данные, указанные во втором байте команды, с содержимым А, и, соответственно, устанавливаются флаги процессора.

Команда JZ   (адрес)  (переход, если нуль) проверяет нулевой флаг, предварительно установленный предыдущей операцией, такой как CPI, и вызывает переход при установленном флаге.

Команда безусловного перехода МР (адрес) вызывает переход независимо от состояния флага. Адрес перехода обеих команд заполняется в двух байтах памяти, следующих за кодом операции.

3.1.4. Команды связи с подпрограммой. Для использования подпрограмм требуются две команды. CALL (адрес) (вызов) используется для перехода к подпрограмме, a RET (возврат) используется для окончания подпрограммы.  Команда САLL, указывает адрес так же, как команда перехода. Команда RЕT не указывает адреса, но вызывает переход к команде, следующей за предварительно выполненной командой CALL.

3.1.5. Команды управления прерываниями. Команда Е1 (разрешение прерываний) разрешает выбранные прерывания. Команда Д1 (запрещение прерываний) запрещает все прерывания.

Относительно небольшой набор основных кбманд, перечисленных выше, характеризует основные возможности МП КР580ИК80. Однако система команд этого МП включает значительно болшее число команд, что облегчает написание программ.

3.1.6. Точки прерывания. Пошаговое выполнение программы позволяет останавливать ее между командами и наблюдать действие каждой команды. Но во многих случаях удобно выполнять программу на полном быстродействии и останавливать в интересующей точке. Это можно осуществить вводом в программу команды RST (команда прерывания), которая заставляет процессор прерывать исполнение команд пользователя и перейти на программу прерывания.

Точки прерывания удобно использовать при отладке программ. Эти точки можно вводить после написания программы путем замены некоторой команды точкой прерывания. Точка прерывания останавливает программу в нужном месте, поэтому не надо выполнятъ предыдущие команды по шагам. Если программа выполняется правильно точка прерывания может быть заменена NOP (ничего на делать) или командой, которую заменила точка прерывания.

В "Микролаб" прерывание  RSТI выводит программу пользователя на монитор.

Кроме программного прерывания в микро-ЭВМ может быть реализовано аппаратное прерывание. В "Микролаб" такое прерывание используется для организации шагового режима. Если тумблер режима находится в положении "ШАГ" и нажимается кнопка "ПУСК",то на МП поступает сигнал прерывания, который воспринимается им как RST7 (это обеспечивается аппаратной частью). Подпрограмма обработки прерывания RST7 является подпрограммой шагового режима.

3.1.7. Логические команды. Наиоолее широко используются четыре логические функции:  "НЕ",  "И",  "ИЛИ",  "Исключающее ИЛИ". Каждая из этих функций может быть реализована программным способом.

Функцию "НЕ" выполняет команда СМА (дополнение А), .Каждый бит аккумулятора после исполнения этой команды инвертируется. Функцию "И" выполняет команда ANA R. (символ R   означает регистр или ячейку памяти). Например, ANAD вызывает объединение по "И" содержимого регистра D и А. Результат остается в А, содержимое регистра D не изменяется.

Функцию "ИЛИ" выполняет команда ORA (объединение по "ИЛИ" аккумулятора и регистра R).

Функцию "Исключающее ИЛИ" выполняет команда  XRA R. Поскольку адрес или данные определять не нужно, то все эти команды требуют только один байт кода операции.

Команда XRA A объединяет по "Исключающему ИЛИ" А с самим собой. Так как логическая функция "Исключающего ИЛИ" любого числа с самим собой дает в результате нуль, то эта команда очищает аккумулятор, используя только один байт памяти. Другая команда MVI     А, 0 требует для той же операции два байта памяти.

3.1.8. Сдвиг данных.

Часто необходимая функция - это сдвиг данных вправо или влево. В микро-ЭВМ это выполняется с помощью сдвиговых команд:

RRC (круговое вращение вправо) и RLC (влево). Эти команды оперируют только с аккумулятором. Круговое вращение означает, что младший бит сдвигается на место старшего (или наоборот) (рис. 3.1).

В приложении 2 приведен листинг программы для демонстрации функций команд сдвига, при выполнении которой на индикаторах наблюдается свечение типа "бегущие огни". После программирования интерфейса программа заносит в А код 1000 0000, затем производится вывод содержимого на индикаторы. Команда вывода (OUT F9) повторяется некоторое время, так как она находится в петле задержки, организованной с помощью регистров D и Е. Задержка обеспечивает медленное изменение состояния индикаторов, без нее сдвиг данных А происходил бы настолько быстро, что было бы невозможно проследить за ним.

Функции команд сдвига

Старший бит          Младший бит

                                          RLC  (сдвиг влево)

Старший бит          Младший бит

                                            RRC  (сдвиг вправо)

Рис. 3.1

3.1.9. Арифметические команды.

Основная арифметическая функция - это сложение двух чисел. Команда ADD R складывает данные регистра R и А и запоминает результат в А. Если результат сложения больше 25510, т.е. длиннее восьми бит, то для учета этого переполнения МП содержит флаг переноса, который работает как девятый бит аккумулятора. Этот флаг может быть проверен командами JС (переход, если есть перенос) и JNC (переход, если нет переноса).

Команда SUB R вычитает содержимое определенного регистра из содержимого А. Команда вычитания использует флаг переноса как флаг эаема. Если флаг переноса устанавливается после команды SUB R , значит число в регистре R больше, чем в А.

3.2. РЕГИСТРЫ ОБЩЕГО НАЗНАЧЕНИЯ.

В МП КР580ИК80 имеются шесть 8-разрядных регистров, которые используются для временного запоминания данных: В, С, D, E, H и L и регистр - указатель стека  SP.

Для использования этих регистров необходимы некоторые новые команды. Команды МVI, загружающая данные в А, может быть использована с любым регистром. Например, MVI   D (данные) обеспечивает запись данных в регистр D. Общей формой записи этой команды является MVI R (данные), где R - любой регистр: А, B, С, D, E, H, L. Хотя А является специальным в смысле использования для результатов вычислений, он также может быть применен как регистр общего назначения.

Команда INR также может быть использована с любым регистром. Обшей формой записи является INR R. Например, INR Н наращивает содержимое регистра Н.

Данные можно перемещать из одного регистра в другой. Это выполняется командой MOV R1, R2. Регистр R1 является местом назначения, а R2 - источником. Например, MOV А,H переносит содержимое регистра Н в А, но содержимое регистра Н не меняется.

Регистры общего-назначения удобны, когда программа использует несколько разных переменных. Каждый регистр может быть использован для определенной цели. Нет необходимости использовать ячейки ОЗУ для запоминания данных до тех пор, пока достаточно шести регистров. Например, программа, которая считает, шесть разных событий, может использовать для счета каждого события отдельный регистр.

Внутреняя организация регистров характеризуется объемом хранимой в них информации (рис. 4.1).

Объем хранимой в регистрах информации

А (8 бит)

 

В (8 бит)

С (8 бит)

   Д (8)

    Е (8 

   Н (8)

(8

Программный счетчик (16)

Указатель стека (16)

Рис 4.1.

Содержимое регистров позволяет проверять программа монитора в шаговом режиме после выполнения каждой команды (т.е. после каждого шага). На третьем и четвертом индикаторах, считая справа, после выполнения каждой команды (шаговый режим) высвечивается содержимое аккумулятора А. Кроме того, после каждого шага команды программа монитора записывает содержимое регистров в специальные ячейки ОЗУ. Следовательно, можно проверить содержимое регистров на каждом шаге, просмотрев соответственно ячейки ОЗУ (табл. 3.1).

Таблица 3.1

Адреса регистров МП

Адрес                                                   Регистр   

83ЕВ                                                     Аккумулятор

83ЕА                                                     Регистр признаков

83Е9                                                     Регистр В

83Е8                                                     Регистр С

83Е7                                                     Регистр D

83Е6                                                     Регистр Е

83Е5                                                     Регистр Н

83Е4                                                     Регистр L

83ЕЗ                                                     Указатель стека (старший байт)

83Е2                                                     Указатель стека (младший байт)

83EI                                                      Программный счетчик (старший байт)

83Е0                                                     Программный счетчик (младший байт)

3.3. СПОСОБЫ АДРЕСАЦИИ

Часто обрабатываемые данные хранятся в памяти. При использовании многобайтных данных такие данные, как команды, хранятся в следующих одна за другой ячейках памяти. Младший байт (правый) записывается первый,за ним следуют более старшие байты.

МП КР580ИК80 имеет четыре различных способа адресации данных, хранящихся в памяти или в регистрах.

При прямой адресации второй и третий байты команды содержат точный адрес ячейки памяти, в которой хранятся нужные данные. Младшие биты адреса содержатся во втором байте, старшие - в третьем.

При регистровой адресации команда указывает регистр или пару регистров, где содержатся данные.

Косвенная регистровая адресация в команде определяется тем, что указывается пара регистров, в которой содержится адрес ячейки памяти, где расположены нужные данные. Старшие биты адреса хранятся в первом регистре пары, младшие - во втором.

При непосредственной адресации команда сама содержит нужные данные, которые могут быть длиной 8 или 16 бит, причем опять сначала идет младший байт, затем старший.

Если нет команд прерывания или перехода, процессор выполняет команды, хранящиееся в ячейках памяти, следующих по порядку одна за другой. Команда перехода может определить адрес следующей команды, которую нужно исполнить, одним из двух способов: прямым или косвенным регистровым. При прямом способе команда перехода сама содержит адрес следующей команды, которую нужно исполнить. За исключением команды RSТ второй байт содержит младшие биты адреса, третий байт старшие биты.

При косвенном регистровом способе команда перехода указывает пару регистров, в которой находится адрес следующей к исполнению команды. Причем, старшие биты адреса хранятся в первом регистре пары, младшие - во втором.

4. ПЕРЕЧЕНЬ ОБОРУДОВАНИЯ, ИСПОЛЬЗУЕМОГО ПРИ ПРОВЕДЕНИИ

ИССЛЕДОВАНИЙ

4.1. Учебная микро-ЭВМ "Микролаб КР580ИК80".

4.2. Источник переменного напряжения 220В - розетка на стенде "ЛЭС-1".

5. МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ПРОВЕДЕНИЮ ЭКСПЕРИМЕНТАЛЬНЫХ    ИССЛЕДОВАНИЙ.

5.1. Порядок работы.

5.1.1. Заземлите прибор, соединив его клемму "1" с клеммой "N" на стенде "ЛЭС-1".

5.1.2. Установите переключатель "АВТ/ШАГ" в положение “АВТ”.

5.1.3. Переключатель "СЕТЬ" поставьте в положение "ВКЛ".

5.1.4. Введите с помощью клавиатуры требуемую программу.

5.1.5. После ввода программы приступите к ее отладке (в шаговом режиме), а затем к ее выполнению.

5.1.6. По окончании работы выключите тумблер "ВКЛ" и отключите прибор от сетевого питания и заземления.

5.2. Демонстрация использования регистров общего назначения.

5.2.1. Введите в "Микролаб" программу, листинг которой приведен в табл. 5.1 (программа сначала заносит в регистр В число 0А, затем переносит его содержимое в регистр Н и наконец наращивает регистр Н).

Таблица 5.1

Листинг программы

Адрес

КОП

Мнемокод

Операнд

Комментарии

8000

06

MVI    B,

17

Загрузка числа 17 в регистр В

8001

17

   

8002

60

MOV   H,B

 

Загрузка регистра Н содержимым регистра В

8003

24

INR   H

 

Приращение на единицу содержимого регистра Н

5.2.2. Удостоверьтесь, что программа правильно записана в память микро-ЭВМ, для чего нажмите клавиши: "8000, УСТ. АД, АД+"

5.2.3. Установите тумблер "АВТ-ШАГ" в положение "ШАГ".

5.2.4. Нажмите последовательно кнопки: "8,0,0,0, УСТ. АД, ПУСК". При этом выполняется команда МVI В, 17. На индикаторе адресов высвечивается число 8002 - это адрес следующей команды, записанной в программном счетчике. На индикаторе данных в двух правых разрядах высвечивается содержимое флагового регистра, а в двух левых содержимое аккумулятора.

5.2.5. Нажмите последовательно кнопки; "8,3,Е,9, УСТ, АД". На индикаторе адресов установится адрес регистра В. На индикаторе данных в двух правых разрядах высвечивается число 17 - содержимое регистра В после выполнения команды MVI В, 17.

5.2.6. Нажмите кнопку "ВОЗВР." На индикаторе адресов высвечивается адрес 8003. При этом выполняется команда МОV Н,В.

5.2.7. Установите на индикаторе адресов число 83Е5 (кнопки: "8, 3, Е, 5, УСТ. АД") - это адрес регистра Н. На индикаторе данных в двух правых разрядах высвечивается число 17 - содержимое регистра Н после вылетания команды MOV Н,В. Установив на индикаторе адресов адрес регистра В, убедитесь, что этот регистр все еще содержит число 17.

5.2.8. Нажмите кнопку "ВОЗВР." На индикаторе адресов высвечивается число 8004 - адрес следующей команды. При этом выполняется команда INR Н. Установив на индикаторе адресов адрес регистра Н, убедитесь, что его содержимое увеличилось на единицу, т.е. стало равным 18.

5.3. Экспериментальное использование точек прерывания.

5.3.1. Введите программу, листинг которой дриведен в табл. 5.2. Основная программа представляет собой программу счетчика с точкой прерывания. Счет ведется в ячейке 83F7. Содержимое этой ячейки выводится на крайний правый индикатор. Перед каждым приращением счетчика происходит прерывание программы, и начинает выполняться подпрограмма с адреса 8015. В этой подпрограмме предусмотрен опрос клавиатуры, и если нажата кнопка
"ПУСК", происходит возврат в основную программу, где произойдет очередное приращение ячейки 83F7. Таким образом, после каждого нажатия кнопки "ПУСК" будет происходить увеличение на единицу содержимого ячейки 83F7.

5.3.2. Установите тумблер режима в положение "АВТ" и, нажимая кнопку "ПУСК", наблюдайте на правом индикаторе счет данных.

5.4. Иллюстрация действия логических команд.

5.4.1. Введите программу, листинг которой приведен в табл. 5.3, в "МИКРОЛАБ", проставив предварительно коды операций и адреса.

Эта программа считывает данные с переключателей входного порта,  а затем объединяет их по "И" с числом 0000 1010. Результат появляется на светодиодных индикаторах. Затем программа возвращается на начало, и процесс бесконечно повторяется, поэтому можно изменить входные данные и проверить соответствующие выходные.

5.4.2. Проверьте правильность ввода программы.

5.4.3. Установите начальный адрес программы: "8000", "УСТ. АД" и нажмите кнопку "ПУСК". Программа выполняется.

5.4.4. Установите входные переключатели в первое положение, заметьте информацию на индикаторах (00001010).

5.4.5. Измените положение переключателей и проверьте соответствующие выходы. Биты, которые объединяются по операции "И" с нулями, не зависят от положения переключателей.

5.4.6. Нажмите кнопку "СБРОС" для возвращения управления монитору; заметьте, что переключатели не влияют больше на состояние индикаторов.

5.4.7. Замените команду АNАB (по адресу 8008) командой ОRАВ. Запустите новую программу. Изучите соответствие между различными положениями входных переключателей и состояниями индикаторов; заметьте различия между функциями "И" и "ИЛИ". Выхода битов, объединенных по "ИЛИ" с нулями, зависят от положения переключателей.

5.4.8. Нажмите кнопку "СБРОС", замените команду ОRАВ на XRAB.Повторите манипуляции п. 5.4.7. Биты, объединенные по "Исключающему ИЛИ" с единицами, инвертируются.

5.4.9. Результаты исследования логических команд занесите в табл. 5.4.

Таблица 5.2

Листинг программы счетчика

Таблица 5.3

Программа, демонстрирующая действие логических команд

Таблица 5.4

Сравнение результатов действия различных логических команд

Команды, записанные по адресу 8008

Положение

 переключателей

Содержимое аккумулятора

Содержимое

регистров

Информация на индикаторах

1

2

3

ANA   B

0

0

0

0

0

1

     

ORA   B

0

0

1

1

0

1

     

XRA   B

1

1

1

1

0

0

1

1

0

1

0

1

     

5.5. Демонстрация функций команд сдвига.

5.5.1. Переведите программу, приведенную в приложении 2 в машинные коды и введите в "Микролаб".

5.5.2. Проверьте правильность ввода программы и запустите ее (8000, УСТ. АД. ПУСК). На индикаторах появится эффект "бегущего огня" вправо.

5.5.3. По заданию преподавателя замените команду RRС на RLС и наблюдайте "бегущие огни" влево (табл. 5.5).

5.5.4. По заданию преподавателя измените частоту переключения индикаторов, занося в регистр В различные числа (т.е. измения задержку). Для этого достаточно менять код по адресу 8007, т.е. изменять второй байт команды MVI D (см. табл.5.5).

5.5.5. По заданию преподавателя измените комбинацию "зажженных" индикаторов, заменяя код по адресу 8005 (см. табл.5.5).

Таблица 5.5

Индивидуальные задания по программе "Бегущие огни"

Вариант задания

Направление сдвига данных

Время задержки

Комбинация зажженых индикаторов

1

Вправо

40

1000   0000

2

Вправо

40

1000   1000

3

Вправо

50

1010   1010

4

Вправо

60

1001   1001

5

Вправо

90

1100   1100

6

Вправо

90

1000   0000

7

Вправо

75

1010   1010

8

Влево

40

1000   0000

9

Влево

40

1000   1000

10

Влево

50

1010   1010

11

Влево

60

1001   1001

12

Влево

90

1100   1100

13

Влево

90

1000   1000

14

Влево

75

1010   1010

6. СОДЕРЖАНИЕ ОТЧЕТА

6.1. Листинги программ, приведенных в табл. 5.1; 5.2.

6.2. Листинг программы, приведенной в табл. 5.3, проставив коды операций.

6.3. Сравнение результатов действия различных логических команд (табл. 5.4).

6.4. Листинг программы, демонстрирующей функции команд сдвига (Приложение 2) с учетом индивидуального задания из табл.5.5.

6.5. Состояние индикатора нуля после выполнения операций сравнения, индикатора переноса после выполнения операций сложения (вычитания) в программе, составленной по завпнню преподавателя.

6.6. Состояние аккумулятора после выполнения каждой команды в программе, листинг которой приведен в табл. 5.1 или 5.2.

7. ВОПРОСЫ И ЗАДАНИЯ ДЛЯ САМОПРОВЕРКИ

7.1. Перечислите известные Вам операции под данными в аккумуляторе; в регистрах МП?

7.2. Назовите известные Вам форматы команд.

7.3. Приведите примеры команд различных форматов.

7.4. Поясните какой байт считается старшим и младшим; какой регистр считается старшим и младшим.

7.5. Перечислите известные Вам способы адресации данных в командах.

7.6. Перечислите универсальные восьмиразрядные и специальные 16 - разрядные регистры микропроцессора.

7.7. Определите форматы команд в байтах в программе, листинг которой приведён в табл. 5.2.

7.8. Что означают команды инкрементировать и декрементировать?

7.9. Каково состояние индикатора нуля после выполнения операций сравнения в программе, составленной по заданию преподавателя (см. табл. 7.1)?

7.10. Каково состояние индикатора переноса после выполнения операции сложения (вычитания) в программе, составленной по заданию преподавателя?

7.11. Каково состояние аккумулятора и ячейки памяти с адресом 8030 после выполнения программы, составленной по заданию преподавателя?

7.12. Перечислите основные группы команд микропроцессора.

7.13. Назовите известные Вам команды пересылки данных.

7.14. Приведите примеры команд арифметических дпераций над данными, логических операций над данными.

7.15. Составьте простые программы с использованием различных команд и способов адресации по заданию преподавателя (табл. 7.1), укажите в комментариях по символику команд.

Таблица 7.1

Индивидуальные задания по составлению простых программ

ПРИЛОЖЕНИЕ 1.

2. НАБОР КОМАНД МИКРОПРОЦЕССОРА КР580ИК80

Все команды микропроцессора КР580ИК80, используемого в "Микролаб" делятся на пять групп (или типов).

Команды перемещения данных осуществляют пересылку данных  между регистрами или между памятью и регистрами.

Арифметические команды преобразования данных предназначены для выполнения операций сложения, вычитания, увеличения или уменьшения содержимого ячеек памяти или.регистров.

Логические команды преобразования данных выполняют логические операции "И", "ИЛИ", "НЕ", сравнение, сдвиг и регистрах и ячейках памяти.

Команды переходов проверяют условия переходов, указанных в командах управления, обеспечивают вызов подпрограмм и возвращение из полпрограммы.

Команды управления организуют обмен информацией с внешними устройствами (ввод, вывод), работу со стеком,разрешение и запрещение прерываний.

2.1. КОМАНДЫ ПЕРЕСЫЛКИ

Команды этой группы осуществляют пересылку данных в/из регистр (а) и ячейки памяти и не изменяют состояния флагов.

2.1.1. MOV R1, R2 (ПЕРЕСЫЛКА ДАННЫХ ИЗ РЕГИСТРА В РЕГИСТР)

(R1) ← (R2)

Содержимое регистра R2 пересылается в регистр R1.

MOV     A,A     7F                                                                              MOV   B,A      47

MOV     A,B      78                                                                              MOV   B,B      40

MOV     A,C     79                                                                              MOV   B,C      41

MOV     A,D     7A                                                                              MOV   B,D      42

MOV     A,E      7B                                                                              MOV   B,E      43

MOV     A,H     7C                                                                              MOV   B,H      44

MOV     A,L      7D                                                                              MOV   B,L      45

MOV     C,A     4F                                                                              MOV   D,A     57

MOV     C,B      48                                                                              MOV   D,B      50

MOV     C,C     49                                                                              MOV   D,C     51

MOV     C,D     4A                                                                              MOV   D,D     52

MOV     C,E      4B                                                                              MOV   D,E      53

MOV     C,H     4C                                                                              MOV   D,H     54

MOV     C,L      4D                                                                              MOV   D,L      55

MOV     E,A      5F                                                                              MOV   H,A     67

MOV     E,B      58                                                                              MOV   H,B      60

MOV     E,C      59                                                                              MOV   H,C     61

MOV     E,D      5A                                                                              MOV   H,D     62

MOV     E,E      5B                                                                              MOV   H,E      63

MOV     E,H      5C                                                                              MOV   H,H     64

MOV     E,L      5D                                                                              MOV   H,L      65

MOV     L,A      6F                                                                              MOV   E,E      6B

MOV     L,B      68                                                                              MOV   E,H      6C

MOV     L,C      69                                                                              MOV   E,L      6D

MOV     L,D      6A

Циклы: 1; состояния:  4; адресация: регистровая; флаги: не используются.

2.1.2. MOV R ,М (ПРЕСЫЛКА ДАННЫХ ИЗ ПАМЯТИ)

(R) ← ((H) (L))

Содержимое ячейки памяти, адрес которой хранится в регистрах Н и L, пересылается в регистр R.

MOV     А,М     7E

MOV     В,M     46

MOV     С,M     4E

MOV     D,M     56

MOV     E,M     5E

MOV     H,M     66

MOV     L,M     6E

Циклы: 2; состояния:  7; адресация: косвенная регистровая; флаги: нет.

2.1.3. MOV M,R (ПЕРЕСЫЛКА ДАННЫХ В ПАМЯТЬ)

((H) (L)) ← (R)

Содержимое регистра R пересылается в ячейку памяти, адрес которой содержится в регистрах Н и L.

MOV     M,A     77

MOV     М,B     70

MOV     М,C     71

MOV     М,D     72

MOV     М,E     73

MOV     М,H     74

MOV     М,L     75

Циклы: 2; состояния:  7; адресация: косвенная регистровая; флаги: нет.

2.1.4. MVI   ,   R    Байт (НЕПОСРЕДСТВЕННАЯ ПЕРЕСЫЛКА)

(R) ← (байт 2)

Содержимое второго байта команды пересылается в регистр R.

MVI       A,        байт    3Е

MVI       B,        байт    06

MVI       C,        байт    0E

MVI       D,        байт    16

MVI       E,         байт    IЕ

MVI       H,        байт    26

MVI       L,         байт    3Е

Циклы: 2; состояния: 7; адресация: непосредственная; флаги: нет.

2.1.5. MVI    М,   Байт (НЕПОСРЕДСТВЕННАЯ ПЕРЕСЫЛКА В ПАМЯТЬ)

Содержимое второго байта команды пересылается в ячейку памяти, адрес которой указан в регистрах Н и L.

MVI         M,                 байт    36

Циклы: 3; состояния:  10; адресация: непосредственная косвенная регистровая; флаги: нет.

2.1.6. LXI   RP, 2 байта           (НЕПОСРЕДСТВЕННАЯ ЗАГРУЗКА
ПАРЫ РЕГИСТРОВ)

(RH) ← (байт 3)

(RL) ← (байт 2)

Третий байт команды пересылается в старший регистр (RH) пары регистов, второй байт  - в младший регистр (RL) пары регистров.

LXI        B,        2 байта           0I (непосредственная загрузка пары регистров B и C)

LXI        D,        2 байта           II (непосредственная загрузка данных в пару регистров D и E)

LXI        H,        2 байта           2I (непосредственная загрузка пары регистров H и L)

LXI        SP,      2 байта           3I (непосредственная загрузка указателя стека)

Циклы: 3; состояния: 10; адесация: непосредственная; флаги: нет.

2.1.7. LDA [адрес] (ПРЯМАЯ ЗАГРУЗКА АККУМУЛЯТОРА)

(А) ← ((байт 3) (байт 2))

Содержимое ячейки памяти, адрес которой указан во втером и третьем байтах команды, загружается в аккумулятор.

LDA  [адрес]                 3A

Циклы: 4; состояния: 13; адресация: прямая; флаги: нет.

2.1.8. S ТА [адрес]  (ПРЯМАЯ.ЗАПИСЬ СОДЕРЖИМОГО АККУМУЛЯТОРА В ПАМЯТЬ)

((байт 3 ) (байт 2 )) ← (А)

Содержимое аккумулятора пересылается в ячейку памяти, адрес которой указан во втором и третьем байтах команды.

STA  [адрес]                 32

Циклы: 4; состояния 13; адресация: прямая; флаги: нет.

2.1.9. LHLD [адрес]  (ПРЯМАЯ ЗАГРУЗКА РЕГИСТРОВ H и L)

(L) ← ((байт 3) (байт 2))

(Н) ← ((байт 3) (байт 2) + I)

Содержимое ячейки памяти, адрес которой указан во втором и третьем байтах команды, пересылается в регистр L . Содержимое ячейки памяти со следующим адресом ((адр.) + I) пересылается в регистр Н.

LHLD  [адрес]              2A

Циклы: 5; состояния 16;.адресация; прямая; флаги: нет

2.1.10. SHLD   [адрес]  (ПРЯМАЯ ЗАПИСЬ СОДЕРЖИМОГО РЕГИСТОВ H,L    В ПАМЯТЬ)

((байт 3 ) ( байт 2 )) ← (L)

((байт 3 ) (байт 2) +1) ← (Н)

Содержимое регистра L пересылается в ячейку памяти, адрес которой определен во втором и третьем байтах команды. Содержимое регистра Н пересылается в следующую ячейку памяти.

SHLD  [адрес]              22

Циклы: 5; состояния: 16; адресация: прямая; флаги: нет.

2.1.11.    LDAX    RP   (КОСВЕННАЯ ЗАГРУЗКА АККУМУЛЯТОРА)

(А) ← ((RP))

Содержимое ячейки памяти, адрес которой указан в паре региcтров RP, пересылается в А-регистр, причем могут быть указаны только пары регистров   RP =В (регистры В и С) и RP=D (регистры D и Е).

LDAX                B         0A

LDAX                D         IA

Циклы: 2; состояния: 7; адресация: косвенная регистровая; флаги: нет.

2.1.12.   STАХ   RP (КОСВЕННАЯ ЗАПИСЬ СОДЕРЖИМОГО АККУМУЛЯТОРА В ПАМЯТЬ)

((RP)) ← (А)

Содержимое аккумулятора пересылается в ячейку памяти, адрес которой определен в паре регистров RP, причем, могут быть указаны только пары регистров  RP=В (регистры В и С) или RP=D (регистры D и Е).

SDAX                B         02

SDAX                D         I2

Циклы: 2; состояния 7;  адресация: косвенная регистровая; флаги: нет

2.1.13. XCHG  (ОБМЕН ДАННЫМИ МЕЖДУ РЕГИСТРАМИ H,L и D,E)

(Н) ↔ (D)

(L) ↔ (Е)

Содержимое регистров Н и L. обменивается с содержимым регистров D и Е.

XCHG               EB

Циклы: 1; состояния: 4; адресация: регистровая; флаги: нет.

2.2. АРИФМЕТИЧЕСКИЕ КОМАНДЫ

Команды этой группы выполняют арифметические операции над данными в регистрах и ячейках пямяти.

Если нет особых указаний, то эти команды изменяют состояния флагов нуля, четности, переноса и вспомогательного переноса в соответствии со стандартными правилами.

Все операции вычитания выполняются через арифметическое дополнение до 2, причем флаг переноса устанавливается в логическую I, если имеется заем, и сбрасывается, если заема не было.

2.2.1. ADD R (СЛОЖЕНИЕ СОДЕРЖИМОГО АККУМУЛЯТОРА С СОДЕРЖИМЫМ РЕГИСТРА)

(A) ← (A) + (R)

Содержимое регистра R складывается с содержимым аккумулятора. Результат   помещается в аккумулятор.

ADD      A         87

ADD      B         80

ADD      C         81

ADD      D         82

ADD      E          83

ADD      H         84

ADD      L          85

Циклы : I; состояния: 4; адресация: регистровая; флаги: Z,S,P,СУ,АС.

2.2.2. ADD M (СЛОЖЕНИЕ СОДЕРЖИМОГО АККУМУЛЯТОРА С СОДЕРЖИМЫМ ЯЧЕЙКИ ПАМЯТИ)

(A) ← (A) + ((H) (L))

Содержимое ячейки памяти, адрес которой содержится в регистрах Н и L , складывается с содержимым аккумулятора. Результат помешается в аккумулятор.

ADD      M        86

Циклы: 2; состояния: 7; адресация: косвенная регистровая; флаги: Z,S,P,СУ,АС.

2.2.3. ADI байт (НЕПОСРЕДСТВЕННОЕ СЛОЖЕНИЕ).

( А ) ← ( А ) + (байт 2)

Содержимое второго байта команды складывается с содержимым аккумулятора. Результат помещается в аккумулятор.

ADI        байт    С6

Циклы: 2; состояния: 7; адресация: непосредственная; флаги: Z,S,P,СУ,АС.

2.2.4. ADC   R  (СЛОЖЕНИЕ СОДЕРЖИМОГО АККУМУЛЯТОРА С СОДЕРЖИМЫМ РЕГИСТРА И БИТОМ ФЛАГА ПЕРЕНОСА)

( А ) ← ( A ) + (R) + (СУ)

Содержимое регистра R и бит флага переноса складываются с содержимым аккумулятора. Результат помещается в аккумулятор.

ADC      A         8F

ADC      B         88

ADC      C         89

ADC      D         8A

ADC      E          8B

ADC      H         8C

ADC      L          8D

Циклы: 1; состояния: 4; адресация: регистрация; флаги: Z,S,P,СУ,АС.

2.2.5. АDC     М    (СЛОЖЕНИЕ СОДЕРЖИМОГО АККУМУЛЯТОРА С СОДЕРЖИМЫМ ЯЧЕЙКИ ПАМЯТИ И БИТОМ ПЕРЕНОСА)

(А) ← (А) + ((Н) (L)+(СУ))

Содержимое ячейки памяти, адрес которой указан в регистрах Н и L , и содержимое бита флага переноса складывается с содержимым аккумулятора. Результат помещается в аккумулятор.

АDC     М          8E

Циклы: 2; состояния: 7; адресация; косвенная регистровая; флаги: Z,S,P,СУ,АС.

2.2.6. ACI байт (НЕПОСРЕДСТВЕННОЕ СЛОЖЕНИЕ С БИТОМ ПЕРЕНОСА)

( А ) ← ( А ) + (байт 2 ) + (СУ)

Содержимое второго байта команды и бита флага переноса складывается с содержимым аккумулятора. Результат помещается в аккумулятор.

ACI   байт         СЕ

Циклы: 2; состояния: 7; адресация: непосредственная; флаги: Z,S,P,СУ,АС.

2.2.7. SUB    R   (ВЫЧИТАНИЕ СОДЕРЖИМОГО РЕГИСТРА)

(A) ← (A) – (R)

Содержимое регистра R вычитается из содержимого аккумулятора. Результат помещается в аккумулятор.

SUB       A         97

SUB       B         90

SUB       C         91

SUB       D         92

SUB       E          93

SUB       H         94

SUB       L          95

Циклы: 2; состояния: 7; адресация; регистровая; флаги: Z,S,P,СУ,АС.

2.2.8. SUB M (ВЫЧИТАНИЕ СОДЕРЖИМОГО ЯЧЕЙКИ ПАМЯТИ)

(А) ← (А) – ((Н) (L))

Содержимое ячейки памяти, адрес которой содержится в регистрах Н и L, вычитается из содержимого аккумулятора. Результат помещается в аккумулятор.

SUB     M       96

Циклы: 2; состояния: 7; адресация: косвенная регистровая; флаги: Z,S,P,СУ,АС.

2.2.9.    SUI    байт (НЕПОСРЕДСТВЕННОЕ ВЫЧИТАНИЕ)

( А ) ← ( А ) –(байт 2)

Содержимое второго байта команды вычитается из содержимого аккумулятора. Результат помещается в аккумулятор.

SUI    байт        D6

Циклы: 2; состояния: 7; адресация: непосредственная; флаги: Z,S,P, СУ, АС.

2.2.10.   SBB R (ВЫЧИТАНИЕ СОДЕРЖИМОГО РЕГИСТРА И БИТА)

(А) ← (А) – (R) – (СУ)

Содержимое регистра R и бит флага переноса вычитаются из содержимого аккумулятора. Результат помещается в аккумулятор.

SBB       A         9F

SBB       B         98

SBB       C         99

SBB       D         9A

SBB       E          9B

SBB       H         9C

SBB       L          9D

Циклы: 1; состояния: 4; адресация: регистровая; флаги: Z,S,P,СУ,АС.

2.2.11. SBB М (ВЫЧИТАНИЕ СОДЕРЖИМОГО ЯЧЕЙКИ ПАМЯТИ И БИТА ПЕРЕНОСА)

Содержимое ячейки памяти, адрес которой содержится в регистрах Н и L, и содержимое бита флага переноса СУ вычитается из содержимого аккумулятора. Результат помещается в аккумулятор.

SBB       М        9E

Циклы: 2; состояния: 7; адресация: косвенная регистровая; флаги: Z,S,P,СУ,АС.

2.2.12.  SBI байт (НЕПОСРЕДСТВЕННОЕ ВЫЧИТАНИЕ С ЗАЕМОМ)

(А) ← (А) – (Байт 2) – (СУ)

Содержимое второго байта команды и бита флага переноса СУ вычитается из содержимого аккумулятора. Результат помещается в аккумулятор.

SBI         байт    DE

Циклы: 1; состояния: 7; адресация: непосредственная; флаги: Z,S,P,СУ,АС.

2.2.13. IMR R (УВЕЛИЧЕНИЕ СОДЕРЖИМОГО РЕГИСТРА)

(R) ← (R) + 1

Содержимое регистра увеличивается на единицу. Команда влияет на состояние всех флагов, кроме флага переноса СУ.

INR        A         3C

INR        B         04

INR        C         0C

INR        D         14

INR        E          IC

INR        H         24

INR        L          2C

Циклы: 1; состояния: 4; адресация: регистровая; флаги: Z,S,P,СУ,АС.

2.2.13.    INR М (УВЕЛИЧЕНИЕ СОДЕРЖИМОГО ЯЧЕЙКИ ПАМЯТИ)

((Н) (L)) ← ((H) (L)) +1

Содержимое ячейки памяти, адрес которой содержится в регистрах Н и L, увеличивается на единицу. Команда воздействует на все флаги, кроме флага переноса СУ.

Циклы: 3; состояния; 10; адресация: косвенная регистровая; флаги: Z,S,P,СУ,АС.

2.2.14.    DCR R (УМЕНЬШЕНИЕ СОДЕРЖИМОГО РЕГИСТРА)

(R) ← (R) – 1

Содержимое регистра R уменьшается на единицу. Команда воздействует на все флаги, кроме флага переноса СУ.

DCR       A         3D

DCR       B         05

DCR       C         0D

DCR       D         15

DCR       E          ID

DCR       H         25

DCR       L          2D

Циклы: 1; состояния: 4; адресация: регистровая; флаги: Z,S,P,СУ,АС.

2.2.15. DCR М (УМЕНЬШЕНИЕ СОДЕРЖИМОГО ЯЧЕЙКИ ПАМЯТИ)

((H) (L)) ← ((H) (L)) – 1

Содержимое ячейки памяти, адрес которой содержится в регистрах Н и L , уменьшается на единицу. Команда воздействует на все флаги, кроме флага переноса СУ.

DCR       M        35

Циклы: 3; состояния: 10; адресация: косвенная регистровая; флаги: Z,S,P,СУ,АС.

2.2.16. INX RP (УВЕЛИЧЕНИЕ СОДЕРЖИМОГО ПАРЫ РЕГИСТРОВ)

(RH)(RL) ← (RH)(RL) + 1

Содержимое пары регистров RP увеличивается на единицу.

INX        B         03        (парa регистров B и C)

INX        D         13        (парa регистров D и E)

INX        H         23        (парa регистров H и L)

INX        SP       33        (указатель стека)

Циклы: 1; состояния: 6; адресация: регистровая; флаги: нет.

2.2.17. DCX RP (УМЕНЬШЕНИЕ СОДЕРЖИМОГО ПАРЫ РЕГИСТРОВ)

(RH)(RL) ← (RH)(RL) – 1

Содержимое пары регистров RP уменьшается на единицу. Команда не воздействует на флаги.

DCX      B         0B       (парa регистров B и C)

DCX      D         1B       (парa регистров D и E)

DCX      H         2B       (парa регистров H и L)

DCX      SP       3B       (указатель СТЕКА)

Циклы: I; состояния: 6; адресация: регистровая; флаги: нет.

2.2.18.DАD RP (СЛОЖЕНИЕ СОДЕРЖИМОГО ПАРЫ РЕГИСТРОВ С
СОДЕРЖИМЫМ РЕГИСТРОВ Н и L)

(H) (L) ← (H)(L) + (RH)(RL)

Содержимое пары регистров RP складывается о содержимым регистров Н и L. Результат помещается в пару регистров Н и L. Используется только флаг переноса СУ. Он устанавливается, если имеется перенос при сложении с двойной точностью, в противном случае он сбрасывается.

DAD      B         09        (парa регистров B и C)

DAD      D         19        (парa регистров D и E)

DAD      H         29        (парa регистров H и L)

DAD      SP       39        (указатель СТЕКА)

Циклы: 3; состояния:  10; адресация: регистровая; флаги: СУ.

2.2.19. DАА (ДЕСЯТИЧНОЕ ДОПОЛНЕНИЕ АККУМУЛЯТОРА)

8-битное число в аккумуляторе дополняется до представления в виде двух 4-битных чисел в двоично-десятичном коде с помощью следующих операций: если число, представленное четырьмя младшими битами аккумулятора, больше 8 или установлен флаг вспомогательного переноса АС, то к содержимому аккумулятора добавляется 6; если теперь число, представленное четырьмя старшими битами аккумулятора, больше 9 или установлен флаг переноса СУ,то число 6 добавляется к числу, образованному четырьмя старшими битами аккумулятора. Команда использует все флаги.

DAA      27

Циклы: 1; состояния: 4; флаги: Z,S,P,СУ,АС.

2.3. ЛОГИЧЕСКИЕ КОМАНДЫ

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

Если нет особых указаний, то все команды воздействуют на флаги: нуля, четности, знака, переноса и вспомогательного переноса в соответствии со стандартными правилами.

2.3.1. ANA   R   (ОПЕРАЦИЯ "И" НАД СОДЕРЖИМЫМ РЕГИСТРА И
АККУМУЛЯТОРА)

(А) ← (A) ٨ (R)

Над содержимым регистра R и аккумулятора выполняется операция логическое "И". Результат помещается в аккумулятор. Сбрасывается флаг переноса СУ, устанавливается флаг вспомогательного переноса АС.

ANA      A         A7

ANA      B         A0

ANA      C         AI

ANA      D         A2

ANA      E          A3

ANA      H         A4

ANA      L          A5

Циклы: 1; состояния: 4; адресация: регистровая; флаги: Z,S,P,СУ,АС.

2.3.2. ANA M (ОПЕРАЦИЯ "И" НАД СОДЕРЖИМЫМ ЯЧЕЙКИ ПАМЯТИ И
АККУМУЛЯТОРА)

(А) ← (A) ٨ ((H) (L))

Над содержимым ячейки памяти, адрес которой содержится в регистрах Н и L, и содержимым аккумулятора выполняется, логическая операция "И". Результат помещается в аккумулятор. Сбрасывается флаг переноса СУ и вспомогательного переноса АС.

ANA      M        A6

Циклы: 2; состояния: 7; адресация: косвенная регистровая; флаги: Z,S,P,СУ,АС.

2.3.3. AMI байт (НЕПОСРЕДСТВЕННАЯ ОПЕРАЦИЯ "И")

(А) ← (A) ٨ (байт 2)

Над содержимым второго байта команды и аккумулятора выполняется логическая операция "И". Результат помещается в аккумулятор. Сбрасываются флаги переноса СУ и вспомогательного переносаАС.           

ANI        байт    E6

Циклы: 2; состояния: 7; адресация: непосредственная; флаги: Z,S,P,СУ,АС.

2.3.4. XRA R (ОПЕРАЦИЯ "ИСКЛЮЧАЮЩЕЕ ИЛИ" НАД. СОДЕРЖИМЫМ АККУМУЛЯТОРА И РЕГИСТРА)

(А) ← (A)  (R)

Над содержимым региста R  и аккумулятора выполняется операция "исключающее или". Результат помещается в аккумулятор. Сбрасываются флаги переноса СУ и вспомогательного переноса АС.

XRA       A         AF

XRA       B         A8

XRA       C         A9

XRA       D         AA

XRA       E          AB

XRA       H         AC

XRA       L          AD

Циклы: 1; состояния: 4; адресация: регистровая; флаги: Z,S,P,СУ,АС.

2.3.5. XRA  M  (ОПЕРАЦИЯ "ИСКЛЮЧАЮЩЕЕ ИЛИ" НАД СОДЕРЖИМЫМ ЯЧЕЙКИ ПАМЯТИ И АККУМУЛЯТОРА)

((А) ← (A)  ((H) (L))

Над содержимым ячейки памяти, адрес который содержится в регистрах Н и L , и содержимым аккумулятора выполняется операция ''Исключающее ИЛИ". Результат помещается в аккумулятор. Сбрасываются флаги переноса СУ и вспомогательного переноса АС.

Циклы: 2; состояния: 7; адресация: косвенная регистровая; флаги: Z,S,P,СУ,АС.

2.3.6. XRI    байт (НЕПОСРЕДСТВЕННАЯ ОПЕРАЦИЯ "ИСКЛЮЧАЮЩЕЕ ИЛИ")

(А) ← (A)  (байт 2 )

Над содержимым аккумулятора и второго байта команды выполняется операция "исключающее ИЛИ". Результат помещается в аккумулятор. Сбрасываются флаги переноса СУ и вспомогательного переноса АС.

XRI        байт    EE

Циклы: 2; состояния: 7;    адресация: непосредственная; флаги: Z,S,P,СУ,АС.

2.3.7. ORA R   (ЛОГИЧЕСКОЕ СЛОЖЕНИЕ ("ИЛИ") АККУМУЛЯТОРА С СОДЕРЖИМЫМ РЕГИСТРА)

(А) ← (A) ٧ (R)

Содержимое регистра R логически складыаается с содержимым аккумулятора. Результат помещается в аккумулятор, сбрасываются флаги переноса СУ и вспомогательного АС.

ORA      A         B7

ORA      B         B0

ORA      C         BI

ORA      D         B2

ORA      E          B3

ORA      H         B4

ORA      L          B5

Циклы: 1; состояния: 4; адресация: регистровая; флаги: Z,S,P,СУ,АС.

2.3.8. ОRА   М    (ЛОГИЧЕСКОЕ СЛОЖЕНИЕ ("ИЛИ")СОДЕРЖИМОГО ЯЧЕЙКИ ПАМЯТИ И АККУМУЛЯТОРА)

(А) ← (A) ٧ ((H) (L))

Содержимое ячейки памяти, адрес которой определен в регистрах Н и L , логически складывается с содержимым аккумулятора. Результат помещается в аккумулятор, сбрасываются флаги переноса СУ и вспомогательного переноса АС.

ORA      M        B6

Циклы: 2; состояния: 7; адресация: косвенная регистровая; флаги: Z,S,P,СУ,АС.

2.3.9. ORI байт (НЕПОСРЕДСТВЕННОЕ ЛОГИЧЕСКОЕ СЛОЖЕНИЕ)

(А) ← (A) ٧ (байт 2)

Содержимое второго байта команды логически складывается непвсредственно с содержимым аккумулятора. Результат помещается в аккумулятор. Сбрасываются флаги переноса СУ и дополнительного переноса АС.

ORI        байт    F6

Циклы: 2; состояния: 7; адресация: непосредственная; флаги: Z,S,P,СУ,АС.

2.3.10.    СМР R (СРАВНЕНИЕ СОДЕРЖИМОГО РЕГИСТРА С СОДЕРЖИМЫМ
АККУМУЛЯТОРА)

(А) – (R)

Содержимое регистра вычитается из содержимого аккумулятора. Аккумулятор не изменяется. По результату вычитаний флаги устанавливаются следующим образом: флаг нуля Z в единицу, если (А) = (R) ; флаг переноса СУ - в единицу, если (A)<(R).

CMP      A         BА

CMP      B         B8

CMP      C         B9

CMP      D         BА

CMP      E          BB

CMP      H         BC

CMP      L          BD

Циклы: 1; состояния: 4; адресация: регистровая; флаги: Z,S,P,СУ,АС.

2.3.11.    СМР М (СРАВНЕНИЕ СОДЕРЖИМОГО ЯЧЕЙКИ ПАМЯТИ С
СОДЕРЖИМЫМ АККУМУЛЯТОРА)

(А) – ((H) (L))

Содержимое ячейки памяти, адрес которой определен в регистрах Н и L,  вычитается из содержимого аккумулятора. Аккумулятор не изменяется. Флаги устанавливаются по результату вычитания следующим образом: флаг нуля Z - в единицу, если (А) = ((H) (L)); флаг переноса СУ - в единицу, если (А)<((Н) (L))

CMP      M        BE

Циклы: 2; состояния: 7; адресация: косвенная регистровая; флаги: Z,S,P,СУ,АС.

2.3.12.    CРI    байт (НЕПОСРЕДСТВЕННОЕ СРАВНЕНИЕ)

(А) – (байт 2)

Содержимое второго байта команды вычитается из содержимого аккумулятора. По результату вычитания флаги устанавливаются следующим образом: флаг нуля Z - в единицу, если (А) = (байт 2); флаг переноса СУ - в единицу, если (А)<(байт 2)

Циклы: 2; состояния: 7; адресация: непосредственная; флаги: Z,S,P,СУ,АС.

2.3.13. RLC (ЦИКЛИЧЕСКИЙ СДВИГ ВЛЕВО)

n+1) ← (Аn), (А0) ← (А7), (СУ) ← (А7)

Содержимое аккумулятора сдвигается влево на одну позицию. Содержимое самого старшего бита заносится в младший бит и бит флага переноса. Команда воздействует только на флаг переноса СУ.

Циклы: 1; состояния: 4, флаги: СУ.

2.3.14. RRС (ЦИКЛИЧЕСКИЙ СДВИГ ВПРАВО)

n) ← (Аn+1), (А7) ← (А0), (А7) ← (СУ)

Содержание аккумулятора сдвигается на одну позицию вправо. Содержание младшего бита заносится в самый старший бит и бит флага переноса. Команда воздействует только на флаг переноса.

RRС       DF

Циклы: 1; состояния: 4; флаги: СУ.

2.3.15. RAL (СДВИГ ВЛЕВО ЧЕРЕЗ ПЕРЕНОС)

n+1) ← (Аn), (СУ) ← (А7), (А0) ← (А7)

Содержимое аккумулятора сдвигается на одну позицию влево через бит флага переноса СУ. Младший бит устанавливается равным флагу переноса, а бит флага переноса СУ - равным величине старшего бита аккумулятора. Команда воздействует только на флаг переноса СУ.

RAL       17

Циклы:  1; состояния: 4; флаги: СУ.

2.3.16. RAR (СДВИГ ВПРАВО ЧЕРЕЗ ПЕРЕНОС)

((Аn) ← (Аn+1), (СУ) ← (А0), (А7) ← (СУ)

Содержимое аккумулятора сдвигается на одну позицию вправо через бит флага переноса. Старший бит аккумулятора устанавливается равным флагу переноса, флаг переноса устанавливается равным младшему биту аккумулятора. Используется только флаг переноса.

RAR       1F

Циклы: I; состояния: 4; флаги: СУ.

2.3.17. СМА (ДОПОЛНЕНИЕ АККУМУЛЯТОРА)

(А) ← ()

Содержимое аккумулятора инвертируется, т.е. бит, равный единице, становится равным нулю; бит, равный нулю, становится равным единице. Флаги не используются.

Циклы: 1; состояния: 4; флаги: нет.

2.3.18.    CMC (ДОПОЛНЕНИЕ ФЛАГА ПЕРЕНОСА)

(СУ) ← ()

Инвертируется бит флага переноса СУ. Другие флаги не используются.

CMC      3F

Циклы: 1; состояния: 4; флаги: СУ.

2.3.19.     SТС    (УСТАНОВКА ФЛАГА ПЕРЕНОСА)

(СУ) ← I

Бит флага переноса устанавливается в единицу. Другие флаги не используются.

STC       37

Циклы: 1; состояния: 4; флаги: СУ.

2.4. КОМАНДЫ ПЕРЕХОДА

Команды этой группы изменяют нормальное последовательное исполнение программы. Исполнение команд не влияет на состояние флагов.

Имеется два типа команд перехода: безусловные и условные. Команды безусловного перехода осуществляют передачу управления, изменяя значение программного счетчика PC. Команды условного перехода сначала проверяют состояние одного из четырех флагов процессора, чтобы определить, выполнено ли указанное в команде условие. Существующие условия перехода представлены в табл.2.4.1

Таблица 2.4.1

Коды условий перехода

Условие

Код

NZ – не ноль (Z=0)

000

Z – ноль (Z=1)

001

NC – нет переноса (СУ=0)

010

C – есть перенос (СУ=1)

011

PO – нечетный результат (Р=0)

100

PE – четный результат (Р=1)

101

P – плюс (S=0)

110

M – минус (S=1)

111

2.4.1.   JMP (адрес)  (ПЕРЕХОД)

(РС) ← (байт 3)  (байт 2)

Управление передается команде, адрес которой указан во втором и третьем байтах команды перехода.

JMP       (адрес)            C3

Циклы:  3;  состояния:  10;  адресация: непосредственная; флаги: нет.

2.4.2.   J     (УСЛОВИЕ)   (адрес)   (УСЛОВНЫЙ ПЕРЕХОД)

Если (ССС), то  (PC← (байт 3)  (байт 2)

Если указанное условие истинно, то управление передается команде, адрес которой указан во втором и третьем байтет команды перехода.  Если условие ложное, то последовательный ход программы не изменяется.

JNZ        (адрес)            C2

JZ           (адрес)            CA

JNC       (адрес)            D2

JC          (адрес)            DA

JPO        (адрес)            E3

JPE         (адрес)            EA

JP           (адрес)            F2

JM          (адрес)            FA

Циклы: 3; состояния:  10; адресация: непосредственная; флаги: нет,

2.4.3.  CALL        (адрес) (ВЫЗОВ)

((SР) – 1) ← (PCH)

((SР) – 2) ← (PCL)

(SР) ← (SP) - 2

(РС) ← (байт 3)  (байт 2)

Старшие 6 бит адреса следующей команды пересылаются в ячейку памяти, адрес которой на единицу меньше содержимого указателя СТЕКА SP. Младшие 8 бит адреса следующей команды пересылаются в ячейку памяти, адрес которой на два меньше величины указателя стека SP. Содержимое указателя СТЕКА уменьшается на два. Управление передается команде, адрес которой указан во втором и третьем байтах команды вызова.

CALL        (адрес)        CD

Циклы: 5; состояния: 18; адресация: непосредственная /косвенная регистровая; флаги: нет.

2.4.4. С   (УСЛОВИЕ) (адрес) (УСЛОВНЫЙ ВЫЗОВ)
Если (ССС), то ((SР) – 1) ← (PCH),

((SР) – 2) ← (PCL), (SР) ← ((SP) – 2),

(РС) ← (байт 3)  (байт 2)

Если указанное условие истинно, то выполняются действия, описанные в команде CALL, в противном случае последовательность исполнения команд не изменяется.

CNZ       (адрес)            C4

CZ          (адрес)            CC

CNC      (адрес)            D4

CC         (адрес)            DC

CPO       (адрес)            E4

CPE       (адрес)            EC

CP          (адрес)            F4

CM        (адрес)            FC

Циклы: 5; состояния: 18; адресация: непосредственная /косвенная регистровая; флаги: нет.

2.4.5. RET (ВОЗВРАТ)

(PCL) ← ((SP)),      (PCH) ← ((SP)+ 1),

(SР) ← ((SP) + 2)

Содержимое ячейки памяти, адрес которой находится в указателе СТЕКА SP, пересылается в 8 младших бит программного счетчика PC. Содержимое ячейки памяти, адрес которой на единицу больше содержимого указателя СТЕКА, пересылается в 8 старших бит программного счетчика. Содержимое указателя СТЕКА увеличивается на два.

RET        C9

Циклы: 3; состояния: 10; адресация: косвенная регистровая; флаги: нет.

2.4.6. R   условие (УСЛОВНЫЙ ВОЗВРАТ)

Если (ССС), то (PCL) ← ((SP)),     

(PCH) ← ((SP)+ 1),     (SР) ← (SP) + 2

Если указанное условие истинно, то выполняются действия, описанные в команде  RЕT, в противном случае последовательность команд нарушается.

RNZ       (адрес)            C0

RZ          (адрес)            C8

RNC      (адрес)            D0

RC         (адрес)            D8

RPO       (адрес)            E0

RPE        (адрес)            E8

RP          (адрес)            F0

RM         (адрес)            F8

Циклы: 3; состояния: 12; адресация: косвенная регистровая; флаги: нет.

2.4.7.     RST n (РЕСТАРТ)

((SР) – 1) ← (PCH),

((SР) – 2) ← (PCL),

(SР) ← ((SP) – 2),

(РС) ← 8* (NNN)

Старшие 8 бит адреса следующей команды пересылаются в ячейку памяти, адрес которой на единицу меньше содержимого указателя СТЕКА. Младшие 8 бит адреса следующей команды пересылаются в ячейку памяти, адрес которой на два меньше содержимого указателя СТЕКА. Содержимое указателя СТЕКА уменьшается на два. Управление передается команде, адрес которой равен коду умноженному на 8.

RST        0          C7

RST        1          CF

RST        2          D7

RST        3          DF

RST        4          E7

RST        5          EF

RST        6          F7

RST        7          FF

Циклы: 3; состояния: 12; адресация: косвенная регистровая; флаги: нет.

2.4.8. PCHL   (ЗАГРУЗКА СОДЕРЖИМОГО РЕГИСТРОВ H и L В ПРОГРАММНЫЙ СЧЕТЧИК)

(РСН) ← (Н), (PCL) ← (L).

Содержимое регистра Н пересылается в 8 старших бит программного счетчика PC. Содержимое регистра  L   пересылается в 8 младших бит программного счетчика.

PCHL                E9

Циклы: 1; состояния: 6; адресация: регистровая; флаги:нет.

2.5. КОМАНДЫ УПРАВЛЕНИЯ

Команды этой группы выполняют операции ввода (вывода), изменяют содержимое СТЕКА и состояние флагов.

Регистр флагов

Примечание: Х – не обращать внимания.

2.5.1. PUSH   RP (ЗАСЫЛКА В СТЁК СОДЕРЖИМОГО ПАРЫ РЕГИСТРОВ)

((SР) – 1) ← (RH),

((SР) – 2) ← (RL),

(SР) ← ((SP) – 2)

Содержимое старшего регистра пары регистров пересылается в ячейку памяти, адрес которой на единицу меньше содержимого указателя СТЕКА SP. Содержимое младшего регистра пары регистров RP пересылается в ячейку памяти, адрес которой на два меньше содержимого указателя СТЕКА. Содержимое указателя СТЕКА уменьшается на два. Пара регистров RP=SP не может быть указана в команде.

PUSH     B         C5       (заслать пару регистров B и C)

PUSH     D         D5       (заслать пару регистров D и E)

PUSH     H         E5        (заслать пару регистров H и L)

Циклы: 3; состояния: 12; адресация: косвенная регистровая; флаги: нет.

2.5.2. PUSH    PSW    (ЗАСЛАТЬ В СТЕК СЛОВО СОСТОЯНИЯ ПРОГРАММЫ)

((SР) – 1) ← (А),

((SР) – 2)0 ← (СУ),   ((SР) – 2)1 ← Х,

((SР) – 2)2 ← (Р),   ((SР) – 2)3 ← Х,

((SР) – 2)4 ← (АС),   ((SР) – 2)5 ← Х,

((SР) – 2)6 ← (Z),   ((SР) – 2)7 S,

(SР) ← ((SP) – 2)

Примечание: Х – безразлично

Содержимое аккумулятора пересылается в ячейку памяти, адрес которой но единицу меньше содержимого указателя СТЕКА SP. Содержимое флагов объединяется в слово состояния,  и это слово пересылается в ячейку памяти,  адрес которой на два меньше содержимого указателя СТЕКА. Содержимое указателя СТЕКА уменьшается на два.     

PUSH     PSW    F5

Циклы: 3; состояния: 12; адресация: косвенная регистровая; флаги: нет.

2.5.3. POP RP (СЧИТАТЬ ИЗ СТЕКА СОДЕРЖИМОЕ ПАРЫ РЕГИСТРОВ)

(RL) ← ((SP)),     

(RH) ← ((SP)+ 1),

(SР) ← (SP) + 2

Содержимое ячейки памяти, адрес которой определяется содержимым указателя СТЕКА SP, пересылается в младший регистр из пары регистров RP. Содержимое ячейки памяти, адрес которой на единицу больше содержимого указателя СТЕКА, пересылается в старший регистр пары регистров RP. Содержимое указателя СТЕКА увеличивается на два. Причем, в команде не может быть указана пара регистров RP=SP.

POP       B         CI        (считать из СТЕКА пару регистров B и C)

POP       D         DI        (считать из СТЕКА пару регистров D и E)

POP       H         EI        (считать из СТЕКА пару регистров H и L)

Циклы: 3; состояния: 10; адресация: косвенная регистровая; флаги: нет.

2.5.4. POP    PSW (СЧИТАТЬ ИЗ СТЕКА СЛОВО СОСТОЯНИЯ ПРОГРАММЫ)

(СУ) ← ((SP))0,

(P) ← ((SP))2,

(AC) ← ((SP))4,

(Z) ← ((SP))6,

(S) ← ((SP))7,

(A) ← ((SP) + 1)

(SР) ← ((SP) + 2)

Содержимое ячейки памяти, адрес которой определяется содержимым указателя СТЕКА SP, используется для восстановления состояния флагов. Содержимое ячейки памяти, адрес которой на единицу больше содержимого указателя СТЕКА, переключается в аккумулятор. Содержимое указателя СТЕКА увеличивается на два.

POP       PSW    F1

Циклы: 3; состояния: 10; адресация: косвенная регистровая; флаги: Z,S,P,СУ,АС.

2.5.5. XTHL     (ОБМЕН СОДЕРЖИМОГО ВЕРХУШКИ СТЕКА И СОДЕРЖИМОГО РЕГИСТРОВ Н и L)

(L) ↔ ((SP))

(H) ↔ ((SP)+1)

Содержимое регистра L обменивается на содержимое ячейки памяти, адрес которой содержится в указателе СТЕКА  SР. Содержимое регистра Н обменивается иа содержимое ячейки памяти, адрес которой на единицу больше содержимого указателя СТЕКА.

XTHL     E3

Циклы: 5; состояния: 16; адресация: косвенная регистровая; флаги: нет.

2.5.6. SPHL  (ПЕРЕСЫЛКА СОДЕРЖИМОГО РЕГИСТРОВ H и L    В УКАЗАТЕЛЬ СТЕКА)

(SР) ← (H) (L)

Содержимое регистров H и L (16 бит) пересылается в указатель СТЕКА.

SPHL     F9

Циклы: 1; состояния: 6; адресация: регистровая; флаги: нет.

2.5.7. IN     порт     (ВВОД)

(А) ← (Данные)

Данные, имеющиеся на восьми битах двунаправленной шины данных указанного порта, пересылаются в аккумулятор.

IN          порт                ДВ

Циклы: 3; состояния: 10; адресация: прямая; флаги: нет.

2.5.8. OUT     порт     (ВВОД)

(Данные) ← (А)

Содержимое аккумулятора посылается на двунаправленную шину данных для передачи в указанный порт.

OUT       порт                D3

Циклы: 3; состояния: 10; адресация: прямая; флаги: нет.

2.5.9.   EI   (РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ)

Система прерываний разрешается при исполнении следующей команды. Прерывания не распознаются вo время исполнения команды EI.

EI           FB

Циклы: 1; состояния: 4; флаги: нет.

2.5.10.    DI    (ЗАПРЕЩЕНИЕ ПРЕРЫВАНИЙ)

Система прерываний запрещается непосредственно при выполнении следующей за DI командой. Прерывания не распознаются во время исполнения команды DI.

DI           FB

Циклы: 1; состояния: 4; флаги: нет.

2.5.11.    HLT    (ОСТАНОВ)

В программный счетчик PC заносится адрес следующей команды. Процессор затем бездействует до прихода прерывания. Регистры и флаги не изменяют свои состояния.

Циклы: 1; состояния: 5; флаги: нет.

2.5.12.  NOP  (НЕТ ОПЕРАЦИИ)

В программный счетчик PC заносится адрес следующей команды, и МП переходит к ее обработке. Состояние флагов и регистров не изменяется.

Циклы: 1; состояния: 4; флаги: нет.

Приложение 2.

Листинг программы “Бегущие огни”

адрес

КОП

метка

мнемокод

опером

комментарии

8000

3E

 

MVI A

8I

Запись в А данных для профилирования интерфейса

8001

8I

     

8002

D3

 

OUT

FB

Программирование интерфейса

8003

FB

     

8004

3E

 

MVIA

80

Загрузка А

8005

80

     

8016=1000 00002

8006

16

LOAD:

MVID

40

Загрузка регистров D и E для организации задержки

40 → D; FF E

8007

40

     

8008

IE

 

MVIE

FF

 

8009

FF

       

800A

D3

LOOP:

OUT

F9

Ввод данных в индикаторы

800B

F9

     

800C

1D

 

DCRE

 

E-1 E

800D

C2

 

JNZ

LOOP

Если Е≠0, то переход на LOOP (петля задержки)

800E

0A

     

800F

80

     

8010

15

 

DCRD

 

D-1 D

8011

C2

 

JNZ

LOOP

Если D≠0, то переход на LOOP (петля задержки)

8012

0A

     

8013

80

     

8014

0F

 

RRC

 

Сдвиг вправо данных А

8015

C3

 

JMP

LOOP

Повторение цикла

8016

06

       

8017

80