Help! Р. обработчик клавиатуры. Ошибка в коде.

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
^EN1GMA^
Сообщения: 2
Зарегистрирован: 12 дек 2009, 22:16

Добрый вечер! Возникла проблема при написании резидентного обработчика клавиатуры. Требовалось написать программу, которая:
- подменяет коды клавиш верхней цифровой клавиатуры на другие
- выгружается по нажатию комбинации alt +w
- выполняет проверку на повторную загрузку

Есть более примитивный рабочий вариант кода, но хотелось бы понять, что не так с этим. Ассемблируется и линкуется он без ошибок, но при попытке запустить на выполнение вылезает ошибка, что-то вроде:

The NTVDM CPU has encountered an illegal instruction.

Знающие люди, please help! Ткните пальцем в каком месте ошибка.

Исходник в прикрепленном файле.

Я использую:
Turbo Assembler Version 4.1
Turbo Link Version 7.1.30.1
Вложения
test.zip
(2.08 КБ) 30 скачиваний
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

помоему ваш обработчик ничего не делает кроме порчи стека

Код: Выделить всё

	pushf
	
	jmp dword ptr cs:[int_09h_orig]
icq:3(один)7748666
mail:airyashov( а)inbox.ru
^EN1GMA^
Сообщения: 2
Зарегистрирован: 12 дек 2009, 22:16

Эм, а можно чуть подробней? ) Нужно было занести в стек адрес возврата и только потом "прыгать" на обработчик? При вызове через call ничего не меняется :confused:
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Пардон :) Разобрался с call и jmp dword. Резидент вызывал оригинал, который в свою очередь, по завершению работы, выходил в ДОС.

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

airyashov спасибо!
Ответить