Регистрация: 13.10.2012
Сообщений: 5
|
Работа с мышью
Есть задача: вывести матрицу любой размерности, в любой точке экрана. Ввод размерности я сделал. Матрицу выводит. Теперь нужно сделать так, чтобы получение начальной координаты и вывод матрицы происходили при откускании ПКМ. Уже долго ковыряюсь, но что-то рабочее с мышью не получается сделать.
Код:
.model small
.stack 100
.data
BUFR db 03h,0,02h dup(?)
BUFR2 db 03h,0,02h dup(?)
string db "Vvedite 4islo:",0Dh,0Ah,'$'
.code
mouse_proc proc far
work: mov ax, 0003h
int 33h
jmp work
ret
endp
begin:
mov ax, @data
mov ds,ax
mov ah,0ah
lea dx,BUFR
int 21h
mov ah,0ah
lea dx,BUFR2
int 21h
;из 10чной в 16ную
lea dx,bufr
mov bx,dx
mov ax,ds:[bx+2]
sub al,30h
sub ah,30h
xchg al,ah
mov cl,al
mov ch,10h
mov dl,al
mov al,00
cmp ah,0
jz go
labb: dec ah
add dl,0ah
cmp ah,0
jnz labb
go: mov bp,dx
;из 10чной в 16ную
mov dx,0000
lea dx,bufr2
mov bx,dx
mov ax,ds:[bx+2]
sub al,30h
sub ah,30h
xchg al,ah
mov cl,al
mov ch,10h
mov dl,al
mov al,00
cmp ah,0
jz go2
labb2: dec ah
add dl,0ah
cmp ah,0
jnz labb2
go2: mov di,dx
;мышка
mov bx,0000h
mov ax,0000h
int 33h
mov ax,0001h
int 33h
mov ax,000ch
mov cx,0010h
mov dx,offset mouse_proc
int 33h
;ввести размерность массива
mov bx,di
mov cx,bp
;на всякий случай очистить регистры
mov ax,0000
mov dx,0000
mov si,bx
mov di,si
mov ax,bx
mul cx
mov cl,al
;перевести на след. строку
mov ax,0200h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
mov ch,00
mov sp,0000
;собсна сам вывод матрицы в бп+2 число на 1 больше чем позиция первого символа
mov ds:[42h],021eh
mov ds:[40h],0930h
push dx
;поставіть курсор на 2 строку
mov ax,0200h
;позіція первого сімвола
mov dx,021dh
mov ds:[46h],dx
int 10h
mov di,0000
m_loop: mov ax,ds:[40h]
cmp dl,4fh
jz m_exitloop2
jmp contimue
m_exitloop2: jmp next
contimue: push cx
mov bx,0000h
mov bl,0ch
mov cx,0001h
int 10h ;вывод на экран символа
pop cx
inc bp
inc dl
inc ch
dec cl
inc ax
mov ds:[40h],ax
;нужно перейти на след. позицию
push dx
mov dx,ds:[42h]
mov ax,0200h
int 10h
inc dl
cmp dl,51h
jz next
inc dl
inc di
inc di
cmp dl,50h ;пропустить наращивание dx если он перерастает 4f
jz temp
mov ds:[42h],dx
jmp prbIg
temp: mov ds:[42h],dx
prbIg: mov dl,32
int 29h
cmp dl,50h
inc dl
cmp dl,50h
jz next
mov ax,ds:[40h]
pop dx
;div
push dx
mov dx,0000h
mov dl,ch
mov ax,dx
pop dx
mov bx,si
div bl
cmp ah,00h
JNZ cont
;ппереввод строки
mov ax,0200h
add ds:[42h],0100h
sub ds:[42h],di
mov dl,0dh
int 21h
mov dl,0ah
int 21h
mov dx,ds:[42h]
dec dx
int 10h
mov di,0000
jmp cont
next: mov di,0000h
mov ds:[44h],di ;халтурка для наращивания номера символа
mov ds:[44h],bp
mov di,si
sub di,ds:[44h]
mov ax,ds:[40h]
add ax,di
mov ds:[40h],ax
sub cx, di
mov dx, ds:[46h]
inc dh
mov ds:[46h],dx
inc dx
mov ds:[42h],dx
mov dx,ds:[46h]
mov ax,0200h
int 10h
cmp cl,00h
jz m_exitloop
mov bp,0000h
mov ch,00h
jmp m_loop
cont: cmp cl,00
jz m_exitloop
jmp m_loop
m_exitloop:
;intput string
mov ah,0ah
lea dx,BUFR
int 21h
mov ax,04c00h
int 21h
end begin
|