⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mouse.asm

📁 汇编实验 小球碰壁
💻 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 + -