Création
d'entreprise
Posez votre question Signaler

Manipulation de souris en assembleur (TASM)

laymen - Dernière réponse le 16 avril 2009 à 04:04
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
Lire la suite 

Manipulation de souris en assembleur (TASM) »

7 réponses
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
loupius - 16 avril 2009 à 02:23
Désolé, je ne comprends pas la question.
Ajouter un commentaire
Réponse
+0
moins plus
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
loupius - 16 avril 2009 à 03:25
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'.
Ajouter un commentaire
Réponse
+0
moins plus
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
loupius - 16 avril 2009 à 04:04
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.
Ajouter un commentaire
Ce document intitulé « Manipulation de souris en assembleur (TASM) » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?