
2.Практическая разработка.
2.1 Описание алгоритма программы.
Как известно, цифра, закодированная при помощи кода КОИ-7, отличается от незакодированной на число 30, а буквенное обозначение шестнадцатеричного числа – на 3716. Исходя из этой информации, принцип работы данной программы заключается в том, что константы из массива, начинающегося с адреса 500016, по очереди копируются в аккумулятор и над каждой из них осуществляются следующие действия: данное двузначное число подвергается четырём сдвигам вправо с помощью команды “RAR”, в результате чего его символы “меняются местами”. Это нужно, чтобы закодировать первый символ. Затем обнуляется первый символ результата путём применения команды “ANI 0F”. С помощью команды “CPI 0A” определяется, цифра или буква стоит на второй позиции.
На следующем этапе, в зависимости от того, цифра это или буква, результат складывается с числом 30 или 37 соответственно. После этого с исходным числом проделывается вышеописанная работа за исключением сдвигов вправо. Тем самым осуществляется кодировка второго символа исходной константы.
После того, как первая константа закодирована, получившееся в результате двухбайтное число заносится из аккумулятора в массив, начинающийся с адреса 600016.
Затем все действия повторяются применительно к каждой заданной константе в цикле.
В программе используется цикл на убывание. В паре <HL> создаётся счётчик на десять шагов, так как требуется закодировать десять констант.
2.2 Листинг программы
Адрес |
Текст ассемблера |
Коды ассемблера |
Комментарии |
4000 |
LXI B, 500016 |
01 00 50 |
Загрузка начала исходного массива |
4003 |
LXI D, 600016 |
11 00 60 |
Загрузка начала массива кодов КОИ-7 |
4006 |
MVI H, 0Ah |
26 0A |
Создание счётчика в регистре H на 10 шагов |
4008 |
JP 500016 |
F2 00 50 |
Выбор положительного числа |
400B |
LDAX B |
0A |
Запись первого числа в аккумулятор |
400C |
RAR |
1F |
Сдвиг вправо |
400D |
RAR |
1F |
Сдвиг вправо |
400E |
RAR |
1F |
Сдвиг вправо |
400F |
RAR |
1F |
Сдвиг вправо |
4010 |
ANI 0Fh |
E6 0F |
Обнуление первой тетрады числа |
4012 |
CPI 0Ah |
FE 0A |
Сравнение результата с 0Аh |
4014 |
JP 401E16 |
F2 1E 40 |
Если это буква, прыжок к адресу 401E |
4017 |
ADI 30h |
C6 30 |
Сложение результата с константой 30h |
4019 |
JMP 402116 |
C3 20 40 |
Прыжок к адресу 4020 |
401C |
ADI 37h |
C6 37 |
Сложение результата с константой 37h |
401E |
STAX D |
12 |
Запись получившегося числа в массив кодов КОИ-7 |
401F |
INX D |
13 |
Переход к следующей ячейке массива кодов КОИ-7 |
4020 |
LDAX B |
0A |
Запись первого числа в аккумулятор |
4021 |
ANI 0Fh |
E6 0F |
Обнуление первой тетрады числа |
4023 |
CPI 0Ah |
FE 0A |
Сравнение результата с 0Аh |
4025 |
JNC 403016 |
D2 2F 89213647048 40 |
Если это буква, прыжок к адресу 402F |
4028 |
ADI 30h |
C6 30 |
Сложение результата с константой 30h |
402A |
JMP 403216 |
C3 32 40 |
Прыжок к адресу 4032 |
402D |
ADI 37h |
C6 37 |
Сложение результата с константой 37h |
402F |
STAX D |
12 |
Запись получившегося числа в массив кодов КОИ-7 |
4030 |
INX D |
13 |
Переход к следующей ячейке массива кодов КОИ-7 |
4031 |
INX B |
03 |
Переход к следующей ячейке массива исходных констант |
4032 |
DCR H |
25 |
Уменьшение счётчика на 01h |
4033 |
JP 400816 |
F2 08 40 |
Прыжок к началу цикла, если в счётчике не 00h |
4036 |
JMP 004016 |
C3 40 00 |
Выход в монитор |