INightmare's Blog

(x86 Assembly) Mouse - Int 33h

(This tutorial was originally written in 2004 and featured in http://asm.inightmare.org/)

In this tutorial I’ll cover mouse usage in DOS applications. If you want to test the program in real DOS mode (without windows running) you’ll need CuteMouse drivers that can be downloaded here.

mov ax,0
int 33h ; mouse interrupt
; (if AX=FFFFh mouse is installed, if 0000 not, DX - number of mouse buttons)
cmp ax,0
ja pmouse ; if AX > 0 lets start!

mov ah,4ch
int 21h ;else just exit

pmouse:
mov ax,03 ; function to get mouse position and buttons
int 33h

mov ax,dx ; Y coord to AX
mov dx,320

mul dx ; multiply AX by 320
add ax,cx ; add X coord
; (Now currsor position is in AX, lets draw the pixel there)
mov di,ax
mov ax,0A000h
mov es,ax
mov dl,12 ; red color ;)
mov es:[di],dl ; and we have the pixel drawn

By default mouse resolution is 640x200, lets set it to 320x200 (monitor height is already set, lets just set the width)

mov ax, 7
mov cx,0 ; min pos
mov dx,320 ; max pos
int 33h

And height can be set:

mov ax, 8
mov cx,0
mov dx,200
int 33h

The source for this tutorial can be found here.