Пример 4. Установить 0 в область ОЗУ, начиная с адреса 1200H, содержащую 16 байт и остановить процессор.
Программа имеет вид.
Адрес | OBJ | Метка | КОП | Операнды | Комментарий: |
1000H | LXI | H, 1200H | : HL <= 1200H | ||
1001H | : адрес 1-й ячейки | ||||
1002H | |||||
1003H | MVI | B, 0FH | : B <= 16D число байт | ||
1004H | 0F | ||||
1005H | CLR: | MVI | M, 00H | : M(HL) <= 0 | |
1006H | |||||
1007H | INX | H | : HL <= HL + 1 | ||
1008H | DCR | B | : B <= B - 1 | ||
1009H | C2 | JNZ | CLR | : переход если Z = 0 | |
100AH | |||||
100BH | |||||
100CH | MVI | M, 00H | : M(HL) <= 0 обнуление | ||
100DH | : 16-й ячейки | ||||
100EH | HLT | : остановка процессора. |
После выполнения программы и остановки процессора в крайней левой позиции дисплея высветится E. После нажатия клавиши Reset следует проверить ячейки памяти с адресами от 1200H до 120FH, в них должен быть записан 0.
Пример 5. Инвертировать старшие тетрады регистров В и С, результат поместить в ячейку памяти по адресу 1111Н, после чего в регистровой паре HL получить содержимое программного счётчика и остановить процессор.
Адрес | OBJ | Метка | КОП | Операнды | Комментарий: |
1000H | LXI | H, 1111H | : HL <= 1111H | ||
1001H | : адрес 1-й ячейки | ||||
1002H | |||||
1003H | MOV | A, C | : A <= C | ||
1004H | EE | XRI | 0F0H | : A <= A xor F0H | |
1005H | 0E | : 0FH - маска | |||
1006H | MOV | M, A | : M(HL) <= A | ||
1007H | INX | H | : HL <= HL + 1 | ||
1008H | MOV | A, B | : A <= B | ||
1009H | EE | XRI | 0FOH | : A <= A xor F0H | |
100AH | 0F | : 0FH - маска | |||
100BH | MOV | M, A | : M(HL) <= A | ||
100CH | CD | CALL | MET 1 | : -(SP) <= MET 1 | |
100DH | 0F | : PC <= MET 1 | |||
100EH | |||||
100FH | E3 | MET 1: | XTHL | : HL <=> (SP) | |
1010H | HLT | : остановка процессора |
Перед запуском программ в регистры В и С необходимо загрузить два HEX числа, например, 0025Н и FFABH.
После выполнения программы в ячейки памяти по адресу 1111Н будет находиться число FF25H, а по адресу 1112Н – число 00АВН, в регистровой паре HL – число 100FH.
Варианты заданий
1. В 100 ячеек, начиная с адреса 1100, записать числа от 1 до 100.
2. В ячейки памяти с адреса 1100 записать четные числа от 2 до 200.
3. С адреса 1200 по 1300 подсчитать количество четных чисел.
4. С адреса 1100 по 1200 подсчитать количество нечетных чисел.
5. Записать число 0F в аккумулятор, подсчитать количество единиц и записать в адреса с 1300 по 1500.
6. Записать число 3F в аккумулятор, подсчитать количество нулей и записать с адреса 1300 по 1400.
7. Число F5 сбросить старшую тетраду и записать в адреса с 1700 по 1800.
8. Число 0F записать в адреса 1233, 1243 и т.д. до 50 ячеек памяти.
9. Число 55 записать по адресам 1200, 1205, 120А … до 50 ячеек.
10. Число 44 записать с адреса 1200, 120А … в 50 ячеек.
11. Записать число от 0 до 9 в адрес с 1200 и перевернуть.
12. Записать число от 0 до 100 в адрес с 1100, установить третий бит в единицу.
13. Установить вершину стека 1200, записать число от 0 до 9F.
14. Установить вершину стека 1300, записать числа 1234, 5678….
15. Перейти на подпрограмму по адресу 1300, сложить в 100 раз два числа 05 и 50 и записать по адресам с 1500 сто раз.
16. С адреса 1200 записать число от 0 до 100 через 2 байта (1202, 1204…).
17. С адреса 1200 записать числа 0, 3, 6 и т.д. в адреса 1203, 1206…..
18. Записать 100 чисел в адреса с 1100, потом переслать их в адреса с 1200.
19. Переслать содержимое четных ячеек памяти с адреса 1100 в адреса 1200 50 чисел.
20. Переслать числа с нечетных адресов с 1101 в адреса 1200 и т.д.
21. Сдвинуть массив из 50 чисел с адреса 1100 влево на одно число.
22. Сдвинуть массив из 50 чисел вправо на 3 ячейки c адреса 1200.
23. Содержимое 50 ячеек памяти с адреса 1200 записать в стек.
24. Подсчитать количество единиц в 50 ячейках памяти с адреса 1100 и записать по адресу 1200, 1201 и т.д.
25. Подсчитать количество 0-й в 50 ячейках памяти с адреса 1200 и записать по адресу 1300, 1301 и т.д.
26. Подсчитать количество четных чисел в 50 ячейках памяти и записать их по адресу 1600.
27. Подсчитать количество нечетных чисел в 50 ячейках памяти с адреса 1200 и записать по адресу 1300.
ЛАБОРАТОРНАЯ РАБОТА № 3.
ОРГАНИЗАЦИЯ ВВОДА-ВЫВОДА В МИКРОПРОЦЕССОРНУЮ СИСТЕМУ (ПРОГРАММНО-УПРАВЛЯЕМЫЙ ОБМЕН. ОБМЕН ПО ПРЕРЫВАНИЮ. ПРЯМОЙ ДОСТУП К ПАМЯТИ.
Примеры программ
Организация различных видов обмена для микро-ЭВМ «Энерго».
Программы составлены для ППА КР 580 ВВ 55, подключенного по схеме на рис.3.1. На схеме показаны только те выводы ППА, которые рассматриваются в программах.
Канал А используется для вывода информации на дисплей. Наличие логического нуля в разряде канала А приводит к свечению соответствующего сегмента a, b, c … g индикатора (рис.3.2). При кодировании символов значение разряда РА7 безразлично, но для определённости можно принять его равным 1.
Младшие разряды канала С осуществляют подключение через дешифратор DC индикаторов и клавиатуры, в данном случае при нулевых значениях младших разрядов канала С подключается через 0 – выход дешифратора индикатор нулевой позиции дисплея и вся вертикаль матрицы клавиатуры, в которой находится клавиша «0».
Через старшие разряды канала С осуществляется ввод кода нажатой клавиши при опросе клавиатуры.
Настройка ППА на соответствующий режим работы производится записью управляющего слова 88Н в регистр управляющего слова ППА по адресу FBH. Адрес порта – F8H, адрес порта – FAH.