Probleme de clic !!!!

Signaler
Messages postés
13
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2008
-
Messages postés
48
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
29 septembre 2009
-
Bonjour je suis debutant en assembleur et je dois faire une calculatrice mais sous certaine conndition et je n'arrive pas du tout a gerer mes clics !!!! Pouvez vous m'aider ???

Je dois d'abord introduire le a puis le b sinon il y a des messages d'erreur pour l'ordre et la division par zero doit etre signale comme impossible !!!

Merci d'avance !!!!

;======================================================;
; Auteur : Hernaut Emmanuel ;
; Date : 20 décembre 2004 ;
; Objet : Projet Lmi - La belle calculette. ;
;======================================================;

.model small
.stack 100h

.data

nom db 'Hernaut Emmanuel','$'
groupe db 'Groupe C22','$'
cours db 'LMI : Nicolas VanSteelKist (NVS)','$'
projet db 'Projet 1 : La belle calculette','$'
touche db 'Appuyer sur une touche SVP ...','$'
a db 'A','$'
b db 'B','$'
res db 'Resultat','$'
signe_plus db '+','$'
signe_moins db '-','$'
val_a db 'Valeur de A','$'
val_b db 'Valeur de B','$'
resultat db 'Valeur du resultat','$'
plus db 'Add','$'
moins db 'Sub','$'
fois db 'Mul','$'
diviser db 'Div','$'
erreur1 db 'Respecter ordre de saisie','$'
erreur2 db 'Action non autorisée','$'
erreur3 db 'Attention : Division par zero','$'
zone_mess db 'Zone de message','$'

.code

; Fonction Principale

main proc

; Début du programme

mov ax,@data
mov ds,ax

CALL video ; Appel au mode vidéo

CALL entete ; Affiche mon entete

CALL clavier ; Attend une touche pour continuer

CALL video ; Efface mon écran

CALL calculette

CALL init_souris ; Initialisation de la souris

mov ax,0001h ; Affichage du curseur de la souris
int 33h

mov ax,3 ; Gestion de clics

@@clic: ; Reviens ici si clic hors zone

@@rebond: ; Attendre que le bouton soit relaché

int 33h
cmp bx,0

JNE @@rebond

@@attend: ; Attente d'un clic gauche ou droit

int 33h
cmp bx,0

JE @@attend

cmp bx,1

JE @@st

JMP @@clic

@@st: ; Test de la zone

CALL clavier ; Attend une touche pour finir

mov ax,0002h ; Cache le curseur de la souris
int 33h

; Fin du programme

mov ax,04c00h
int 21h

main endp

;=============================================================;Procédures secondaires
;=============================================================

video proc
mov al,03h ; Mode graphique 03h
mov ah,00h
int 10h ; Interruption 10h,03h
ret
video endp

entete proc ; Fonction qui affiche mon en-tete
mov ah,02 ; Placement du curseur en ligne 6 et colonne 28
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,6
mov dl,28
int 10h
mov dx,offset nom ; Affichage de la variable nom
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 9 et colonne 28
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,9
mov dl,28
int 10h
mov dx,offset groupe ; Affichage de la variable groupe
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 12 et colonne 28
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,12
mov dl,28
int 10h
mov dx,offset cours ; Affichage de la variable cours
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 15 et colonne 28
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,15
mov dl,28
int 10h
mov dx,offset projet ; Affichage de la variable projet
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
ret ; Retour a la fonction appelante
entete endp

clavier proc
mov ah,02 ; Placement du curseur en ligne 24 et colonne 48
mov bh,0 ; Càd à la derniere ligne
mov dh,24
mov dl,48
int 10h
mov dx,offset Touche
mov ax,0900h
int 21h ; Interruption 21h,09h
mov ah,07h ; Attente d'une touche
int 21h
ret ; Interruption 21h,07h
clavier endp

init_souris proc ; Initialisation de la souris
mov ax,0 ; Pilote souris pas installer (Sinon FFFF)
mov bx,2 ; Nombre de bouton de la souris
int 33h ; Interruption 33h,0h
ret
init_souris endp

