Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2009, 12:47   #1
Anrih
 
Регистрация: 22.04.2009
Сообщений: 3
По умолчанию Блокировка клавиши. Перехват 09h. Порты.

Необходимо заблокирывать клавишу в перехваченном прерывании 09h, делая это на уровне портов.
В моем представлении это выглядит так:
1)с помощью 60h читаем скан-код клавиши.
2)Если скан-код совпадает с клавиешей, которую нам надо заблокировать очищаем "буфер" и возвращаем управление старому обработчику.
3)Если не совпадает сразу же возвращаем управление старому обработчику.

Правильно ли я мыслю? И если правильно, то как очистить "буфер"?
Anrih вне форума Ответить с цитированием
Старый 18.09.2009, 14:04   #2
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

2) если вы обработали полностью нажатие, то возвращать старому обработчику не нужно.
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 18.09.2009, 20:46   #3
Anrih
 
Регистрация: 22.04.2009
Сообщений: 3
По умолчанию

Подскажите в чем тогда проблема. ПРи нажатии на 2 идет ошибка и резедент выгружается.
Код:
Ну вот как я сделал. При нажатии на 2, идет сбой.
Код:
.model tiny
.code 
.186
org 2Ch
envseg             dw    ?
org 100h  
begin: 
old_int09h:
jmp        short initialize 
        dw         0    
        
        
int09h_handler proc far    
pushf 
pusha
in         al,60h
cmp        al,03h
jne re2

iret  
re2: 
popa
popf                                                              
jmp dword ptr cs:old_int09h    
int09h_handler endp

initialize proc near
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 ah,49h             
mov es,word ptr envseg
int 21h  
mov        dx,offset initialize     
int 27h                
initialize endp                                
end begin
Anrih вне форума Ответить с цитированием
Старый 18.09.2009, 23:12   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Нужно возвращать из стека все, что положили в него, а так же нужно сообщить контроллеру прерываний, о том, что обработка завершена, чтоб он смог принимать сигналы дальше.
Код:
int09h_handler proc far    
pushf 
pusha
in         al,60h
cmp        al,03h
jne re2

mov al,20h
out 20h,al
popa
popf

iret  
re2: 
popa
popf                                                              
jmp dword ptr cs:old_int09h    
int09h_handler endp
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
порты на Assemblere Dimon Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 13.04.2010 17:36
Перехват клавиши mustang007 Общие вопросы Delphi 6 15.04.2009 02:01
COM Порты Skazi21101 Помощь студентам 0 02.11.2008 12:24
порты Elm0 Свободное общение 2 02.06.2007 15:56
Порты у Windows Alar Работа с сетью в Delphi 0 30.10.2006 13:37