Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Тема 5 Управление вводом – выводом
Изучение организации и принципов работы клавиатуры и закрепление практических навыков управления ею, создание собственных программ обработки прерываний. Цель работы: Изучение организации и принципов работы клавиатуры и закрепление практических навыков управления ею, а также практических навыков создания собственных программ обработки прерываний. Постановка задачи Разработать программу обработки прерывания от клавиатуры, которая должна: - распознавать нажатие «горячей» комбинации клавиш и реагировать на него звуковым сигналом; - при первом нажатии «горячей» комбинации переходить в режим блокировки ввода заданной клавиши, при втором - отменять этот режим; - системная обработка всех других клавиш нарушаться не должна. Индивидуальные задания 1. комбинация клавиш LeftCtrI+RightSblft+F1; блокирование ввода клавиши 1. 2. комбинация клавиш RightCtrI+LeftSblft+F2; блокирование ввода клавиши 2. 3. комбинация клавиш RightCtrI+LeftSblft +F4; блокирование ввода клавиши 4. 4. комбинация клавиш LeftCtrI+RightSblft+F5; блокирование ввода клавиши 5. 5. комбинация клавиш LeftAlt+RightSblft+F6; блокирование ввода клавиши 6. 6. комбинация клавиш LeftCtrI+RightAlt+F7; блокирование ввода клавиши 7. 7. комбинация клавиш LeftCtrI+RightSblft+F8; блокирование ввода клавиши 9. 8. комбинация клавиш LeftCtrI+LeftSblft+F9; блокирование ввода клавиши 8. 9. комбинация клавиш RightCtrI+RightSblft+F3; блокирование ввода клавиши 4. 10. комбинация клавиш LeftCtrI+RightSblft+F9; блокирование ввода клавиши 1. 11. комбинация клавиш RightCtrI+LeftSblft+F8; блокирование ввода клавиши 2. 12. комбинация клавиш RightCtrI+LeftSblft +F7; блокирование ввода клавиши 4. 13. комбинация клавиш LeftCtrI+RightSblft+F6; блокирование ввода клавиши 5. 14. комбинация клавиш LeftAlt+RightSblft+F5; блокирование ввода клавиши 6. 15. комбинация клавиш LeftCtrI+RightAlt+F4; блокирование ввода клавиши 7. 16. комбинация клавиш LeftCtrI+RightSblft+F3; блокирование ввода клавиши 9. 17. комбинация клавиш LeftCtrI+LeftSblft+F2; блокирование ввода клавиши 8. 18. комбинация клавиш RightCtrI+RightSblft+F1; блокирование ввода клавиши 4. 19. комбинация клавиш LeftCtrI+RightAlt+F5; блокирование ввода клавиши 7. 20. комбинация клавиш LeftAlt+RightAlt+F3; блокирование ввода клавиши 3. Пример решения задачи Индивидуальное задание: комбинация клавиш LeftCtrI+RightSblft+F3; блокирование ввода клавиши 3. Разработка алгоритма Структура программы Программа состоит из основной программы и трех функций. - void *readvect(int in) - функция читает вектор прерывания с номером in и возвращает его значение. - void writevect (int in, void * h ) - функция устанавливает новый вектор прерывания in на новый обработчик этого прерывания по адресу h. - void i n tе rr uрt new9() - процедура нового обработчика прерывания 9h. Описание переменных Глобальные переменные программы: old9 - адрес старого обработчика прерывания 9h; FЗ_соdе - скан-код клавиши «F3», которая входит в комбинацию «горячих» клавиш; kеу3_соdе - скан-код клавиши«3», которая будет блокироваться/разблокироваться при каждом нажатии «горячей» комбинации клавиш; f - флаг, который при каждом нажатии «горячей» комбинации клавиш переключается из состояния 0 в 1 или из 1 в 0 (состояние 1 означает, что клавиша «3» заблокирована); rr и sr - переменные, которые используются для задания значений регистров общего назначения и сегментных регистров соответственно при вызове прерывания. В главной программе использует символьный массив string для проверки работы программы. Переменные процедуры обработки прерывания 9h: - с - переменная, которая используется для подтверждения приема из клавиатуры, в случае, если была нажата клавиша «3», а флаг f показывал, что эта клавиша заблокирована; - х, у - переменные, которые используются для сохранения координат курсора на экране в момент вызова процедуры обработки прерывания; - byte17 - байт флага состояния клавиатуры в области данных BIOS по адресу 0040:0017; - byte18 - байт флага состояния клавиатуры в области данных BIOS по адресу 0040:0018; - mask - маска, которая используется для определения нажатия клавиши левый Shift (в этом случае бит 1 в byte17 установлен в 1); - mask17 - маска, которая используется для определения нажатия клавиши Ctrl (в этом случае бит 2 в byte17 установлен в 1); - mask18 - маска, которая используется для определения нажатия клавиши левый Ctrl (в этом случае бит 0 в byte18 установлен в 1);
|
Последнее изменение этой страницы: 2019-05-08; Просмотров: 321; Нарушение авторского права страницы