Пример 2.1. Требуется принять из ОЗУ два числа, хранящихся в соседних ячейках, и, вычислив разность чисел, поместить ее в ОЗУ в третью ячейку. Адрес первого числа хранить в паре регистров НL, адрес второго числа на единицу больше содержимого этих регистров.
Для решения данной задачи примем, что адрес первого числа 0900Н, тогда второе число будет храниться по адресу 0901Н, а результат необходимо будет поместить по адресу 0902H (для решения данной задачи на УМК-80 можно задаться любыми адресами ОЗУ в диапазоне 0800 ¸0ВFF).
На рис. 2.1 приведена блок-схема алгоритма решения данной задачи, построенная из операций, выполняемых МП серии КР580. Рассмотрим операции, выполняемые в каждом из блоков схемы-алгоритма.
Блок 1 производит запись в регистровую пару НL адреса первого числа 0900Н (мнемоническое обозначение команды LXI H, 0900Н).
Блок 2 производит прием в аккумулятор содержимого ячейки, ОЗУ (М), адресом которой служит содержимое пары регистров HL. Таким образом, в регистр А принимается первое из чисел; эта операция может быть выполнена командой пересылки регистр-регистр (мнемоническое обозначение команды МОV А, М).
Блок 3 формирует в паре регистров НL адрес второго числа (0901H); эта операция выполняется командой приращения пары регистров (мнемоника команды INX H).
0900H ® HL
(M) ® A
(HL) + 1 ® HL
(A) – (M) ® A
(HL) + 1 ® HL
(A) ® M
Рис.2.1. Блок-схема алгоритма вычитания чисел, хранящихся в памяти
Блок 4 производит вычисление разности содержимого аккумулятора (А) и содержимого ячейки ОЗУ (М), адресом которой служит содержимое пары регистров HL; операция выполняется командой вычитания SUB M.
Блок 5 формирует в паре регистров адрес ОЗУ (0902Н), куда необходимо поместить результат; эта операция выполняется командой приращения пары регистров INX H.
Блок 6 пересылает в память (по адресу 0902Н) полученную в аккумуляторе разность; выполняющая эту операцию команда имеет мнемонику МОV M, А.
В табл. 2.1 приведена программа рассматриваемой задачи на языке Ассемблер и в машинных кодах.
Команды программы при отсутствии условных и безусловных переходов размещаются в ячейках памяти с последовательно нарастающими адресами. При написании данной программы размещение команд произведено, начиная с ячейки, имеющей адрес 0800Н. Для того чтобы после выполнения данной программы на УМК-80 управление было передано системной программе Монитор, в конце программы добавлена команда RST 7.
Таблица 2.1
Программа вычитания чисел
Адрес Н-код
Метка
Мнемоника
Операнд
Машинный код
Комментарий
LXI
H, 0900Н
21 00 09
Блок 1
MOV
А, М
7Е
Блок 2
INX
H
Блок 3
SUB
М
Блок 4
INX
H
Блок 5
MOV
М, А
Блок 6
RST
FF
Переход к программе Монитор
Пример 2.2. Требуется сложить два числа 6 и 10 и их сумму поместить в регистр D. Перед сложением числа должны храниться соответственно в регистрах В и С.
Для решения данной задачи память необходима только для размещения кодов команд, данные и результаты счета будут храниться в регистрах МП.
На рис.2.2 приведена блок-схема алгоритма решения данной задачи. Рассмотрим операции, выполненные в каждом из блоков.
Блок 1 загружает непосредственно в регистр В число 6; эта операция выполняется командой пересылки МVI B, 06Н.
Блок 2 загружает непосредственно в регистр С число 10; эта операция выполняется командой пересылки МVI C, 0АН (0А – Н-код числа 10).
Блок 3 производит пересылку первого числа из регистра В в аккумулятор (А), т.к. при выполнении арифметических и логических операций один из операндов обязательно должен находиться в аккумуляторе (исключение – команда DAD); эта операция выполняется командой пересылки МОV А, В.
6 ® B
10 ® C
(B) ® A
(A) + (C) ® A
(A) ® D
Рис. 2.2 Блок-схема алгоритма сложения двух чисел 6 и 10
Блок 4 производит вычисление суммы содержимого аккумулятора (А) регистра С, т.е. первого и второго чисел; мнемоника команды ADD C.
Блок 5 производит пересылку суммы двух чисел из аккумулятора (А) в регистр D; мнемоника команды MOV D, А.
В табл. 2.2 приведена программа рассматриваемой задачи на языке Ассемблер и в машинных кодах. Размещение команд произведено с ячейки ОЗУ, имеющей адрес 0800Н.