Консультация № 15123
29.11.2004, 15:17
0.00 руб.
0 3 3
Как правильно перехватить прерывание 9h чтобы при нажатии на клавишу выводился мой символ?
Вот мой набросок. Напишите пожалуйста что в нем не так. Заранее спасибо.

Приложение:
.model tiny.code.286org 100hstart:jmp initint9h procpushfpushamov ax,0C00hint 21hmov ah,5mov cx,0E08hint 16hmov ah,5mov cx,1352hint 16hxor ax,axin al,61hmov ah,alor al,80hout 61h,almov al,ahout 61h,almov al,20hout 20h,alpopapopfjmp dword ptr cs:[int9hvar]int9hvar dd ?int9h endpinit:mov ax,3509hint 21hmov word ptr int9hvar,bxmov word ptr int9hvar+2,esmov ax,2509hlea dx,int9hint 21hlea dx,initint 27hend start

Обсуждение

давно
Советник
419
1011
29.11.2004, 15:17
общий
это ответ
Здравствуйте, Jacks!
посмотрите любой работающий исходник.
у вас же много ошибок.
<h6><font color=#FF7F00>* EMan: -=- И легко перо, да на крышу не закинешь. =-= </font></h6>
Неизвестный
29.11.2004, 15:17
общий
это ответ
Добрый день, Jacks!
Представь себе работу INT9:
При нажатии(и отпускании) любой клавиши происходит это прерывание.
Оно берет из 60 порта код этой клавиши переводит его в SCAN код, который запихивает в буффер клавиатуры. А если это были SHIFT, CTRL и еже с ними, то ставит флаг - SHIFT нажата или, скажем,SHIFT отпущена.
Желательно во время работы прерывания не задерживаться (все прерывания запрещены, система в ступоре, ждет). И не использовать DOS функции ниже 0dh.
В твоем случае лучше сразу войдя в int9 передать управление оригинальному обработчику:
int9h proc
pushf
call dword ptr cs:[int9hvar];оттуда выйдут с помощью IRET для этого и нужен pushf
...
а теперь можно просмотреть буффер клавиатуры и поменять(если надо) нужные тебе клавиши другими.
Неизвестный
29.11.2004, 15:17
общий
это ответ
Приветствую Вас, Jacks!
Вот так работает.

Приложение:
.model tiny.code.286org 100hstart:jmp initint9h procpushfpushamov ah,5mov cx,0E08hint 16hmov ah,5mov cx,1352hint 16hpopapopfjmp dword ptr cs:[int9hvar]int9hvar dd ?int9h endpinit:mov ax,3509hint 21hmov word ptr int9hvar,bxmov word ptr int9hvar+2,esmov ax,2509hlea dx,int9hint 21hlea dx,initint 27hend start
Форма ответа