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
Configuration: Windows Vista
Firefox 3.1

4 réponses

  1. 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
  2. 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
    1. loupius
       
      Désolé, je ne comprends pas la question.
      0
  3. 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
    1. 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
  4. 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
    1. 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