
- •Приемы программирования микропроцессора на языке ассемблер
- •Введение
- •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. Задания для самостоятельной работы
- •Рекомендуемая литература
- •Оглавление
4. Программирование циклических вычислительных процессов
4.1. Программирование участков алгоритма, содержащих циклы
Пример 4.1. Сложить два трехбайтных числа, каждое из которых занимает в ОЗУ три ячейки памяти с последовательно нарастающими адресами. Адреса младших байтов первого и второго чисел хранятся соответственно в регистровых парах ВС и НL. Результат поместить на место второго слагаемого.
Принцип сложения многобайтных чисел состоит в том, что сначала в МП вызываются младшие байты слагаемых. Байты суммируются, результат суммирования помещается в память на место младшего байта второго слагаемого, возникающий в процессе суммирования перенос из старшего разряда D7 запоминается в триггере Тс регистра признаков. Затем в парах регистров ВС и НL формируется адрес вторых байтов слагаемых, которые затем вызываются в МП и суммируются вместе с хранящимся в триггере Тс переносом, возникшим при сложении первых байтов и т. д. Выполнение процесса завершится после трехкратного повторения указанных действий. Таким образом, этот процесс носит циклический характер: цикл, содержащий операции пересылки, сложения, формирования очередного адреса, должен быть повторен три раза.
Для счета числа повторений цикла организуем счетчик на регистре D. В этот регистр предварительно занесем число 3 и после каждого повторения цикла будем вычитать единицу из содержимого регистра D, проверяя затем, равно ли нулю его содержимое. При достижении нулевого значения производится выход из цикла.
На рис. 4.1 приведена блок-схема алгоритма решения данной задачи. Рассмотрим операции, выполняемые в каждом из блоков.
Блок 1 обнуляет триггер переноса Тс, т.к. он мог находится в состоянии '''1' после выполнения предыдущих операций. Для этой цели можно использовать любую команду логических операций, например, логическое умножение аккумулятора самого на себя; мнемоника команды АNA A.
Блок 2 производит загрузку числа 3 в регистр D (в счетчик циклов); мнемоника команды MVI D, 0ЗН.
Блок 3 производит пересылку младшего байта (при первом проходе цикла) первого числа из ячейки ОЗУ в аккумулятор. Эта операция выполняется командой, использующей косвенную адресацию; мнемоника команды LDAX В.
Блок 4 производит суммирование младших байтов двух чисел с учетом триггера переноса Тс при первом проходе цикла, вторых байтов при втором проходе и третьих байтов при третьем; мнемоника команды ADC M.
Блок 5 производит пересылку результата суммирования двух байтов на место второго слагаемого; мнемоника команды MOV M, А.
Блок 6 производит вычитание единицы из содержимого счетчика (регистра D).
Блок 7 реализует разветвление по содержимому триггера ТZ; в зависимости от значения содержимого этого триггера выполняется либо блок 8, либо осуществляется выход из цикла; мнемоника команды JZ M1.
Блок 8 формирует в паре регистров ВС адрес следующего байта первого числа; эта операция выполняется командой приращения пары регистров INX B.
Блок 9 формирует в паре регистров HL адрес следующего байта второго числа; эта операция выполняется командой приращения пары регистров INX H.
В табл. 4.1 приведена программа рассматриваемой задачи на языке Ассемблер и в машинных кодах. Размещение команд производилось с ячейки ОЗУ, имеющей адрес 0800Н.
Рис. 4.1. Блок-схема алгоритма сложения двух трехбайтных чисел
Таблица 4.1
Программа сложения двух трехбайтных чисел
Адрес Н-код |
Метка |
Мнемоника |
Операнд |
Машинный код |
Комментарий |
0800 |
|
ANA |
A |
A7 |
Установ. Тс в "0" |
0801 |
|
MVI |
D, 03Н |
16 03 |
Блок 2 |
0803 |
МЕТ 1 |
LDAX |
B |
0A |
Блок 3 |
0804 |
|
ADC |
M |
8E |
Блок 4 |
0805 |
|
MOV |
M,А |
77 |
Блок 5 |
0806 |
|
DCR |
D |
15 |
Блок 6 |
0807 |
|
JZ |
МЕТ 2 |
СА 0F 08 |
Блок 7 |
080А |
|
INX |
B |
03 |
Блок 8 |
080В |
|
INX |
Н |
23 |
Блок 9 |
080С |
|
JMP |
МЕТ 1 |
C30308 |
Безусловный переход |
080F |
МЕТ 2 |
RST |
7 |
FF |
Переход к программе монитор |