- •Приемы программирования микропроцессора на языке ассемблер
- •Введение
- •1. Краткие сведения из теории
- •2. Программирование последовательных
- •2.1. Программирование участков алгоритма, не содержащих
- •2.2. Задание для самостоятельной работы
- •3.Программирование разветвлений
- •3.1. Краткие сведения из теории
- •3.2. Разветвляющиеся программы
- •3.3. Задание для самостоятельной работы
- •4. Программирование циклических вычислительных процессов
- •4.1. Программирование участков алгоритма, содержащих циклы
- •4.2. Задание для самостоятельной работы
- •5. Реализация заданных временных интервалов программным способом
- •5.1. Краткие сведения из теории
- •5.2. Программы временных задержек
- •5.3. Задания для самостоятельной работы
- •Рекомендуемая литература
- •Оглавление
2. Программирование последовательных
УЧАСТКОВ АЛГОРИТМА
2.1. Программирование участков алгоритма, не содержащих
разветвлений
Пример 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
Программа вычитания чисел
Адрес Н-код |
Метка |
Мнемоника |
Операнд |
Машинный код |
Комментарий |
0800 |
|
LXI |
H, 0900Н |
21 00 09 |
Блок 1 |
0803 |
|
MOV |
А, М |
7Е |
Блок 2 |
0804 |
|
INX |
H |
23 |
Блок 3 |
0805 |
|
SUB |
М |
96 |
Блок 4 |
0806 |
|
INX |
H |
23 |
Блок 5 |
0807 |
|
MOV |
М, А |
77 |
Блок 6 |
0808 |
|
RST |
7 |
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Н.
Таблица 2.2
Программа сложения двух чисел 6 и 10
Адрес Н-код |
Метка |
Мнемоника |
Операнд |
Машинный код |
Комментарий |
0800 |
|
MVI |
В, 06Н |
06 06 |
Блок 1 |
0802 |
|
MVI |
C, 0АН |
0Е 0А |
Блок 2 |
0804 |
|
MOV |
А, В |
78 |
Блок 3 |
0805 |
|
ADD |
С |
81 |
Блок 4 |
0806 |
|
MOV |
D, А |
57 |
Блок 5 |
0807 |
|
RST |
7 |
FF |
Переход к программе Монитор |