calculette proc
mov ah,02 ; Placement du curseur en ligne 3 et colonne 5
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,3
mov dl,5
int 10h
mov dx,offset a ; Affichage de la variable a
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 3 et colonne 30
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,3
mov dl,30
int 10h
mov dx,offset val_a ; Affichage de la variable val_a
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 3 et colonne 70
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,3
mov dl,70
int 10h
mov dx,offset signe_plus ; Affichage de la variable signe_plus
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 5 et colonne 5
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,5
mov dl,5
int 10h
mov dx,offset b ; Affichage de la variable b
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 5 et colonne 30
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,5
mov dl,30
int 10h
mov dx,offset val_b ; Affichage de la variable val_b
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 5 et colonne 70
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,5
mov dl,70
int 10h
mov dx,offset signe_plus ; Affichage de la variable signe_plus
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 10 et colonne 23
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,10
mov dl,23
int 10h
mov dx,offset plus ; Affichage de la variable plus
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 10 et colonne 33
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,10
mov dl,33
int 10h
mov dx,offset moins ; Affichage de la variable moins
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 10 et colonne 42
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,10
mov dl,43
int 10h
mov dx,offset fois ; Affichage de la variable fois
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 10 et colonne 53
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,10
mov dl,53
int 10h
mov dx,offset diviser ; Affichage de la variable diviser
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 15 et colonne 5
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,15
mov dl,5
int 10h
mov dx,offset res ; Affichage de la variable res
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 15 et colonne 30
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,15
mov dl,30
int 10h
mov dx,offset resultat ; Affichage de la variable resultat
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 15 et colonne 70
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,15
mov dl,70
int 10h
mov dx,offset signe_plus ; Affichage de la variable signe_plus
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
mov ah,02 ; Placement du curseur en ligne 20 et colonne 30
mov bh,0 ; Grace a l'interruption 10h,02h
mov dh,20
mov dl,30
int 10h
mov dx,offset zone_mess ; Affichage de la variable zone_mess
mov ax,0900h ; Grace a l'interruption 21h,09h
int 21h
ret
calculette endp

end main ; Fin du programme

2 réponses

Messages postés
23
Date d'inscription
samedi 25 décembre 2004
Statut
Membre
Dernière intervention
9 janvier 2014

Salut,

Pour gerer un clic de type "impultion" tu as plusieurs possibilites
la premiere :
- attendre que le bouton soit appuye
- attendre qu'il soit relache

le probleme, c'est que ce programme bloque toute operation
pendant les sequences d'attente,

tu peux aussi utiliser une variable (sur 1 bit) qui passera
a 1 des que l'action du bouton sera execute
cette meme action ne pouvant etre executee QUE si ce bit=0
et que le bouton est appuye
Pour remettre ce bit a 0 il suffit de verifier si le bouton est relache

Enfin, la solution que je prefere, :-)

comme la precedente, mais en utilisant une valeur 8 ou 16 bits
a chaque fois que le programme teste l'etat des boutons,
si l'un d'eux est actionne, increemente la variable
Ainsi, on peut effectuer des operations suivant le temps appuye
sur le bouton
Dans mes programmes, pour les actions qui ont des
effets "definitif" (programmes graphiques) il faut maintenir le bouton 2 secondes

j'espere t'avoir eclaire ...

a+ Francois
Messages postés
48
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
29 septembre 2009

Bonjour,

Voici un programme que j'ai posté sur mon site personnel et qui procède à l'addition.
.model small
.stack

.data


msg db "Sum of 2 integer values.","$"
msg1 db 13,10, " Input a valid integer value : ","$"
msg2 db 13,10, " Input an other integer, please : ","$"
msg3 db 13," The sum is : ","$"
acc dw 0
dix dw 10
.code

main proc
mov ax,@data
mov ds,ax
MOV AX,0

mov ah,09
lea dx,msg
int 21h

mov ah,09
lea dx,msg1
int 21h

mov ah,1
int 21h
add al,-48
mov ah,0
mov bx,ax

@1: mov ah,1
int 21h
mov ah,0
cmp al,13
je @3
add al,-48

mov cx,9

mov dx,bx
@2: add dx,bx
loop @2
mov bx,dx
add bx, ax
jne @1
@3: mov ah,2
mov dl,10
int 21h

mov ah,09
lea dx,msg2
int 21h
mov ah,1
int 21h
add al,-48
mov ah,0
mov dx,ax

@4: mov ah,1

int 21h
mov ah,0
cmp al,13
je @5
add al,-48
mov cx,ax
mov ax,dx

mul dix
mov dx,ax
add dx,cx
jne @4

@5: add bx,dx
mov ah,2
mov dl,10
int 21h


cmp bl,0
jne @6
add bl,48
mov ah,2
mov dl,bl
int 21h
jmp fin

@6: mov ax,bx


@7: cmp ax,0
je @8
mov dx,0
div dix
push dx
inc acc
jmp @7

@8: mov cx,acc

mov ah,09
lea dx,msg3
int 21h


@9: pop bx
add bl,48
mov ah,0
mov ah,2
mov dx,bx
int 21h
loop @9


fin: mov ax,4c00h
int 21h

main endp

end main