Benh_m
Messages postés5Date d'inscriptiondimanche 9 septembre 2007StatutMembreDernière intervention21 décembre 2011
-
3 déc. 2011 à 15:18
Moncefben -
5 mars 2018 à 22:33
Bonjour à tous !
Alors voila, j'ai un devoir en Assembleur à faire et j'ai un problème :
je dois faire la somme de deux entiers, jusque la tout va bien, puis l'afficher.
j'ai réussi à afficher la somme tant qu'elle est inférieure à 10 mais je ne sais pas comment faire pour l'afficher lorsqu'elle est supérieur, car il y a deux (voire plus) caractères à afficher et je ne trouve pas le lien entre ma somme en code ASCII et mes deux caractères. Si quelqu'un pouvais me donner un petit coup de pousse se serait génial !
voila mon bout de code :
pile segment 'stack'
base DB 100 DUP(?)
sommet DB ?
pile ends
donnees segment 'data'
messaisie1 DB 0Dh,0Ah,0Ah,'Saisir OP1 : $'
messaisie2 DB 0Dh,0Ah,0Ah,'Saisir OP2 : $'
messresult DB 0Dh,0Ah,0Ah,'La somme est : $'
messerreur DB 0Dh,0Ah,0Ah,'erreur, le caractere doit etre un entier, recommencer : $'
OP1 DB ?
OP2 DB ?
donnees ends
inst segment 'code'
assume cs:inst, ds:donnees,ss:pile
debut:
mov ax,donnees
mov ds,ax
mov ax,pile
mov ss,ax
lea sp,sommet
; Première Saisi :
Saisie1:
;Invite_saisie :
mov AH,9
LEA DX, messaisie1
INT 21h
mov AH,1
INT 21h
MOV OP1, AL
CMP OP1, '0'
JL CasErreur1
CMP OP1, '9'
JG CasErreur1
JMP Saisie2
CasErreur1 :
mov AH,9
LEA DX, messerreur
INT 21h
JMP Saisie1
; Deuxième Saisi :
Saisie2:
;Invite_saisie :
mov AH,9
LEA DX, messaisie2
INT 21h
mov AH,1
INT 21h
MOV OP2, AL
CMP OP2, '0'
JL CasErreur2
CMP OP2, '9'
JG CasErreur2
JMP Traitement
CasErreur2 :
mov AH,9
LEA DX, messerreur
INT 21h
JMP Saisie2
; Traitement :
Traitement :
ADD OP1, AL
ADD OP1, -48
CMP OP1,'9'
;JG sup9
JMP inf10
; Affichage :
inf10 :
mov AH,9
LEA DX, messresult
INT 21h
MOV AH,2
MOV DL, OP1
INT 21h
;sup9 :
RetourSysteme:
mov ah,4Ch
int 21h
inst ends
end debut
NB : j'en suis à mon 3ème cour d'assembleur alors soyez indulgent :)
Benh_m
Messages postés5Date d'inscriptiondimanche 9 septembre 2007StatutMembreDernière intervention21 décembre 2011 14 déc. 2011 à 23:01
ah ouiiiii merci ! je faisais pareil mais en enlevant 10 à chaque fois.. mais mon problème est maintenant de réussir a trouver une méthode pour convertir en chiffre, les codes ASCII obtenus :(
BLUEBIBUBBLE
Messages postés116Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention10 avril 20131 18 déc. 2011 à 22:48
DL est intéressant parce qu'il reçoit le RESTE lors d'une division.
Example:
mov eax,Nombre a afficher
mov edi,OFFSET Fin du Tampon qui doit recevoir la chaine
mov ecx,10 ;Base 10
Label1:
xor edx,edx ;met edx a zéro
div ecx ;divise EDX:EAX par ECX, Résultat dans EAX, reste dans EDX
add dl,'0' ;'0' = Code ASCII du zéro
dec edi ;on se déplace d'un caractère vers la gauche
mov [edi],dl ;on affiche le chiffre
or eax,eax ;test si eax (Résultat) = ZÉRO
jnz Label1 ;Si pas 0, Répète pour les dizaines, les centaines, etc...
En 16 bit c'est pareil
On divise DX:AX par CX, résultat dans AX, reste dans DX
le reste tient évidemment dans DL, (0-9)
Il faudra surement préciser le segment (mov ds:[di],dl ;si je me souvient bien)
Benh_m
Messages postés5Date d'inscriptiondimanche 9 septembre 2007StatutMembreDernière intervention21 décembre 2011 19 déc. 2011 à 10:17
humm... mon prof d'assembleur m'a dit qu'on pouvait pas diviser en asm, surement qu'il veut qu'on le fasse autrement. mais je pense avoir trouver une solution pas mal ( qui marche pas mais bon ^^ )
voila mon traitement : val1 val2 et val3 corresponde respectivement au chiffre dizaine, centaine :
Traitement1 :
CMP VAL1, 9 ; on compare VAL1 qui est la somme des chiffres pour voir s'il est superieur à 9
JG sup91 ; si superieur à 9 on jump jusqu'à sup91
CMP VAL1, 9
JL Traitement2 ; sinon on jump au traitement numéro 2
sup91:
SUB VAL1,10 ; on enlève 10 à VAL1
ADD VAL2,1 ; on ajoute dans VAL2 1
JMP Traitement1
Traitement2 :
CMP VAL2, 9 ; on compare VAL2 qui est la somme des dizaine pour voir ;s'il est superieur à 9
JG sup92 ; si superieur à 9 on jump jusqu'à sup92
CMP VAL2, 9
JL Affichage ; sinon on jump à l'affichage
sup92 :
SUB VAL2,10 ; on enlève 10
ADD VAL3,1 ; on ajoute dans VAL3 1
JMP Traitement2
Affichage :
; affichage résultat de la somme
mov AH,9
LEA DX, messresult ; affichage texte
INT 21h
ADD VAL3, '0'
MOV AH,2
MOV DL, VAL3 ; centaine
INT 21h
ADD VAL2, '0'
MOV AH,2
MOV DL, VAL2 ; dizaine
INT 21h
ADD VAL1, '0'
MOV AH,2
MOV DL, OP1 ; chiffre
INT 21h