... Сохранение старого обработчика и установка нового ...
push es
xor ax, ax
mov es, ax
mov ax, [9 * 4]
mov [old_keyboard_handler_seg], ax
mov ax, [9 * 4 + 2]
mov [old_keyboard_handler_ofs], ax
mov ax, cs
mov [9 * 8], ax
mov [9 * 8 + 2], keyboard_handler
pop es
... Восстановка старого обработчика ...
push es
xor ax, ax
mov es, ax
mov ax, [old_keyboard_handler_seg]
mov [9 * 8], ax
mov ax, [old_keyboard_handler_ofs]
mov [9 * 8 + 2], ax
pop es
... Обработчик прерывания ...
keyboard_handler:
... Наши действия до выполнения оригинального обработчика ...
pushf
call dword[keyboard_handler]
... Наши действия после оригинального обработчика ...
iret
... Данные программы ...
keyboard_handler:
keyboard_handler_seg dw ?
keyboard_handler_ofs dw ?
Assembler Прерывание
Нужна срочно ваша помощь...может вас не затруднит...
Задача такая, заменить прерывание от клавиатуры... так чтоб при нажатии на клавишу выводилось на 3 символа вперёд...(Например при нажатии 1 выводит 4, на "a" выводит "d") Спасибо всем заранее...
Нужно очень срочно... Спасибо...
в DOS?
Да в DOC, help me, plz))))
Ну в чем проблема используй вставки asm или старые функции intdos и intdosx , но они остались только в turbo C++. Примеры с этими функциями есть на сайте!
Код:
Поскольку заменить символ возвращаемый контроллером клавиатуры, насколько мне известно, не представляется возможным, то остаётся только после вызова оригинального обработчика заменить символ в буфере клавиатуры.
Код:
int09h_handler:
in al,60h ;читаем скан код
xlat ;преобразуем скан код в аски (в es:bx должен быть указатель на таблицу перекодировки)
add al,3 ; +3
mov ah,0eh;выводим на экран
xor bx,bx ;через биос
int 10h
in al,60h ;читаем скан код
xlat ;преобразуем скан код в аски (в es:bx должен быть указатель на таблицу перекодировки)
add al,3 ; +3
mov ah,0eh;выводим на экран
xor bx,bx ;через биос
int 10h
что-то в таком духе )