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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2011, 00:13   #1
UkraineChaos
Новичок
Джуниор
 
Регистрация: 21.04.2011
Сообщений: 2
По умолчанию Не корректно работает прерывание, почему?

У меня почему прерывания работают некорректно, в самом прерываемые не получается сделать ничего, чтобы работало должным образом, пробовал записать в файл вывести строку или символ внутри прерывания.
Здесь краткий код программы которая попадает в это прерывание при нажатии кнопки на клавиатуре.
По идее она должна была выводить символ G на экран при нажатии на любую клавишу но почему выбрасывает ошибку или закрывается и не работает

Листинг:
Код:
Prog segment
assume cs: prog, ds: prog, es: prog, ss: prog
org 100h
Start:
jmp init
	int_09h proc
	mov ah,2
	mov dl,'G'
	int 21h
	iret
	original_int_09h dd ?
	int_09h endp
init:
mov ax,3509h
int 21h
mov word ptr original_int_09h,bx
mov word ptr original_int_09h+2,es
mov ax,2509h
lea dx,int_09h
int 21h
lea dx,init
int 27h
Prog ends
end Start
Я понимаю что в идеале нужно сохранять изменяемые регистры и флаги, но здесь в любом случае должно минимум 1 рас вывести символ 'G'.

Последний раз редактировалось rpy3uH; 23.04.2011 в 10:04.
UkraineChaos вне форума Ответить с цитированием
Старый 01.05.2011, 12:21   #2
UsamaBenLadan
Пользователь
 
Аватар для UsamaBenLadan
 
Регистрация: 01.05.2011
Сообщений: 23
По умолчанию

IrqFlag db 0

int_09h proc
mov [cs: IrqFlag],1
jmp [cs: original_int_09h]
int_9h endp

......

Cycle:

cmp [IrqFlag],0
je Cycle
mov [IrqFlag],0
mov ah,2
mov dl,'G'
int 21h
jmp Cycle
Внутри прерываний это не делается
Также при работе с голой аппаратурой нужны манипуляции с контроллером прерываний. Клавиатура вырабатывает прерывания по нажанию И отпусканию клавиш (а в зависимости от выбранного набора скэн-кодов - еще и на специальные префиксы E0h, и т.д.)
UsamaBenLadan вне форума Ответить с цитированием
Старый 01.05.2011, 14:11   #3
UkraineChaos
Новичок
Джуниор
 
Регистрация: 21.04.2011
Сообщений: 2
По умолчанию

Тему можно закрывать
UkraineChaos вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не совсем корректно работает программа alexchromets Помощь студентам 2 26.12.2010 19:45
Рекурсия. Не корректно работает прога Driver_09 Помощь студентам 0 23.12.2009 20:02
не корректно работает PlaySound, помогите!!! Rerek Общие вопросы C/C++ 0 13.04.2009 18:37
Программа работает не корректно Neymexa Общие вопросы C/C++ 5 24.12.2008 19:17