Блок схема.

2.3 Распределение памяти и листинг программы.

Распределение памяти:

L – счетчик цикла

B,C – содержат текущий байт первого числа

D,E – содержат текущий байт второго числа

H – содержит значение текущего второго числа

A – содержит значение текущего байта первого числа

H,L – временное хранение значения адреса старшего байта второго числа, с последующим перемещением в пару D,E

400016-адрес начала массива исходных чисел

Адрес16 Шестнадцатери-чный код Код ассемблера комментарии
4000 31 00 80 LXI SP,8000 h Создание стека
4003 01 03 50 LXI B,5003 h Загрузить в пару B,C значение адреса старшего байта второго числа
4006 21 07 50 LXI H,5007 h Загрузить H,L значение адреса старшего байта второго числа
4009 EB XCHG Сохранение значения адреса старшего байта второго числа в D,E
400A 1A LDAX D Загрузка в A значения старшего байта второго числа
400B E6 7F ANI 7Fh Обнуление старшего бита, отвечающего за знак числа
400D 67 MOV H,A Сохранение получившегося значения в регистре H
400E 0A LDAX B Загрузка в A значения старшего байта первого числа
400F E6 7F ANI 7Fh Обнуление старшего бита, отвечающего за знак числа
4011 2E 04 MVI L, 04h Загрузка счетчика цикла значением 4
4013 BC CMP H Сравнить байты чисел (содержимое A с содержимым регистра H)
4014 DA 2F 40 JC 402Fh Если второе число больше создать в регистре B значение 02h
4017 C2 3B 40 JNZ 403Bh Если второе число больше создать в регистре B значение 01h
401A 0B DCX B Получить в паре B,C значение адреса следующего байта первого числа
401B 1B DCX D Получить в паре D,E значение адреса следующего байта второго числа
401C 1A LDAX D Загрузить в A значение следующего байта второго числа
401D 67 MOV H,A Сохранение значения в регистре H
401E 0A LDAX B Загрузить в A значение следующего байта первого числа
401F 2D DCR L Уменьшить значение счетчика на единицу
4020 C2 13 40 JNZ 4013h Пока значение счетчика не ноль выполнять цикл
4023 3E 00 MVI A,00h Числа равны записать в A значение 00h
4025 32 00 70 STA 7000h Отправляем содержимое аккумулятора в ячейку 7000
4028 21 7C 30 LXI H,307Ch Загрузка в H,L адреса, начиная с которого располагается текст : «NUMBERS ARE EQUAL».
402B E5 PUSH H Запись содержимого регистров H,L в стек
402C C3 44 40 JMP 4044h Безусловный переход к адресу 4044h, выводу на экран результатов
402F 3E 02 MVI A,02h Записываем 02h в A
4031 32 00 70 STA 7000h Отправляем содержимое аккумулятора в ячейку 7000h
4034 21 5D 30 LXI H,305Dh Загрузка в H,L адреса, начиная с которого располагается текст: «THE SECOND MORE THAN THE FIRST».
4037 E5 PUSH H Запись содержимого регистров H,L в стек
4038 C3 44 40 JMP 4044h Безусловный переход к адресу 4044h, выводу на экран результатов
403B 3E 01 MVI A,01h Записываем 01h в A
403D 32 00 70 STA 7000h Отправляем содержимое аккумулятора в ячейку 7000h
4040 21 3E 30 LXI H, 303Eh Загрузка в H,L адреса, начиная с которого располагается текст: «THE FIRST MORE THAN THE SECOND».
4043 E5 PUSH H Запись содержимого регистров в H,L в стек
4044 01 20 30 LXI B, 3020h Загрузка в B,C адреса, начиная с которого располагается текст: «INITIAL DATA».
4047 CD 4C 00 CALL 4Ch Вывод текста на экран.
404A CD 49 00 CALL 49h Переход на новую строку.
404D 21 03 50 LXI H, 5003h Загрузить в пару H,L значение адреса старшего байта первого числа
4050 CD 00 41 CALL 4100h Переход к подпрограмме вывода числа на экран
4053 21 07 50 LXI H, 5007h Загрузить в пару H,L значение адреса старшего байта второго числа
4056 СD 00 41 CALL 4100h Переход к подпрограмме вывода числа на экран
4059 С1 POP B Извлечение из стека значений в регистры B,C
405A CD 4C 00 CALL 4Ch Вывод текста на экран
405D CD 49 00 CALL 49h Переход на новую строку.
4060 01 8E 30 LXI B,308Eh Загрузка в B,С адреса начиная с которого располагается текст: CHANGE NUMBERS? (Y/N)
4063 CD 4C 00 CALL 4Ch Вывод текста на экран
4066 CD 55 00 CALL 55h Ввод кода символа в A с эхом на консоль
4069 D6 4E SUI 4Eh Вычитание 4Eh (Код клавиши N) из аккумулятора
406B CD 49 00 CALL 49h Переход на новую строку
406E CA 90 40 JZ 4090h Переход по условию Z=1, т.е нажата клавиша N
4071 01 A6 30 LXI B,30A6h Загрузка в B,C адреса начиная с которого располагается текст: ENTER NUMBERS :.
4074 CD 4C 00 CALL 4Ch Вывод текста на экран
4077 16 08 MVI D,08h Создание счетчика D
4079 21 00 50 LXI H, 5000h Загрузка в H,L адреса начиная с которого располагаются исходные числа.
407C CD 67 00 CALL 67h Ввод двух шестнадцатеричных цифр в A
407F 77 MOV A, M Пересылка содержимого M в A
4080 23 INX H Положительное приращение H,L
4081 15 DCR D Отрицательное приращение регистра D
4082 3E 20 MVI A, 20h Пересылка 20h (код клавиши пробел) в регистр A
4084 CD 58 00 CALL 58h Вывод пробела на экран
4087 C2 7C 40 JNZ 407Ch Переход по условию: Z=0, т.е не все константы введены
408A CD 49 00 CALL 49h Переход на новую строку
408D C3 00 40 JMP 4000h Безусловный переход кначалу программы
4090 CD 40 00 CALL 40h Вход в режим ожидания ввода команды монитора.

Подпрограмма вывода числа на экран.