Рабочий лист (Лаба вариант №9)
Описание файла
Документ из архива "Лаба вариант №9", который расположен в категории "". Всё это находится в предмете "интерфейсы перифирийных устройств" из 6 семестр, которые можно найти в файловом архиве МАИ. Не смотря на прямую связь этого архива с МАИ, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "интерфейсы перифирицных устройств" в общих файлах.
Онлайн просмотр документа "Рабочий лист"
Текст из документа "Рабочий лист"
Цель работы: изучение способов организации взаимодействия процессора и
внешних устройств в составе ЭВМ.
Задание: Программа ввода символов с клавиатуры с выводом на дисплей.
Используемые ВУ: Клавиатура, дисплей.
Пояснения: Очистка буфера клавиатуры после ввода 35 символов.
Текст программы с программным анализом флагов готовности.
; Сброс и инициализация дисплея и клавиатуры
CALL ResetDisplay
CALL ResetKeyboard
; Основной цикл программы
Loop:
; Считывание состояния клавиатуры
IN 2
; Если флаг стоит, то вывод символа или сброс.
JNZ FlagExist
; Проверка размера буфера (меньше 35)
RD R0
SBI 35
JS Loop
; Сброс клавиатуры
CALL ResetKeyboard
JMP Loop
FlagExist:
; Если есть флаг готовности, то вывод символа
DIVI 10
JNZ TestDisplay
; Сброс клавиатуры и повтор цикла
CALL ResetKeyboard
JMP Loop
TestDisplay:
; Проверка ошибки на дисплее и сброс, если она есть
IN 12
JZ PrintSymbol
CALL ResetDisplay
PrintSymbol:
; Считывание символа с клавиатуры
IN 0
; Запись символа на экран
OUT 10
; Проверка ошибки на клавиатуре и сброс, если она есть
IN 2
JZ Increment
CALL ResetKeyboard
JMP Loop
Increment:
; Увеличение счётчика буфера на 1
RD R0
ADI 1
WR R0
; Завершение обработки прерывания
JMP Loop
ResetDisplay: ; Сброс и инициализация дисплея
; Очистка дисплея
RDI 101
OUT 11
; Разрешение работы дисплея и автосмещения
RDI 11
OUT 11
RET
ResetKeyboard: ; Сброс и инициализация клавиатуры
; Очистка клавиатуры
RDI 101
OUT 1
; Включение буфера клавиатуры
RDI 10
OUT 1
; Включение посимвольного ввода
RDI 103
OUT 1
; Установка счётчика для буфера в нуль
RDI 0
WR R0
RET
Текст программы с обработчиком прерывания.
; Запись вектора прерываний
CALL GetIntAddr
WR 100
; Сброс и инициализация дисплея и клавиатуры
CALL ResetDisplay
CALL ResetKeyboard
; Разрешение прерываний в процессоре
EI
; Зацикливание
Loop:
JMP Loop
; Получение адреса обработчика прерывания
ReturnIntAddr:
POP R0
RD R0
RET
GetIntAddr:
CALL ReturnIntAddr
; Обработчик прерывания
Int:
; Проверка ошибки в дисплее
IN 12
JZ PrintSymbol
CALL ResetDisplay
PrintSymbol:
; Считывание символа с клавиатуры
IN 0
; Запись символа на экран
OUT 10
; Проверка ошибки клавиатуры
IN 2
JZ Increment
; Сброс клавиатуры
CALL ResetKeyboard
; Завершение обработки прерывания
IRET
Increment:
; Увеличение счётчика буфера на 1
RD R0
ADI 1
WR R0
; Проверка размера буфера (меньше 35)
SBI 35
JNS Clear
; Завершение обработки прерывания
IRET
Clear:
; Сброс клавиатуры
CALL ResetKeyboard
; Завершение обработки прерывания
IRET
ResetDisplay: ; Сброс и инициализация дисплея
; Очистка дисплея
RDI 101
OUT 11
; Разрешение работы дисплея и автосмещения
RDI 11
OUT 11
RET
ResetKeyboard: ; Сброс и инициализация клавиатуры
; Очистка клавиатуры
RDI 101
OUT 1
; Включение буфера и прерываний клавиатуры
RDI 11
OUT 1
; Включение посимвольного ввода
RDI 103
OUT 1
; Установка счётчика для буфера в нуль
RDI 0
WR R0
RET
Текст программы с проверкой значения регистра результата.
; Сброс и инициализация дисплея и клавиатуры
CALL ResetDisplay
CALL ResetKeyboard
; Основной цикл программы
Loop:
; Проверка ошибки на дисплее и сброс, если она есть
IN 12
JZ PrintSymbol
CALL ResetDisplay
PrintSymbol:
; Считывание символа с клавиатуры
IN 0
; Вывод символа, если он считался
JNZ WriteSymbol
; Проверка размера буфера (меньше 35)
RD R0
SBI 35
JS Loop
; Сброс клавиатуры
CALL ResetKeyboard
JMP Loop
WriteSymbol:
; Запись символа на экран
OUT 10
; Проверка ошибки на клавиатуре и сброс, если она есть
IN 2
JZ Increment
CALL ResetKeyboard
JMP Loop
Increment:
; Увеличение счётчика буфера на 1
RD R0
ADI 1
WR R0
; Завершение обработки прерывания
JMP Loop
ResetDisplay: ; Сброс и инициализация дисплея
; Очистка дисплея
RDI 101
OUT 11
; Разрешение работы дисплея и автосмещения
RDI 11
OUT 11
RET
ResetKeyboard: ; Сброс и инициализация клавиатуры
; Очистка клавиатуры
RDI 101
OUT 1
; Включение буфера клавиатуры
RDI 10
OUT 1
; Установка счётчика для буфера в нуль
RDI 0
WR R0
RET