Manipulation de souris en assembleur (TASM)

laymen -  
 loupius -
Bonjour,
je veux déterminer la position de la souris (X,Y). je sais qu'on va utiliser l'interruption (INT 33H) et je sais aussi que :CX = position horizontale (X) et DX = position verticale (Y)

mais mon problème dans l'écriture de la procédure
Quel est l'instruction qui permet de déterminer X et Y?

Merci infiniment
salut

4 réponses

loupius
 
INT 33H Fonction 03H:
Lecture de la position de la souris et de l'état des boutons
Appel avec:
AX = 0003H
Retour avec:
BX = etat des boutons (bit2=bouton central, bit1=bouton droite, bit0=bouton gauche)
CX = nbre de pixels en X (coordonnée horizontale)
DX = nbre de pixels en Y (coordonnée verticale)
Voilà, tu sais tout.
Bon courage
0
laymen
 
bonjour,
pourquoi dans certaines procédure lier a la manipulation de souris on passe généralement par la pile?
est ce que ce passage est obligatoire?
merci
0
loupius
 
Désolé, je ne comprends pas la question.
0
laymen
 
lors d'une recherche sur internet j'ai trouvé un petit exemple
exemples de procedures:

;Pour afficher le curseur

pointer_visibl proc
push ax
mov ax,01
int 33h
pop ax
ret
pointer_visibl endp

;Pour masquer le curseur

masqu_pointer proc
push ax
mov ax,2
int 33h
pop ax
ret
masqu_pointer endp

;Bouton gauche poussé

bouton_g proc
mov ax,5
mov bx,01
int 33h
ret
bouton_g endp

;Bouton droite poussé

bouton_d proc
mov ax,5
mov bx,02
int 33h
ret
bouton_d endp

dans les 2 procedures (visible et masquer le curseur) on a utiliser la pile

Merci infinement
0
loupius
 
Avec les commentaires:
;Pour afficher le curseur
pointer_visibl proc
  push ax        ; sauvegarde le registre ax
  mov ax,01      ; prépare l'appel à la fonction 01h
  int 33h        ; appel de 'affichage souris'
  pop ax         ; restaure le registre ax
  ret
pointer_visibl endp
Voilà, c'est tout simple, c'est simplement pour que la fonction ne modifie pas le registre 'ax'.
0
laymen
 
et maintenant quest ce ke je vais mettre dans la fonction qui retourne la position horizontal et vertical du curseur? c'est a dire qu'est je vais mettre dans les registres CX et DX pour avoir la position?

Merci infiniment pour votre aide
0
loupius
 
Ben, pour BX,CX,DX y'a rien a mettre.
A l'appel de la fonction, il faut mettre 03h dans AX pour spécifier le choix de la fonction et l'appel de cette fonction, par l'intermédiaire de l'interruption 33h, remplira les registres BX,CX,DX. Il ne sert donc à rien de les remplir avant.;
Pour obtenir la position du curseur
pointer_position proc
  push ax      ; sauvegarde le registre ax
  mov ax,03    ; prépare l'appel à la fonction 03h
  int 33h      ; appel de 'position souris'
  pop ax       ; restaure le registre ax
  ret          ; bouton dans BX, position dans CX,DX 
pointer_position endp
L'appel des fonctions via une interruption est (presque (soyons prudent, il y a toujours des exceptions)) toujours construit sur ce modèle.
0