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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2009, 13:54   #1
danekne
Форумчанин
 
Регистрация: 12.02.2007
Сообщений: 360
По умолчанию Обработчик клавиатуры

Вот такая проблема: нужно написать обработчик клавиатуры с подменой прерываний стандартных. Вот что накалякал:
Код:
.286
model Tiny
stack 100h
_txt segment public 'code'
assume cs:_txt
assume ds:_txt
old_09h dw ?,?
exitf db ?
main:
	mov ax, @data
	mov ds,ax
    xor ax,ax	
	cli
	push es
	mov ax,3509h
	int 21h
	mov old_09h[0],bx
	mov old_09h[2],es
	pop es
	mov dx,offset new_09h
	push ds
	mov ax,cs
	mov ds,ax
	mov ax,2509h
	int 21h
	pop ds
	sti
	mov cx,0ffffh
cycle_out:                  ;скорее всего тут косяк
	push cx
	mov cx,0ffffh
cycle_in:
	loop cycle_in
	pop cx
	loop cycle_out
finish:
	cli
	mov dx,old_09h[0]
	mov ds,old_09h[2]
	mov ax,2509h
	int 21h
	sti
	mov ax,4c00h
	int 21h
endp
new_09h proc
	sti
	pushf
	pusha
	mov exitf,00h
	in al,60h
	cmp al,39h
	jz my_code
	cmp al,01h
	jnz old_int
	or exitf,01h
	jmp my_code
old_int:
	popa
	popf
	jmp dword ptr old_09h
my_code:
	in al,61h
	or al,80h
	jmp $+2
	out 61h,al
	and al,80h
	jmp $+2
	out 61h,al
	cli
	mov al,20h
	out 20h,al
	sti
	cmp exitf,01h
	jz finish
	mov ah,02h
	xor bh,bh
	mov dx,0000h
	int 10h
	mov ah,09h
	mov al,'*'
	mov bl,00011100b
	mov cx,01h
	int 10h
	popa
	popf
    iret
new_09h endp
ends
end main
Внимание вопрос: какого лешего, эта программа не выполняется до ввода ескейпа и перехода на метку finish, а закрывается почти сразу
danekne вне форума Ответить с цитированием
Старый 11.11.2009, 14:06   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Может из-за того, что вы запрещаете прерывания перед вызовом int 21h ? Его использование подразумевает безопасную установку своего обработчика.

Да и отладчиком кто мешает воспользоваться?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 11.11.2009, 14:12   #3
danekne
Форумчанин
 
Регистрация: 12.02.2007
Сообщений: 360
По умолчанию

Гудвин! Гениальный совет "воспользоваться отладчиком"! Не был бы таким жадым - аж два плюса в репу бы поставил!

Ммм... Проблема решена - перепутал
Код:
;pop cx
	loop cycle_out
	pop cx

Последний раз редактировалось Stilet; 11.11.2009 в 14:50.
danekne вне форума Ответить с цитированием
Старый 11.11.2009, 14:51   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
danekne
А Гудвин то прав - такие весчи именно с помошью отладчика выявить легко, а не гадать на кофейной гуще.
Это я тебе на собственном опыте говорю.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработчик клавиатуры Raven77 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 28.09.2009 09:04
Скрипт обработчик eldar PHP 5 11.09.2009 19:03
принадлежит ли число, введённое с клавиатуры отрезку (а;в). Границы отрезка вводятся с клавиатуры Maria, Russia Помощь студентам 3 17.02.2009 22:01
Обработчик sms Executr PHP 3 29.11.2008 19:14
обработчик событий ben95 Помощь студентам 5 28.01.2008 17:46