2.1 Блок-схема алгоритма с поясняющим текстом.
Сначала я представлю краткую блок-схему программы.

Ниже расположена более подробная блок-схема, которая, конечно не описывает дословно все процессы, происходящие внутри процессора (засылка содержимого регистра B в аккумулятор и т.д.), но зато подробно и доступно объясняет, как выполняется программа.
Блок-схема основной программы.


Б
лок-схема
п/п обработки положительного числа.
Оставляем в числе
только его старшую часть
нет да





Блок-схема п/п для преобразования числа в код КОИ-7.
Создание
кода буквы Сохранение
кода старшей части числа











да
нет






Создание
кода арабской цифры
Создание кода
буквы
Создание кода
арабской цифры

Блок-схема п/п печати на экране символов.

2.2 Распределение памяти и листинг программы.
Распределение памяти.
Регистры D,E – в них хранятся адреса результатов (с 6000h).
Регистры H,L – в них находятся адреса исходных данных (с 5000h).
Регистр В – счетчик на 10 шагов (в основной программе).
Аккумулятор А – регистр, который использовался для промежуточных вычислений.
Регистр В – регистр, в котором находилась старшая тетрада числа (в подпрограмме).
Регистр С – регистр, в котором находилась младшая тетрада числа (в подпрограмме).
Указатель стека – адрес 7000h.
В ячейках памяти с 5000h до 5009h находятся исходные однобайтные целые числа со знаком в прямом коде.
Листинг программы
|
Адрес |
Данные |
Код Ассемблера |
Комментарии |
|
4000 |
31 00 70 |
LXI SP,7000h |
Создание стека |
|
4003 |
11 00 60 |
LXI D,6000h |
Адрес массива результата в пару DE |
|
4006 |
21 00 50 |
LXI H,5000h |
Адрес массива данных в пару H,L |
|
4009 |
06 0A |
MVI B,0Ah |
Создание счетчика на 10 шагов |
|
400B |
05 |
M1:DCR B |
Уменьшение счетчика на 1 |
|
400C |
F5 |
PUSH PSW |
Сохранение в стеке аккумулятора и флагов |
|
400D |
7E |
MOV A,M |
Засылка в аккумулятор исходного числа |
|
400E |
FA 11 40 |
JM 4011 |
|
|
4011 |
CD 1C 40 |
CALL OBR |
Вызов п/п обработки числа |
|
4014 |
23 |
INX H |
Продвижение по памяти к следующему числу |
|
4015 |
F1 |
POP PSW |
Восстановление аккумулятора и флагов |
|
4016 |
C2 0B 40 |
JNZ M1 |
Прыжок на М1 до исчерпания счётчика |
|
4019 |
CD 40 00 |
CALL 40h |
Вход в режим ожидания ввода команды монитора |
|
401C |
C2 34 40 |
OBR:JNZ KON |
Обработка только положительных чисел |
|
401F |
7E |
MOV A,M |
Засылка в аккумулятор исходного числа для дальнейшей обработки |
|
4020 |
E6 0F |
ANI 0Fh |
Обнуление младшей тетрады |
|
4022 |
1F |
RAR |
Циклический сдвиг старшей тетрады на место младшей |
|
4023 |
1F |
RAR | |
|
4024 |
1F |
RAR | |
|
4025 |
1F |
RAR | |
|
4026 |
CD 35 40 |
CALL PR |
Вызов п/п для создания кода КОИ-7 |
|
4029 |
47 |
MOV B,A |
Сохранение кода КОИ-7 символа старшей тетрады в регистре В |
|
402A |
7E |
MOV A,M |
Засылка в аккумулятор исходного числа для дальнейшей обработки |
|
402B |
E6 0F |
ANI 0Fh |
Обнуление старшей тетрады |
|
402D |
CD 35 40 |
CALL PR |
Вызов п/п для создания кода КОИ-7 |
|
4030 |
4F |
MOV C,A |
Сохранение кода КОИ-7 символа младшей тетрады в регистре С |
|
4031 |
CD 40 40 |
CALL GOT |
Вызов п/п сохранения кодов и вывода символов на экран |
|
4034 |
C9 |
KON:RET |
Выход в основную программу |
|
4035 |
FE 0A |
PR:CPI 0Ah |
Анализ символа |
|
4037 |
D2 3D 40 |
JNC M2 |
Прыжок на М2, если символ - буква |
|
403A |
F6 30 |
ORI 30h |
Создание кода КОИ-7 арабской цифры |
|
403C |
C9 |
RET |
Выход в п/п обработки числа |
|
403D |
C6 37 |
M2:ADI 37h |
Создание кода КОИ-7 буквы |
|
403F |
C9 |
RET |
Выход в п/п обработки числа |
|
4040 |
78 |
GOT:MOV A,B |
Засылка кода символа старшей тетрады по адресу в D,E |
|
4041 |
12 |
STAX D | |
|
4042 |
CD 4D 40 |
CALL VIV |
Вызов п/п вывода символа на экран |
|
4045 |
13 |
INX D |
Продвижение по памяти в D,E |
|
4046 |
79 |
MOV A,C |
Засылка кода символа младшей тетрады по адресу в D,E |
|
4047 |
12 |
STAX D | |
|
4048 |
CD 4D 40 |
CALL VIV |
Вызов п/п вывода символа на экран |
|
404B |
13 |
INX D |
Продвижение по памяти в D,E |
|
404C |
C9 |
RET |
Выход в п/п обработки числа |
|
404D |
3E 20 |
VIV:MVI A,20h |
Печать пробела на экране |
|
404F |
CD 58 00 |
CALL 58h | |
|
4052 |
1A |
LDAX D |
Печать символа на экране |
|
4053 |
CD 58 00 |
CALL 58h | |
|
4056 |
C9 |
RET |
Выход в программу сохранения кодов |
