Блок схема.
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 | Вход в режим ожидания ввода команды монитора. |
Подпрограмма вывода числа на экран.