

2.2 Распределение памяти и листинг программы с комментарием
SP-двухбайтный регистр стека
H,L - пара регистров, занятых массивом исходных чисел
D,E - пара регистров, занятых результирующего массива.
В, С - пара регистров, используемых для хранения временных данных
С - регистр, используемый как счетчик
| адрес | данные | Код ассемблера | Комментарии |
| 31 00 80 | LXI SP, 8000h | Создание стека программы по адресу 8000h | |
| 21 05 50 | LXI H, 5001h | Помещение в пару H,L адреса исходного массива | |
| 11 01 70 | LXI D, 7001h | Помещение в пару D,E адреса массива результатов | |
| 01 00 60 | LXI B, 6000h | Помещение в пару В, С ячейку памяти 6000h | |
| 400C | AF | XRA A | Обнуление аккумулятора |
| 400D | STAX B | Запись содержимого в ячейку памяти 6000h | |
| 400E | 0E 0A | MVI C,0Ah | Создание счетчика на 10 шагов |
| C5 | M1: PUSH B | Засылка содержимого регистров В, С в стек | |
| 7E | MOV A,M | Копирование содержимого регистров в аккумулятор | |
| RAL | Циклический сдвиг содержимого аккумулятора влево на один разряд | ||
| DA 50 40 | JC OTR | Если число отрицательное (CY=1), то прыгнуть на метку OTR | |
| 7E | MOV A,M | Копирование содержимого ячейки памяти в аккумулятор | |
| STAX D | Запись в массив результатов старшего байта числа | ||
| 2B | DCX H | Переход к младшему байту числа в исходном массиве | |
| 1B | DCX D | Переход к младшему байту числа в массиве результатов | |
| 401A | 7E | MOV A,M | Копирование содержимого ячейки памяти в аккумулятор |
| 401B | STAX D | Запись в массив результатов младшего байта числа | |
| 401C | INX H | С адреса 401С по 4021 - продвижение адресов на следующую пару чисел в исходном массиве и в массиве результатов | |
| 401D | INX D | ||
| 401E | M2: INX H | ||
| 401F | INX D | ||
| INX H | |||
| INX D | |||
| C1 | POP B | Извлечение содержимого В, С из стека | |
| 0D | DCR C | Уменьшение счетчика на 1 | |
| C2 10 40 | JNZ M1 | Возврат на М1 до исчерпания счетчика | |
| CD 80 40 | CALL PODS | Вызов подпрограммы PODS | |
| 402A | CD 49 00 | CALL 49h | Перевод курсора на новую строку |
| 402D | CD 90 40 | CALL VISX | Вызов программы VISX |
| CD 49 00 | CALL 49 h | Перевод курсора на новую строку | |
| CD B0 40 | CALL VREZ | Вызов подпрограммы VREZ | |
| C3 40 00 | JMP 40h | Выход в программу Монитор |
Подпрограмма обработки отрицательных чисел
| 0A | PODS: LDAX B | Загрузка в аккумулятор содержимого ячейки 6000h | |
| 01 20 41 | LXI B,4120h | Помещение в пару регистров В, С адреса 4120h | |
| CD 4C 00 | CALL 4Ch | Вывод строки текста, начиная с адреса, записанного в В, С до нулевого байта | |
| CD 61 00 | CALL 61h | Вывод двух шестнадцатеричных цифр и аккумулятора | |
| 408A | C9 | RET | Безусловный возврат к команде, с адресом 402А |
Подпрограмма вывода на экран исходного массива
| 409011 14 00VISX: LXI D, 0014hСоздание счетчика на 20 шагов | |||
| 21 00 50 | LXI H, 5000h | Помещение в пару H,L адреса исходного массива | |
| 01 20 42 | LXI B,4220h | Помещение в пару регистров В, С адреса 4220h | |
| CD 4C 00 | CALL 4Ch | Вывод строки текста, начиная с адреса, записанного в В, С до нулевого байта | |
| 409С | 01 20 43 | LXI B,4320h | Помещение в пару регистров В, С адреса 4320h |
| 409F | 7E | MOV A,M | Копирование содержимого ячейки памяти в аккумулятор |
| 40A0 | CD 61 00 | CALL 61h | Вывод двух шестнадцатеричных цифр и аккумулятора |
| 40A3 | INX H | Продвижение адреса на следующую пару чисел | |
| 40A4 | CD 4C 00 | CALL 4Ch | Вывод строки текста, начиная с адреса, записанного в В, С до нулевого байта |
| 40A7 | 1D | DCR E | Уменьшение счетчика на 1 |
| 40A8 | C2 9F 40 | JNZ 409F | Возврат в 409F до исчерпания счетчика |
| 40AB | C9 | RET | Безусловный возврат к команде, адресом 4030 |
Подпрограмма вывода на экран массива результатов
| 40B011 14 00VREZ: LXI D,0014hСоздание счетчика на 20 шагов | |||
| 40B3 | 21 00 70 | LXI H, 7000h | Помещение в пару H,L адреса массива результатов |
| 40B6 | 01 20 44 | LXI B, 4420h | Помещение в пару регистров В, С адреса 4420h |
| 40B9 | CD 4C 00 | CALL 4Ch | Вывод строки текста, начиная с адреса, записанного в В, С до нулевого байта |
| 40BC | 01 20 43 | LXI B, 4320h | Помещение в пару регистров В, С адреса 4320h |
| 40BF | 7E | MOV A,M | Копирование содержимого ячейки памяти в аккумулятор |
| 40C0 | CD 61 00 | CALL 61h | Вывод двух шестнадцатеричных цифр и аккумулятора |
| 40C3 | INX H | Продвижение адреса на следующую пару чисел | |
| 40C4 | CD 4C 00 | CALL 4Ch | Вывод строки текста, начиная с адреса, записанного в В, С до нулевого байта |
| 40C7 | 1D | DCR E | Уменьшение счетчика на 1 |
| 40C8 | C2 BF 40 | JNZ 40BF | Возврат в 40BF до исчерпания счетчика |
| 40CB | C9 | RET | Безусловный возврат к команде, с адресом 4036 |
· Результаты тестирования программы
При запуске программы, на экране Монитора выводятся следующие данные:
