Demande de commantaire de mes lignes de code
lioneldou
-
zipe31 Messages postés 38797 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 38797 Date d'inscription Statut Contributeur Dernière intervention -
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
É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:
- Demande de commantaire de mes lignes de code
- Code ascii - Guide
- Code de déverrouillage oublié - Guide
- Partage de photos en ligne - Guide
- Code de triche gta 4 - Guide
- Code puk bloqué - Guide