Лабораторна робота №6
Тема: Обмін даними через пам'ять.
Мета: Використовуючи нижче подану демонстраційну програму перебирання сегментів, написати програму яка б виводила певну букву.
Обмін інформацією між мікропроцесорною системою та зовнішнім середовищем може здійснюватись не лише через інтерфейс вводу-виводу, а й через оперативну пам’ять. Таким чином, під час запису даних у деякі комірки пам’яті інформація одночасно може потрапляти і на пристрій вводу-виводу. У складних мікропроцесорних системах функцію передачі даних між системою і зовнішнім пристроєм, локальною мережею або іншою мікропроцесорною системою здійснює контролер прямого доступу до пам’яті, який працює паралельно з процесором.
У лабораторній роботі також є можливість здійснювати вивід через пам’ять, але без допомоги контролера ПДП. Пристроєм виводу є цифрові індикатори, звернутися до будь-якого з індикаторів можна через комірки за адресою #83F8-#83FF. Кожен індикатор має вісім окремих сегментів, які світяться залежно від даних, які записані у вказані комірки. Стан сегменту залежного від стану відповідного біта даних. У процесі роботи потрібно запустити програму, та визначити, за який сегмент відповідає кожен біт. Після цього потрібно вивести дві букви на два довільних індикатори, використовуючи команди "MV1 М "безпосереднє завантаження комірки пам’яті, адреса якої знаходиться у регістровій парі "НL.". Можливо також використати команду "STA'' прямий запис акумулятора у пам’ять за адресою яка вказана після команди.
У кожного студента повинен бути свій варіант букв. Можливі букви: G,H,J,L,P,Q,U,B,r,n,y,b.
ДЕМОНСТРАЦІЙНА ПРОГРАМА ПЕРЕБИРАННЯ СЕГМЕНТІВ:
Адреса |
Програма |
Коментар |
8000 |
MVI С,#00 |
Завантажити в регістр С |
8002 |
M3: MVI В,#07 |
Завантажити в В константу, що засвічує сегменти |
8004 |
LXI H,#83F8 |
Завантажити в регістрову пару HL адресу комірки |
8007 |
МІ: МОV А, С |
Переслати в акумулятор вміст регістра C |
8008 |
RLC |
Зсув акумулятора вліво |
8009 |
MOV С, А |
Переслати в регістр C вміст акумулятора |
800А |
MOV М, А |
Переслати байт з акумулятора в комірку пам’яті |
800В |
ІNX H |
Збільшити на одиницю вміст регістрової пари HL |
800С |
LXI D,#OFFF |
Завантажити в регістрову пару DE адресу комірки |
800F |
M2: DCX D |
Зменшити на одиницю вміст регістрової пари DE |
8010 |
MOV A, D |
Переслати в акумулятор вміст регістрової пари DE |
8011 |
ORA E |
Диз'юнкція з регістром "E" |
8012 |
JNZ M2 |
Якщо не нуль, то перейти на мітку M2 |
8015 |
DCR В |
Вміст регістрової пари BC зменшити на одиницю |
8016 |
JNZ M1 |
Якщо не нуль, то перейти на мітку M1 |
8019 |
JMP M3 |
Безумовний перехід |
Програма, що виводить букву на індикатор
Адреса |
Програма |
Коментар |
8100 |
M2: MVI A,#7D |
Завантажити в акумулятор константу, що засвічує сегменти |
8102 |
STA #83FA |
Прямий запис акумулятора у пам’ять за адресою |
8105 |
LXI D,#0FFF |
Завантажити в регістрову пару DE адресу комірки |
8108 |
МІ: DCX D |
Зменшити на одиницю вміст регістрової пари DE |
8109 |
MOV А,D |
Переслати в акумулятор вміст регістрової пари DE |
810A |
ORA E |
Диз'юнкція з регістром "E" |
810B |
JNZ M1 |
Якщо не нуль, то перейти на мітку M1 |
810E |
JMP M2 |
Безумовний перехід |