- •«Разработка программ преобразования форматов двоичных данных и сортировок в машинных кодах микро-эвм см-1800 с помощью эмулятора на пк»
- •Задание
- •Оглавление
- •Введение.
- •Аналитическая часть.
- •Двоично- десятичное кодирование.
- •Преимущества
- •Недостатки
- •Операции над двоично-десятичными числами:
- •Стандарты кодирования текстов.
- •Ascii -коды десятичных цифр
- •Примеры арифметики с дд- кодами на основе чисел из таблицы п.2 после их перевода в дд.
- •Практическая часть. Блок-схема алгоритма.
- •Листинг программы с комментариями.
- •Результаты работы программы.
- •Описание средств вычислительной техники.
- •Выводы.
- •Литература.
Примеры арифметики с дд- кодами на основе чисел из таблицы п.2 после их перевода в дд.
ДД-код |
Константа16 |
ДД-код |
Константа16 |
1111 1111 |
FF |
0000 0000 |
00 |
0011 0101 |
35 |
1111 0100 |
F4 |
0101 0111 |
57 |
1001 1010 |
9A |
1000 1101 |
8D |
0000 0111 |
07 |
1000 0000 |
80 |
0000 1010 |
0A |
Пример сложения:
80 (1000 0000) + 35 (0011 0101) = 115 (0001 0001 0101)
Пример вычитания:
80 (1000 0000) - 35 (0011 0101) = 45 (0100 0101)
Практическая часть. Блок-схема алгоритма.
Листинг программы с комментариями.
Адрес |
Машин. код |
Метка |
Код Ассемблера |
Комментарий |
4000 |
31 00 80 |
|
LXI SP,8000H |
Создание стека программы |
4003 |
06 0A |
|
MVI B,0AH |
Установка начальных значений счётчиков цикла
|
4005 |
0E 09 |
L1: |
MVI C,09H |
|
4007 |
21 01 50 |
|
LXI H,5001H |
Указываем адреса первой пары элементов массива
|
400A |
11 00 50 |
|
LXI D,5000H |
|
400D |
1A |
L2: |
LDAX D |
Загрузка в аккумулятор элемента массива |
400E |
BE |
|
CMP M |
Сравниваем со следующим элементом массива |
400F |
DA 18 40 |
|
JC L3 |
Если первый элемент меньше, переход по метке, иначе |
4012 |
C5 |
|
PUSH B |
Сохраняем счётчики в стек |
4013 |
4E |
|
MOV C,M |
Меняем элементы массива местами
|
4014 |
77 |
|
MOV M,A |
|
4015 |
79 |
|
MOV A,C |
|
4016 |
12 |
|
STAX D |
|
4017 |
C1 |
|
POP B |
Восстанавливаем счётчики из стека |
4018 |
23 |
L3: |
INX H |
Переход к следующей паре элементов
|
4019 |
13 |
|
INX D |
|
401A |
0D |
|
DCR C |
Уменьшаем счётчики и проверяем не закончилась ли сортировка
|
401B |
C2 0D 40 |
|
JNZ L2 |
|
401E |
05 |
|
DCR B |
|
401F |
C2 05 40 |
|
JNZ L1 |
|
4022 |
C3 25 40 |
|
JMP KOI |
Переход к процедуре формирования кодов КОИ-7 |
|
|
|
|
|
4025 |
21 00 50 |
KOI: |
LXI H,5000H |
Адрес исходного массива |
4028 |
11 00 70 |
|
LXI D,7000H |
Адрес нового массива |
402B |
01 0A 00 |
|
LXI B,000AH |
Инициализация счётчика |
402E |
7E |
A1: |
MOV A,M |
Загружаем в аккумулятор число |
402F |
A7 |
|
ANA A |
Обнуляем флаг CY |
4030 |
1F |
|
RAR |
Перемещаем старшую тетраду в правую часть байта
|
4031 |
1F |
|
RAR |
|
4032 |
1F |
|
RAR |
|
4033 |
1F |
|
RAR |
|
4034 |
E6 0F |
|
ANI 0FH |
Обнуляем старшую тетраду |
4036 |
F6 30 |
|
ORI 30H |
Записываем в старшую тетраду «3» |
4038 |
FE 39 |
|
CPI 39H |
Сравниваем полученное с 39H |
403A |
DA 40 44 |
|
JC M1 |
Если меньше39H, переход по метке, иначе |
403D |
FE 39 |
|
CPI 39H |
Сравниваем с 39H |
403F |
CA 44 40 |
|
JZ M1 |
Если равно 39H, переход по метке, иначе |
4042 |
C6 07 |
|
ADI 07H |
Добавляем 7, для выравнивая с кои-7 |
4044 |
12 |
M1: |
STAX D |
Сохраняем полученное число
|
4045 |
13 |
|
INX D |
|
4046 |
7E |
|
MOV A,M |
Загружаем в аккумулятор число |
4047 |
E6 0F |
|
ANI 0FH |
Обнуляем старшую тетраду |
4049 |
F6 30 |
|
ORI 30H |
Записываем в старшую тетраду «3» |
404B |
FE 39 |
|
CPI 39H |
Сравниваем с 39H |
404D |
DA 57 40 |
|
JC M2 |
Если меньше39H, переход по метке, иначе |
4050 |
FE 39 |
|
CPI 39H |
Сравниваем с 39H |
4052 |
CA 57 40 |
|
JZ M2 |
Если равно 39H, переход по метке, иначе |
4055 |
C6 07 |
|
ADI 07H |
Добавляем 7, для выравнивая с кои-7 |
4057 |
12 |
M2: |
STAX D |
Сохраняем полученное число
|
4058 |
13 |
|
INX D |
|
4059 |
23 |
|
INX H |
Переход к следующему числу |
405A |
0D |
|
DCR C |
Уменьшение счётчика |
405D |
C2 2E 40 |
|
JNZ A1 |
Если обработаны не все числа, переход по метке |
4060 |
C3 40 00 |
|
JMP 0040 H |
Выход в монитор |
