Вы находитесь на странице: 1из 2

1

Лабораторная работа №11

Задание 2
Написать программу, изменяющую обработчик прерывания INT 9h (прерывание
клавиатуры), следующим образом:
 Перед началом работы выполняется предыдущий обработчик прерывания,
(дальний адрес его сохраняется при инициализации).
 Вызов происходит последовательностью команд:
pushf ; необходимо для выхода по iret
; (старый обработчик завершается
; этой командой, которая, в отличие от
; ret, восстанавливает регистр флагов)
call dword ptr cs:old_int9h
;или (для режима IDEAL в TASM):
;call [dword cs:old_int9h].
 Далее при нажатии определённого сочетания клавиш (например, ALT-D)
обработчик должен вывести дамп памяти, адрес которого находится по адресу
(SP+4), т.е. дамп точки, в которую прерывание должно вернуться.
 Затем нужно опрашивать клавиатуру на нажатие стрелок и осуществить
сканирование памяти. По нажатию ESCAPE (если дамп памяти выведен на
экран) должен быть осуществлён выход с восстановлением экрана, заранее
сохранённого.

Приложение

Таблица скан-кодов BIOS

Скан-коды функциональных клавиш:


F1 equ 59 ;вызов подсказки на экран
F2 equ 60
F3 equ 61
F4 equ 62
F5 equ 63
F6 equ 64
F7 equ 65
F8 equ 66
F9 equ 67
F10 equ 68 ;выход из программы

Скан-коды клавиш дополнительной клавиатуры:


B_HOME equ 71 ;перейти в начало
B_UP equ 72 ;стрелка вверх
B_PGUP equ 73 ;на страницу вверх
B_BS equ 75 ;стрелка влево
B_FWD equ 77 ;стрелка вправо
B_END equ 79 ;перейти в конец
B_DN equ 80 ;стрелка вниз
B_PGDN equ 81 ;на страницу вниз
2

B_INS equ 82 ;переключить режим


(вставка/замещение)
B_DEL equ 83 ;удалить символ над курсором

Скан-коды часто используемых комбинаций клавиш:


ALT_F1 equ 104
ALT_F2 equ 105
CTRL_C equ 3
CTRL_BS equ 115
CTRL_FWD equ 116
CTRL_END equ 117
CTRL_PGDN equ 118
CTRL_HOME equ 119
CTRL_PGUP equ 122

Адресация клавиатуры при работе с BIOS:

1) 1-й байт состояния клавиатуры (находится по адресу 0000h:0417h или 0040h:0017h):


бит 7: INS включена;
бит 6: CapsLock включена;
бит 5: NumLock включена;
бит 4: ScrollLock включена;
бит 3: Alt нажата (любая);
бит 2: Ctrl нажата (любая);
бит 1: левая Shift нажата;
бит 0: правая Shift нажата.

2) 2-й байт состояния клавиатуры (находится по адресу 0000h:0418h или 0040h:0018h):


бит 7: SysRq нажата;
бит 6: CapsLock включена;
бит 5: NumLock включена;
бит 4: ScrollLock включена;
бит 3: правая Alt нажата;
бит 2: правая Ctrl нажата.
бит 1: левая Alt нажата;
бит 0: левая Ctrl нажата.

3) клавиатурный буфер – 16 слов представляющих скан коды.


По адресам 0000h:041Ah, 0000h:041Сh находятся адреса соответственно начала и конца
буфера. Буфер работает в режиме кольца, если конец равен началу, то буфер пуст.