Добрый вечер! Возникла проблема при написании резидентного обработчика клавиатуры. Требовалось написать программу, которая:
- подменяет коды клавиш верхней цифровой клавиатуры на другие
- выгружается по нажатию комбинации alt +w
- выполняет проверку на повторную загрузку
Есть более примитивный рабочий вариант кода, но хотелось бы понять, что не так с этим. Ассемблируется и линкуется он без ошибок, но при попытке запустить на выполнение вылезает ошибка, что-то вроде:
The NTVDM CPU has encountered an illegal instruction.
Знающие люди, please help! Ткните пальцем в каком месте ошибка.
Исходник в прикрепленном файле.
Я использую:
Turbo Assembler Version 4.1
Turbo Link Version 7.1.30.1
Help! Р. обработчик клавиатуры. Ошибка в коде.
Модератор: Andy
- Вложения
-
- test.zip
- (2.08 КБ) 30 скачиваний
помоему ваш обработчик ничего не делает кроме порчи стека
Код: Выделить всё
pushf
jmp dword ptr cs:[int_09h_orig]
icq:3(один)7748666
mail:airyashov( а)inbox.ru
mail:airyashov( а)inbox.ru
Эм, а можно чуть подробней? ) Нужно было занести в стек адрес возврата и только потом "прыгать" на обработчик? При вызове через call ничего не меняется 
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Пардон
Разобрался с call и jmp dword. Резидент вызывал оригинал, который в свою очередь, по завершению работы, выходил в ДОС.
И еще куча ляпов по пути исправлена >.<
airyashov спасибо!

--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Пардон

И еще куча ляпов по пути исправлена >.<
airyashov спасибо!