Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: Студент
Рейтинг: 1277
∙ повысить рейтинг »
Jimhucksly
Статус: 5-й класс
Рейтинг: 701
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 593
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Номер выпуска:1257
Дата выхода:20.09.2009, 18:00
Администратор рассылки:Лысков Игорь Витальевич, Модератор
Подписчиков / экспертов:438 / 64
Вопросов / ответов:1 / 1
IRC-канал по теме:#assembler

Вопрос № 172204: Здравствуйте. Есть вопрос, связанный с портами клавиатуры. Ниже приведена небольшая резедентная программа. С помощью прерывания 60h считывается символ из порта, потом он сравнивается с другим символом(в моем случае 2), а далее в зависимости от сравне...



Вопрос № 172204:

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

Код:
.model tiny
.code
org 2Ch
envseg dw ?
org 100h
begin:
old_int09h:
jmp short initialize
dw 0


int09h_handler proc far
in al,60h
cmp al,32h
je short re2

mov ah,2
mov dl,33h
int 21h
re2:
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


Отправлен: 15.09.2009, 17:30
Вопрос задал: Инов Сергей Игоревич, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает _Ayl_, Студент :
Здравствуйте, Инов Сергей Игоревич.

Во-первых, с помощью команд
Код:

in al, 60h
cmp al, 32h
je short re2

вы ожидаете нажатия клавиши со скен-кодом 32h. Этот код соответствует клавише M. Если вы хотите отлавливать нажатие клавиши 2, то нужно сравнивать с числом 3 - это скен-код клавиши 2.

Во-вторых, мне не нравится вызов 21-го прерывания из обработчика. Да, в этот момент прерывания заблокированы, то есть не произойдет повторного вызова, но практика нехорошая.
В третьих, где сохранение регистров? Вы прерываете чужую программу. Она и знать не должна о том, что было прерывание! Вы же портите как минимум регистры AX и DL. Вообще-то этот пункт должен быть самым первым: никогда не изменяй регистры в обработчике аппаратного прерывания!

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

Приложение:

Ответ отправил: _Ayl_, Студент
Ответ отправлен: 15.09.2009, 18:30

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 254219 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.8 от 28.08.2009

    В избранное