|
Процедура преобразования исходного массива 16ричных констант в их 2-10 коды.
Распределение памяти:
Адрес
| Данные
| Ассемблерный код
| Комментарий
|
|
| LXI H,5000
| Загрузка в <H,L> адреса, начиная с которого будет считан массив исходных констант.
|
|
| LXI D,6000
| Загрузка в <D,E> адреса, начиная с которого будут записаны 2-10 коды.
|
400A
400B
|
0A
| LXI B,000A
| Создание в регистре C счётчика цикла преобразования.
| 400C
| C5
| PUSH B
| Сохранение в стек счётчика цикла.
| 400D
| 7E
| MOV A,M
| Загрузка константы из памяти.
| 400E
400F
| 0E
| MVI C,00
| Обнуление регистра C.
|
| C3
2C
| JMP 402C
| Переход к подпрограмме последовательного вычитания из аккумулятора числа 64 для получения старшего байта 2-10 кода.
|
| CE
| ACI 64
| Сложение аккумулятора с 64 для восстановления значения до лишнего вычитания.
|
|
| MOV B,A
| Сохранение аккумулятора в регистр B.
|
| 3E
| MVI A,00
| Обнуление аккумулятора.
|
401A
| C3
| JMP 4035
| Переход к подпрограмме последовательного «переписывания» в аккумулятор содержимого <B> с 2-10 коррекцией для получения младш. байта.
| 401B
|
| STAX D
| Сохранение младшего байта 2-10 числа в память.
| 401C
|
| MOV A,C
| Загрузка в <A> из <C> старшего байта 2-10 кода.
| 401D
|
| INX D
| Переход к следующему адресу записи.
| 401E
|
| STAX D
| Сохранение старшего байта 2-10 числа.
| 401F
|
| INX D
| Переход к следующему адресу записи.
|
| C1
| POP B
| Восстановление из стека счётчика цикла.
|
|
| MOV A,C
| Копирование <C> в <A>.
|
| 3D
| DCR A
| Уменьшение счётчика на 1.
|
| CA
3E
| JZ 403E
| Если счётчик достиг нуля, то необходимо выйти из процедуры 2-10 преобразования по флагу Z.
|
| 4F
| MOV C,A
| Иначе <A> копируем в <C>.
|
| C5
| PUSH B
| И сохраняем в стек уменьшенный счётчик.
|
|
| INX H
| Переход к следующему адресу чтения.
|
402A
402B
| C3
0D
| JMP 400D
| Возврат к началу подпрограммы.
| 402C
402D
| D6
| SUI 64
| Начало подпрограммы вычитания из <A> 64 для получения старшего байта 2-10 числа.
| 402E
402F
| DA
| JC 4013
| Если произошёл перенос, то есть число в аккумуляторе уже меньше 64, то возвращаемся к основной процедуре по флагу CY.
|
| 0C
| INR C
| Увеличиваем число, означающее старший байт.
|
| C3
2C
| JMP 402C
| Возврат к началу подпрограммы.
|
|
| DCR B
| Начало подпрограммы получения мл.ч. <B>-1
|
| CA
1B
| JZ 401B
| По флагу Z возврат к основной процедуре. Нулевой результат означает, что весь остаток исх. константы переписан в аккумулятор в 2-10 виде.
|
| 3C
| INR A
| Увеличиваем аккумулятор на 1.
| 403A
|
| DAA
| 2-10 коррекция аккумулятора.
| 403B
403C
403D
| C3
| JMP 4035
| Возврат к началу подпрограммы.
| 403E
403F
| C3
| JMP 4100
| Выход из текущей процедуры. Переход к следующей процедуре (преобразования 2-10 кодов в коды KOИ-7).
|
Процедура преобразования 2-10 кодов в коды КОИ-7.
Распределение памяти:
- Счётчик цикла.
- Адрес текущего записываемого кода КОИ-7.
- Адрес текущего читаемого из памяти 2-10 числа.
Адрес
| Данные
| Ассемблерный код
| Комментарий
|
|
| LXI H,6000
| Загрузка в пару <H,L> адреса, начиная с которого будет произведено чтение 2-10 кодов.
|
|
0A
| LXI B,000A
| Создание в <C> счётчика цикла чтения-преобразования-записи.
|
|
| LXI D,7000
| Загрузка в пару <D,E> адреса, начиная с которого будет произведена запись кодов КОИ-7.
|
| 7E
| MOV A,M
| Чтение из памяти младшего байта 2-10 числа.
| 410A
410B
| E6
F0
| ANI F0
| Выделение из младшей части числа только десятков. (лог. умнож. на число F0)
| 410C
| 1F
| RAR
| 4-х кратный сдвиг аккумулятора вправо.
Для того, чтобы десятки 2-10 числа оказались справа от нуля.
| 410D
| 1F
| RAR
| 410E
| 1F
| RAR
| 410F
| 1F
| RAR
|
| F6
| ORI 30
| Сложение аккумулятора с 30кой, чтобы получить код КОИ-7.
|
|
| INX D
| Переход к следующему адресу записи.
|
|
| STAX D
| Запись кода КОИ-7 десятков 2-10 числа.
|
|
| INX D
| Переход к следующему адресу записи.
|
| 7E
| MOV A,M
| Чтение младшего байта 2-10 числа.
|
| E6
0F
| ANI 0F
| Выделение из младшей части только единиц. (логич. умножение на число 0F)
|
| F6
| ORI 30
| Сложение аккумулятора с 30кой для получения кода КОИ-7 единиц 2-10 числа.
| 411A
|
| STAX D
| Запись кода КОИ-7 единиц 2-10 числа в память.
| 411B
| 1B
| DCX D
| Переход к предыдущему адресу записи.
| 411C
| 1B
| DCX D
| Переход к предыдущему адресу записи.
| 411D
|
| INX H
| Переход к следующему адресу чтения.
| 411E
| 7E
| MOV A,M
| Чтение в <A> старшего байта 2-10 числа.
| 411F
| F6
| ORI 30
| Сложение <A> с 30кой для получения кода КОИ-7 сотен 2-10 числа.
|
|
| STAX D
| Запись КОИ-7 кода сотен 2-10 числа в память.
|
| 0D
| DCR C
| Уменьшение счётчика цикла.
|
| CA
| JZ 4130
| При нулевом значении счётчика цикла, необходимо прекратить выполнение текущей процедуры.
|
|
| INX H
| Переход к следующему адресу чтения.
|
|
| INX D
| Переход к следующему адресу записи.
|
|
| INX D
| Переход к следующему адресу записи.
|
|
| INX D
| Переход к следующему адресу записи.
| 412A
412B
412C
| C3
| JMP 4109
| Переход к началу процедуры преобразования 2-10 чисел в коды КОИ-7.
|
Выход из процедуры КОИ-7 преобразования.
Адрес
| Данные
| Ассемблерный код
| Комментарий
|
| C3
| JMP 4200
| Переход к началу процедуры вывода результатов 2-10 преобразования на экран.
|
Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|