Tema
Гость
|
|
« Ответ #1 : 24-12-2003 17:53 » |
|
Вроде так.
Клавишу, которая используется с Ctrl сохрани в переменную в основном коде программы. Для начала тебе требуется заменить стандартный обработчик клавы на свой: ; сохранить адрес предыдущего обработчика прерывания 09h mov ax,3509h int 21h mov word ptr old_int09h,bx mov word ptr old_int09h+2,es ; установить наш обработчик mov ax,2509h mov dx,offset int09h_handler int 21h Далее пиши свою программу, но в конце добавь: ; восстановить предыдущий обработчик прерывания mov ax,2509h mov dx,word ptr old_int09h+2 mov ds,dx mov dx,word ptr cs:old_int09h int 21h
Обработчик будет выглядеть так: int09h_handler proc far pusha push es ; сохранить ВСЕ регистры push ds push cs pop ds
push 0040h pop ds mov di,word ptr ds:001Ah ; адрес головы буфера клавиатуры cmp di,word ptr ds:001Ch ; если он равен адресу хвоста, je exit_handler ; буфер пуст, и нам делать нечего
mov ax,word ptr [di] ; иначе: считать символ cmp ah,byte ptr БУКВА jne exit_handler
mov al,byte ptr ds:0017h ; считать байт состояния клавиатуры, test al,04h ; если не нажат Ctrl, jz exit_handler ; выйти, Потом пиши свой код. А в конце: mov word ptr ds:001Ch,di ;установить адреса ; головы и хвоста буфера одинаковыми, ; пометив его тем самым как пустой exit_handler: pop ds ; восстановить все регистры pop es popa jmp cs:old_int09h ; передать управление предыдущему обработчику
|