- •Учебная дисциплина: "Организация эвм и систем"
- •Реферативный материал. Двоично-десятичная система счисления.
- •Преобразование двоичных чисел в двоично-десятичные.
- •Форматы представления десятичных чисел
- •Ascii-коды десятичных цифр
- •Операции двоично-десятичной арифметики
- •Сложение
- •Вычитание
- •Описание программы-эмулятора.
- •Авторское описание эмулятора
- •Обоснование выбора
- •Практическая часть. Алгоритм решения задачи
- •Полный листинг программы с комментариями. Процедура записи в память служебных фраз.
- •Вход в главную часть программы.
- •Процедура ввода исходных данных.
- •Процедура преобразования исходного массива 16ричных констант в их 2-10 коды.
- •Процедура преобразования 2-10 кодов в коды кои-7.
- •Выход из процедуры кои-7 преобразования.
- •Процедура вывода на экран результатов 2-10 преобразования.
- •Процедура вывода на экран результатов преобразования в коды кои-7.
- •Выводы.
- •Список использованных источников.
Процедура преобразования исходного массива 16ричных констант в их 2-10 коды.
Распределение памяти:
B C
|
Адрес |
Данные |
Ассемблерный код |
Комментарий |
|
4003 4004 4005 |
21 00 50 |
LXI H,5000
|
Загрузка в <H,L> адреса, начиная с которого будет считан массив исходных констант. |
|
4006 4007 4008 |
11 00 60 |
LXI D,6000 |
Загрузка в <D,E> адреса, начиная с которого будут записаны 2-10 коды. |
|
4009 400A 400B |
01 0A 00 |
LXI B,000A |
Создание в регистре C счётчика цикла преобразования. |
|
400C |
C5 |
PUSH B |
Сохранение в стек счётчика цикла. |
|
400D |
7E |
MOV A,M |
Загрузка константы из памяти. |
|
400E 400F |
0E 00 |
MVI C,00 |
Обнуление регистра C. |
|
4010 4011 4012 |
C3 2C 40 |
JMP 402C |
Переход к подпрограмме последовательного вычитания из аккумулятора числа 64 для получения старшего байта 2-10 кода. |
|
4013 4014 |
CE 64 |
ACI 64 |
Сложение аккумулятора с 64 для восстановления значения до лишнего вычитания. |
|
4015 |
47 |
MOV B,A |
Сохранение аккумулятора в регистр B. |
|
4016 4017 |
3E 00 |
MVI A,00 |
Обнуление аккумулятора. |
|
4018 4019 401A |
C3 35 40 |
JMP 4035 |
Переход к подпрограмме последовательного «переписывания» в аккумулятор содержимого <B> с 2-10 коррекцией для получения младш. байта. |
|
401B |
12 |
STAX D |
Сохранение младшего байта 2-10 числа в память. |
|
401C |
79 |
MOV A,C |
Загрузка в <A> из <C> старшего байта 2-10 кода. |
|
401D |
13 |
INX D |
Переход к следующему адресу записи. |
|
401E |
12 |
STAX D |
Сохранение старшего байта 2-10 числа. |
|
401F |
13 |
INX D |
Переход к следующему адресу записи. |
|
4020 |
C1 |
POP B |
Восстановление из стека счётчика цикла. |
|
4021 |
79 |
MOV A,C |
Копирование <C> в <A>. |
|
4022 |
3D |
DCR A |
Уменьшение счётчика на 1. |
|
4023 4024 4025 |
CA 3E 40 |
JZ 403E |
Если счётчик достиг нуля, то необходимо выйти из процедуры 2-10 преобразования по флагу Z. |
|
4026 |
4F |
MOV C,A |
Иначе <A> копируем в <C>. |
|
4027 |
C5 |
PUSH B |
И сохраняем в стек уменьшенный счётчик. |
|
4028 |
23 |
INX H |
Переход к следующему адресу чтения. |
|
4029 402A 402B |
C3 0D 40 |
JMP 400D |
Возврат к началу подпрограммы. |
|
402C 402D |
D6 64 |
SUI 64 |
Начало подпрограммы вычитания из <A> 64 для получения старшего байта 2-10 числа. |
|
402E 402F 4030 |
DA 13 40 |
JC 4013 |
Если произошёл перенос, то есть число в аккумуляторе уже меньше 64, то возвращаемся к основной процедуре по флагу CY. |
|
4031 |
0C |
INR C |
Увеличиваем число, означающее старший байт. |
|
4032 4033 4034 |
C3 2C 40 |
JMP 402C |
Возврат к началу подпрограммы. |
|
4035 |
05 |
DCR B |
Начало подпрограммы получения мл.ч. <B>-1 |
|
4036 4037 4038 |
CA 1B 40 |
JZ 401B |
По флагу Z возврат к основной процедуре. Нулевой результат означает, что весь остаток исх. константы переписан в аккумулятор в 2-10 виде. |
|
4039 |
3C |
INR A |
Увеличиваем аккумулятор на 1. |
|
403A |
27 |
DAA |
2-10 коррекция аккумулятора. |
|
403B 403C 403D |
C3 35 40 |
JMP 4035 |
Возврат к началу подпрограммы. |
|
403E 403F 4040 |
C3 00 41 |
JMP 4100 |
Выход из текущей процедуры. Переход к следующей процедуре (преобразования 2-10 кодов в коды KOИ-7). |
