Demande de commantaire de mes lignes de code

Fermé
lioneldou - 21 août 2011 à 17:12
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 21 août 2011 à 17:21
Bonjour, j'ai une exercice en assembleur a rendre dans 2 jours et j'ai trouvé le code.mais j'ai besoin d'explications(commentaires) de ces lignes de codes. voici l'ennoncé de lexo.

Écrire un programme d'entrainement aux tables de multiplication:
-le programme propose un calcul et attend la réponse dans un temps limité.
-il signale si la réponse est bonne ou mauvaise.
-il propose 10 calculs consécutifs et affiche le score.
-après 5 calculs corrects, le temps d'attente est diminué.


voici le code (assembleur) que j'ai et je que voudrai bien que vous commentez les différents lignes de codes.



.Model SMALL ;64 Ko pour les données, 64 Ko pour le programme
.Stack 128 ;Réserver 128 octets pour la pile

;-- Données--------------------------------------------------------------------------;

.Data ;Déclarer le segment de données

txt1 DB 10,13,"----------Entrainement aux tables de multiplication----------",10,13,10,13,"$"
txt2 DB " ","$"
txt3 DB " * ","$"
txt4 DB " = ","$"
txt5 DB 10,13,"Temps limite depasse => reponse invalide",10,13,10,13,"$"
txt6 DB 10,13,"Resultat : ","$"
txt7 DB "/10 ",10,13,10,13,"$"
true DB 10,13," Bonne reponse",10,13,10,13,"$"
false DB 10,13," Mauvaise reponse",10,13,10,13,"$"
nbreChiffre DB 3 ;nombre maximum de caractères incluant la touche "ENTER" du clavier
nbreCarLu DB ? ;nombre de caractères lentrés sans la touche "ENTER" du clavier
carEntre DB 3 DUP(?) ;caractères entrés
minute DB ?
seconde DB ?
secondeDep DB ?
tempsLimite DB ?
tmpseconde DB ?
varTmp1 DW ?
varTmp2 DB ?
nbre1 DB ?
nbre2 DB ?
resultat DW ?
valDiv DB 10
varInc DB 0
repTrouve DB 0



;-- Codes du programme -----------------------------------------------------------;

.Code
mov ax,0003H ;Permet d'effacer l'écran
int 10H

mov ax,@Data ;Adresse du segment de données dans Ax
mov ds,ax ;Puis dans Ds
mov es,ax

LEA dx,txt1
mov ah,09h
int 21h

do:
call genererNbre

mov ah,02ch ;On récupère l'heure du système
int 21h
mov seconde,DH
mov minute,CL


MOV AH,0AH ;Lecture des chiffres encodés au clavier
LEA DX,nbreChiffre
int 21h

mov AH,02ch ;On récupère l'heure du système
int 21h
cmp CL,minute
ja msgTimer


mov tmpseconde,DH
cmp DH,seconde
jae verifie_si_temps_limite1 ;Si supérieur ou égal
jb verifie_si_temps_limite2 ;Si inférieur

verifie_si_temps_limite2:
mov AL,59
sub AL,tmpseconde
cmp AL,10
JG msgTimer
jmp Debut

verifie_si_temps_limite1:
mov AL,tmpseconde
sub AL,seconde
mov tempsLimite,AL
cmp tempsLimite,10 ;Temps limite dépassé
JG msgTimer

Debut:
mov AH,nbreCarLu ;Comparaison
cmp AH,2
JGE SUP_OU_EGAL
JMP INF

SUP_OU_EGAL:
mov AL, carEntre ;Récupération des caractères encodés au clavier
sub AL,48 ;Et tranformation ASCII --> Numérique

mov AH, carEntre+1
sub AH,48
mov Byte ptr varTmp1,AH

mul valDiv ;On multiplie AL par 10
add AX,varTmp1 ;Puis on ajoute varTmp1 qui est les deuxième chiffre

cmp AX,resultat ;Je vérifie si c'est égal au résultat
je vrai ;bonne réponse
jmp faux ;Mauvaise réponse

INF:
mov AL, carEntre
sub AL, 48
cmp AL, Byte ptr resultat ;Je vérifie si c'est égal au résultat
je vrai ;bonne réponse

faux:
LEA Dx,false
mov AH,09h
int 21h
jmp verif

vrai:
add repTrouve,1
LEA Dx,true
mov AH,09h
int 21h
jmp verif

msgTimer:
LEA Dx,txt5
mov AH,09h
int 21h

verif:

add varInc,1
cmp varInc,10
je suite
jmp do

suite:
LEA Dx,txt6
mov AH,09h
int 21h

MOV AX,Word ptr repTrouve
DIV valDiv ;Division par 10

MOV nbre1,AL
MOV nbre2,AH

mov dl,nbre1
add dl,48
mov AH,02h
Int 21h

mov dl,nbre2
add dl,48
mov AH,02h
Int 21h

LEA Dx,txt7
mov AH,09h
int 21h

fin: mov AH,1 ;Lecture clavier
int 21h

mov ax,4C00h ;Quitter le programme
Int 21h ;Appeler l'interruption DOS


genererNbre proc

mov AH,02ch ;On récupère l'heure du système
int 21h
mov seconde,DH ;On récupère la seconde

mov AX, Word ptr seconde
div valDiv
mov nbre1,AH


mov AH,02ch ;On récupère l'heure du système
int 21h
mov seconde,DL

mov AX, Word ptr seconde
div valDiv
mov nbre2,AH

LEA Dx,txt2
mov AH,09h
int 21h

mov dl,nbre1 ;Affiche le premier chiffre à l'écran
add dl,48
mov AH,2
Int 21h

LEA Dx,txt3
mov AH,09h
int 21h

mov dl,nbre2 ;Affiche le deuxième chiffre à l'écran
add dl,48
mov AH,2
Int 21h

LEA Dx,txt4
mov AH,09h
int 21h

mov AL, nbre1
mul nbre2
mov resultat,AX

ret
endp



End ;Fin du programme




A voir également:

1 réponse

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
21 août 2011 à 17:21
0