5 лаба
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра вычислительной техники
отчет
по лабораторной работе №5
по дисциплине «Организация ЭВМ и систем»
Тема: ИСПОЛЬЗОВАНИЕ АППАРАТНЫХ ПРЕРЫВАНИЙ
Студенты гр. 1363 |
|
Соловьев М.И. Владимиров П.А. |
Преподаватель |
|
Гречухин М.Н. |
Санкт-Петербург
2022
Цель работы: знакомство с различного вида аппаратными прерываниями и создание собственных подпрограмм обработки прерываний.
Задание: По заданию преподавателя разработать алгоритм и реализовать программу подключения собственной подпрограммы обработки прерывания и использовать её в цепочке со стандартной подпрограммой обработки прерывания от одного из следующих устройств компьютера: в нашем случае клавиатура. Сначала вводим символы, которые нельзя использовать. Затем при нажатии этих символов, они не отображаются.
Блок-схема алгоритма
Текст программы
#include <dos.h>
#include <conio.h>
void interrupt(*oldfunc)();
int flag = 0;
unsigned char firstArr[100];
int currentIndex = 0;
void getKey() {
union REGS r;
r.h.ah = 0x6;
r.h.dl = 0xff;
int86(0x21, &r, &r);
}
void interrupt nineHandle() {
int ch;
if (flag == 0) {
int i;
getKey();
if (_AL != 0 && _AL != 'z') {
firstArr[currentIndex] = _AL;
cprintf("%c", _AL);
currentIndex++;
}
if (_AL == 'z') {
firstArr[currentIndex] = '$';
flag = 1;
}
}
else if (flag == 1) {
int i;
int check = 1;
getKey();
if (_AL != 0 && _AL != 'z') {
for (i = 0; i < currentIndex; i++) {
if (firstArr[i] == _AL) {
check = 0;
break;
}
}
if (check == 1) {
cprintf("%c", _AL);
}
}
if (_AL == 'z') {
flag = 2;
}
}
_chain_intr(oldfunc);
}
int main() {
int counter = 1;
oldfunc = _dos_getvect(0x9);
setvect(0x9, nineHandle);
cprintf("Enter symbols to delete from sentence (to exit press z) ");
while (flag != 2) {
if (flag == 1 && counter == 1) {
cprintf("\n\rEnter your sentece (to exit press z) ");
counter++;
}
}
setvect(0x9, oldfunc);
}
Примеры запуска программы
Как мы видим, сначала мы вводим символы, которые нельзя использовать в дальнейшем (рисунок 1).
Рисунок 1 – Ввод символов
При нажатии клавиши с запретным символом, символ не отображается, в нашем примере это «hl». Пытаясь ввести слово «hello», на экран выводится только «eo» (рисунок 2).
Рисунок 2 – Попытка ввести запретные символы
Структурная схема аппаратных средств, используемых при выполнении программы с необходимой степенью детализации содержимого блоков.
Монитор (устройство вывода)
Клавиатура (устройство ввода)
Оперативная память (ОЗУ)
Центральный процессор (АЛУ, УУ, Регистры, Кэш-память)