Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Probleme de clic !!!! [ Archives / Forum general 80xxx ] (mgorillaz)

mardi 14 décembre 2004 à 11:54:15 | Probleme de clic !!!!

mgorillaz

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

samedi 25 décembre 2004 à 12:45:11 | Re : Probleme de clic !!!!

Forthman

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

mercredi 4 juin 2008 à 11:31:12 | Re : Probleme de clic !!!!

PCBill

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



Cette discussion est classé dans : int, mov, interruption, 21h, 10h


Répondre à ce message

Sujets en rapport avec ce message

loader problème de code [ par TRAX44 ] salut tout le monde !!g essayer de faire un loader (petit prog qui charge un autre prog) mais c un desartre je comprend pas très bien ce qui ne marche Help : afficher une chaine de caractère "mémorisée" [ par did2604 ] Bonsoir à tous. Mon problème peut vous paraître très simpliste, mais pour quelqu'un qui fait de la programmation assembleur depuis à peine 1 mois, tou [nasm] cryptage [ par sirozz ] Salut à tous !J'ai fait un petit prog qui crypte (xor) un fichier passé en ligne de commande, mais j'ai fait ça avec le guide des interruptions sous l interruption du clavier sous linux [ par xian2 ] bonjour,je voudrais connaitre l'equivalent de l'interruption 6 du int 21h du DOS.elle permet de lire le clavier sans afficher le caractère lu.mon co probleme avec un bootloader [ par anonyme_man_in_this_world ] salut !! je voudrais coder un bootloader , tous ce compile bien ,je copie / colle le fichier .BIN dans une disquette ,mais lors le redemmarrage d Problème de restitution d'une chaîne. [ par Sawteeth ] Bonsoir. Je viens de débuter l'assembleur et j'ai tenté de faire un petit programme qui lit une chaîne au clavier et l'affiche à l'écran. Le problème afficher un caractère avec int 10h [ par thicdorb ] bonjour à tous,je suis débutant en assembleur et je commence par le début : afficher un caractèrej'utilise l'inteeruption BIOS 10h    mov    al, 'A'   Mini OS !! debut [ par Hardouz ] salut a tous ! je debut en ASM je vx bosser un px en ASM je connais l'architechture ect !!! j'ai fais un pti programme mais il ya un probléme 1/ lors interruption [ par aboulkhir ] salut j essaye de gerer le clavier en interruption en asselmbleur voila mon programme je travaille sous debug en invite de commande de windowsclimo modification d'interruption au boot [ par Yoha ] Bonjour, je me suis remis à l'assembleur (sous debug pour éviter les compilations) et j'ai modifié l'interruption 80h. Cela fonctionne très bien sous


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,20 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.