mgorillaz
Messages postés13Date d'inscriptionmercredi 8 décembre 2004StatutMembreDernière intervention20 janvier 2008
-
14 déc. 2004 à 11:54
PCBill
Messages postés48Date d'inscriptionlundi 25 décembre 2006StatutMembreDernière intervention29 septembre 2009
-
4 juin 2008 à 11:31
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
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
Forthman
Messages postés23Date d'inscriptionsamedi 25 décembre 2004StatutMembreDernière intervention 9 janvier 2014 25 déc. 2004 à 12:45
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
PCBill
Messages postés48Date d'inscriptionlundi 25 décembre 2006StatutMembreDernière intervention29 septembre 2009 4 juin 2008 à 11:31
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