Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

5 лаба

.docx
Скачиваний:
18
Добавлен:
17.03.2023
Размер:
197.53 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра вычислительной техники

отчет

по лабораторной работе №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 – Попытка ввести запретные символы

Структурная схема аппаратных средств, используемых при выполнении программы с необходимой степенью детализации содержимого блоков.

  1. Монитор (устройство вывода)

  2. Клавиатура (устройство ввода)

  3. Оперативная память (ОЗУ)

  4. Центральный процессор (АЛУ, УУ, Регистры, Кэш-память)

Соседние файлы в предмете Организация ЭВМ