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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2012, 12:19   #1
ИринаForeve
Пользователь
 
Аватар для ИринаForeve
 
Регистрация: 27.04.2009
Сообщений: 48
По умолчанию Индикаторы CapsLock, NumLock, ScrollLock-не работают. Листинг внутри

Подскажите пожалуйста где в листинге ошибка. Не работают индикаторы клавиатуры почему то...в данном случае включение CapsLock, но так же пробовала и для NumLock, ScrollLock.
Работа программы: При нажатии Ctrl+F1 предлагается нажать клавишу с левым Shift, если нажат символ w то включение индикатора.

Код:
model small
.stack 100h
.data
	Press		db 10, 13, 'Input any key $'
	PressShift	db 10, 13, 'Enter key with shift$'
	ShiftDa	db 10, 13, 'Left Shift was entered$'
	ShiftNet	db 10, 13, 'Left Shift was not entered$'
	konec		db 10, 13, 'END','$'
	error 		db 10, 13, 'ERROR KONTROLLER$'
.code
start:
	mov	ax, @data
	mov ds, ax
; вывод приглашения
	lea	dx, Press
	mov	ah, 9h
	int	21h
	; ожидание нажатия клавиши, считывание кода (без “Эхо”)
	mov	ah, 8h
	int	21h	; в AL код введенного символа (первый байт)
; Идентификация введенного кода:
	cmp al, 0	; AL = 0 (код расширенный?)
	jne ascii	; если нет на метку ascii
	; если да (код расширенный) на следующую команду
	int 21h; вторичный вызов для получения в AL второго байта кода
	cmp al, 5Eh	;сравнение второго байта кода со скан-кодом Ctrl+F1
	jne kon	; если не равно (расширенный, но не Ctrl+F1), 
; переход на метку kon 
; равно, т.е. введен Ctrl+F1 !!!
;******************** БЛОК 2***************************
; вывод приглашения 
	lea	dx, PressShift
	mov	ah, 9h
	int	21h
; ожидание нажатия клавиши, считывание кода 
mov ah, 0
	int 	16h
			; считывание байта состояния в AL 
	xor ax, ax
	mov es, ax
	mov al, es:[417h]
	; тестирование бита №1 (выяснение состояния левого Shift)
	test al, 10b
	jz net	        ; Shift не нажат на метку net
			; Shift нажат
	lea	dx, ShiftDa		; в dx начальный адрес сообщения ShiftDa 
	jmp vivod			;переход на vivod 
net:
	lea	dx, ShiftNet		; в dx начальный адрес сообщения ShiftNet 
vivod:				; вывод нужного сообщения
	mov	ah, 9h
	int	21h
	; БЛОК 2 завершен выход
	jmp exit
;********************************************************
; в al код 'w' ?
ascii: cmp al, 'w'
	jne kon ; нет (это и не 'w', и не Ctrl+F1) ? на метку kon 
		; в al код 'w' !!!
;************************ БЛОК 1 ************************
; работа с контроллером клавиатуры 
cli
xor	cx, cx
wait1:
	in	al, 64h
	test	al, 10b
loopnz	wait1
	jnz er
	mov	al, 0EDh
	out	60h, al
	xor	cx, cx
wait2:
	in	al, 64h
	test	al, 10b
loopnz	wait2
	jnz er
				; отправка второго байта 
	mov	al, 100b
	out	60h, al
	sti
				; БЛОК 1 завершен выход
	jmp exit
;*******************************************************
kon:	
	lea	dx, konec		;вывод сообщения «Конец»
	mov	ah, 9h
	int	21h
	jmp exit
er:					 ;вывод сообщения « Ошибка контроллера »
	lea	dx, error
	mov	ah, 9h
	int	21h
exit:
	mov ah, 0			;задержка до нажатия любой клавиши
	int 	16h
	mov ax, 4C00h		; завершение программы
	int 	21h
end start
ИринаForeve вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выручайте! Win7 + Keyboard Hook + CapsLock Vladimir Kim Win Api 0 03.06.2012 19:43
Cамый краткий листинг - самый подробный листинг. katia2011 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 13.04.2011 19:10
Индикаторы в адресной строке Phantom JavaScript, Ajax 4 02.03.2010 12:13
OnKeyPress из NumLock`а Alex Cones Общие вопросы Delphi 2 23.04.2009 20:08
CapsLock NumLock и ScrollLock AngelOfDeath Общие вопросы Delphi 5 06.04.2008 12:16