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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2013, 12:02   #1
urukhi1
Новичок
Джуниор
 
Регистрация: 17.11.2013
Сообщений: 2
По умолчанию Требуется помощь с событиями

Исходник полностью:
PHP код:
code segment                    
assume cs
:codeds:code         
org 100h         
               
start
:                                                                     
jmp begin

y db 0ch                   
;координата курсора по Y
x db 28h                   
;координата курсора по X

driver db 
'Driver version:$'
prerivanie db 0dh,0ah,'IRQ:$'
MouseType db 0dh,0ah,'MouseType:$'
USBType db 'USBType$'
SerialType db 'SerialType$'
PS2Type db 'PS2Type$'
LeftMouseKey db 0dh,'LeftMouseKey$'
RightMouseKey db 0dh,'RightMouseKey$'

begin:

;
mov ax,12h ;установка видеорежима 640х48016 цветов
;int 10h

инициализация мыши
mov ax
0
int 33h

спрятать курсор мыши
mov ax
2
int 33h



вывод версии драйвера мыши
вывод строки driver
mov ah
9
mov dx
offset driver
int 21h

mov ax
,bx      Заносим в AX старш и мл часть версии драйвера

mov cl
,16-4    Начинаем перевод числа AX в строку  
xchg    dx
,ax         
Repeat1
:
mov ax,dx          Восстанавливаем число в AX
shr ax
,cl          
and al,0Fh         
add al
,'0'        
cmp al,'9'         
jbe Digit1       
add al
,'A'-('9'+1
Digit1:    int 29h            
sub cl
,4           
jnc Repeat1         
Если знаковый CL >= 0то повторяем



вывод номера прерывания
вывод строки prerivanie
mov ah
9
mov dx
offset prerivanie
int 21h

xor ax,ax   очищаем верхнюю часть от мусора
mov al
,cl   Заносим в AX старш и мл часть версии драйвера

mov cl
,16-4    Начинаем перевод числа AX в строку  
xchg    dx
,ax         
Repeat2
:
mov ax,dx          Восстанавливаем число в AX
shr ax
,cl          
and al,0Fh         
add al
,'0'        
cmp al,'9'         
jbe Digit2       
add al
,'A'-('9'+1
Digit2:    int 29h            
sub cl
,4           
jnc Repeat2         
Если знаковый CL >= 0то повторяем



вывод типа мыши
mov ah
9
mov dx
offset MouseType
int 21h

cmp ch
,0
je case1
cmp ch
,2
je case2
cmp ch
,4
je case3

case1
:
mov dxoffset USBType
jmp endcase
case2
:
mov dxoffset SerialType
jmp endcase
case3
:
mov dxoffset PS2Type
jmp endcase

endcase
:
int 21h



;;;;;;;;;;;;;;;;;;;;;;;;ДВИЖЕНИЕ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
vivod:
устанавливаем курсор для вывода символа
mov ah
2
mov bh
0
mov dh
y
mov dl
x
int 10h

nazatie
:

ждем нажатия клавиши
mov ah
0
int 16h

отсекаем функциональные клавиши
cmp al
0
je nazatie

проверяем на ESC
cmp al
1bh
je MoveExit

проверяем на ВВЕРХ (w)
cmp al77h ;77h
je b_up
jne s_but

b_up
:
cmp dh0   ;проверяем верхнюю границу
je m1
dec y
jmp m1

проверяем на ВНИЗ (s)
s_but:
cmp al73h
je b_down
jne a_but

b_down
:
cmp dh18h  ;проверяем нижнюю границу
je m1
inc y
jmp m1

проверяем на ВЛЕВО (a)
a_but:
cmp al61h
je b_left
jne d_but

b_left
:
cmp dl0    ;проверяем левую границу
je m1
dec x
jmp m1

проверяем на ВПРАВО (d)
d_but:
cmp al64h
je b_right
jne nazatie

b_right
:
cmp dl4Fh  ;проверяем рпавую границу
je m1
inc x

m1
:
стираем символ в текущей позиции (пробелом)
mov ah0eh
mov al
' '
int 10h
jmp vivod    
пошли на вывод символа в следующей позиции

MoveExit
:
устанавливаем курсор для вывода символа
mov ah
2
mov bh
0
mov dh
3
mov dl
0
int 10h
;;;;;;;;;;;;;;;;;;;;;;;;ДВИЖЕНИЕ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;
mov ax,12h ;установка видеорежима 640х48016 цветов
;int 10h
;mov ax,0000h ;инициализация мыши
;int 33h

обраотчик нажатия клавиши
mov ax
,0ch установка обработчика мыши
;push cs
;pop es
mov cx
000ah нажата ЛКМ или ПКМ 0000000000001010b
mov dx
offset MouseKey
int 33h

ждем нажатия клавиши
mov ah
0
int 16h

MouseKey
:
test bx,1
jz left
нажали на левую клавишу
обработка ПКМ
вывод типа мыши
mov ah
9
mov dx
offset LeftMouseKey
int 21h
retf
left
:    
;
обработка ЛКМ
вывод типа мыши
mov ah
9
mov dx
offset RightMouseKey
int 21h
retf



exit:
mov ah4ch
int 21h
code ends
end start 
Там где у меня проблемы:
PHP код:
обраотчик нажатия клавиши
mov ax
,0ch установка обработчика мыши
;push cs
;pop es
mov cx
000ah нажата ЛКМ или ПКМ 0000000000001010b
mov dx
offset MouseKey
int 33h

ждем нажатия клавиши
mov ah
0
int 16h

MouseKey
:
test bx,1
jz left
нажали на левую клавишу
обработка ПКМ
вывод типа мыши
mov ah
9
mov dx
offset LeftMouseKey
int 21h
retf
left
:    
;
обработка ЛКМ
вывод типа мыши
mov ah
9
mov dx
offset RightMouseKey
int 21h
retf 
Помогите пожалуйста... Идея в том, чтобы при нажатии на кнопки мыши выводилось сообщение, какая кнопка нажата, но у меня выводятся какие-то символы.
Изображения
Тип файла: jpg Трабл.jpg (29.3 Кб, 133 просмотров)
urukhi1 вне форума Ответить с цитированием
Старый 17.11.2013, 16:50   #2
urukhi1
Новичок
Джуниор
 
Регистрация: 17.11.2013
Сообщений: 2
По умолчанию

PHP код:
обраотчик нажатия клавиши
mov ax
000ch установка обработчика мыши
mov cx
000ah нажата ЛКМ или ПКМ 0000000000001010b
mov dx
offset MouseKey
int 33h

ждем нажатия клавиши
mov ah
0
int 16h

mov ax
000ch
mov cx
0000h
int 33h

MouseKey
:
push cs  помещаем ES в стек
pop ds   
достаем в DS
test bx
,1
jz left
нажали на левую клавишу
обработка ПКМ
вывод типа мыши
mov ah
9
mov dx
offset LeftMouseKey
int 21h
retf
left
:    
;
обработка ЛКМ
вывод типа мыши
mov ah
9
mov dx
offset RightMouseKey
int 21h
retf 
Всем спасибо! проблема решена ))
urukhi1 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Canvas объект со свойствами и событиями sonik1173 Компоненты Delphi 4 13.04.2011 15:29
Нужна помощ с событиями в VS C++ ToxaR Windows Forms 2 14.12.2010 13:35
Работа с событиями в PowerPoint БуреВестник Microsoft Office Word 0 19.10.2009 15:58
Требуется помощь) immortalis Помощь студентам 3 12.10.2008 21:48