📄 mouse.asm
字号:
data_seg segment
even
pointx dw 40 dup(?)
pointy dw 40 dup(?)
count dw 0
count0 dw ?
delta_x dw ?
delta_y dw ?
x1 dw ?
y1 dw ?
x2 dw ?
y2 dw ?
data_seg ends
mouseint proc near ;mouse initilize
mov ax,00h
int 33h
ret
mouseint endp
mouseshow proc near ;show mouse cursor
mov ax,0001h
int 33h
ret
mouseshow endp
mouseclo proc near ;hide mouse cursor
mov ax,0002h
int 33h
ret
mouseclo endp
clomouse proc near ;close mouse driver
mov ax,001fh
int 33h
ret
clomouse endp
mousedraw proc near
mov count,0 ;save point counter
loopm:
mov ax,0005h ;test mouse state
mov bx,0
int 33h
cmp ax,0 ;no key press
je loopm
mov di,10000d ;delay wait
delay0:
mov si,20000d
delay1:
dec si
jnz delay1
dec di
jnz delay0
cmp ax,1
je addcount ;left key pressed
jmp exit0 ;else right pressed than exit
addcount:
add count,2 ;save point
mov si,count
mov pointx[si],cx
mov pointy[si],dx
call drawpoint ;write the point
cmp count,4
jb loopm
mov ax,pointx[si]
mov x1,ax
mov ax,pointy[si]
mov y1,ax
sub si,2
mov ax,pointx[si]
mov x2,ax
mov ax,pointy[si]
mov y2,ax
call drawline ;pointx[si],pointy[si],pointx[si-2],pointy[si-2]
jmp loopm
exit0:
ret
mousedraw endp
drawpoint proc near
mov ah,0ch
mov al,9
int 10h
ret
drawpoint endp
drawline proc near
mov ax,y2
sub ax,y1
jnc nextd0
neg ax
nextd0:
mov delta_y,ax ; delta_y=y2-y1
mov ax,x2
sub ax,x1
jnc nextd1
neg ax
nextd1:
mov delta_x,ax ; delta_x=x2-x1
cmp delta_y,ax
jbe k_l_one
ja k_a_one
k_l_one: ;y=(y2-y1)*(x-x1)/(x2-x1)+y1
mov di,x1
loopa3:
mov ax,y2
sub ax,y1
mov cx,di
sub cx,x1
imul cx
mov cx,x2
sub cx,x1
idiv cx
add ax,y1
mov dx,ax
mov cx,di
mov al,9
mov ah,0ch
int 10h
mov ax,x1
cmp ax,x2
ja downact3
jb upact3
downact3:
dec di
cmp di,x2
jae loopa3
jmp exitdd
upact3:
inc di
cmp di,x2
jbe loopa3
jmp exitdd
k_a_one: ;x=(x2-x1)*(y-y1)/(y2-y1)+x1
mov di,y1
loopa4:
mov ax,x2
sub ax,x1
mov cx,di
sub cx,y1
imul cx
mov cx,y2
sub cx,y1
idiv cx
add ax,x1
mov dx,di
mov cx,ax
mov al,9
mov ah,0ch
int 10h
mov ax,y1
cmp ax,y2
ja downact4
jb upact4
downact4:
dec di
cmp di,y2
jae loopa4
jmp exitdd
upact4:
inc di
cmp di,y2
jbe loopa4
exitdd:
ret
drawline endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -