begin process at 2012 05 25 02:03:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Divers

 > 

Débutant(e)

 > 

afficher la somme de 2 entiers superieur à 9


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

afficher la somme de 2 entiers superieur à 9

samedi 3 décembre 2011 à 15:18:46 | afficher la somme de 2 entiers superieur à 9

Benh_m

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 :

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 :)
mercredi 14 décembre 2011 à 21:59:06 | Re : afficher la somme de 2 entiers superieur à 9

BLUEBIBUBBLE

comme on est en base 10, il faut un algo du style:

Début:
- diviser la valeur par 10
- afficher le reste
- si la valeur > 0 => jmp Début

on affiche l'unité en premier, puis les dizaines, puis les centaine, etc...
mercredi 14 décembre 2011 à 23:01:08 | Re : afficher la somme de 2 entiers superieur à 9

Benh_m

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 :(
jeudi 15 décembre 2011 à 09:07:49 | Re : afficher la somme de 2 entiers superieur à 9
jeudi 15 décembre 2011 à 09:09:00 | Re : afficher la somme de 2 entiers superieur à 9

BLUEBIBUBBLE

ou plutôt:
add dl,'0'
jeudi 15 décembre 2011 à 18:44:43 | Re : afficher la somme de 2 entiers superieur à 9

Benh_m

quel est la différence entre AL et DL ?

donc si j'ai bien compris, je fais tout mon traitement et à la fin pour l'affichage j'ajoute '0' à mes variables ?
dimanche 18 décembre 2011 à 22:48:38 | Re : afficher la somme de 2 entiers superieur à 9

BLUEBIBUBBLE

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)
lundi 19 décembre 2011 à 10:17:22 | Re : afficher la somme de 2 entiers superieur à 9

Benh_m

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 :

Code :
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
mardi 20 décembre 2011 à 22:48:36 | Re : afficher la somme de 2 entiers superieur à 9

BLUEBIBUBBLE

Inutile d'afficher les centaines, si le plus grand nombre saisissable est 9...
... 9 + 9 = 18
mercredi 21 décembre 2011 à 02:47:34 | Re : afficher la somme de 2 entiers superieur à 9

Benh_m

ah oui pardon, c'est parce que je suis passé a la question suivante à savoir faire la somme de deux nombres a deux chiffres ^^ donc au max 99+99= 198


Cette discussion est classée dans : int, db, mov, 21h, op1


Répondre à ce message

Sujets en rapport avec ce message

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 assembleur/ patronyme [ par maxverypainful ] Bonjour, je suis nouveau en tant qu'étudiant en informatique de gestion et j'ai une question concernant un code que nous devons créer.Il a pour but de probleme d'affichage d'une soustraction [ par calimerros ] [u]Bonjour à tous et à toutes.[/u] Voici un programme que je réalise et je bloque au niveau de l'affichage d'une soustraction (SUB). Pour moi mon pr Addition ASM [ par GibsonUSA ] Bonjour a tous, je débute en ASM 16bits et je bloque pour faire une addition de deux chiffres saisis par l'utilisateur. Voila ce que j'ai fais. A l' Saisie & Calcul de sa taille de caractère en tasm [ par baz13shaz ] je veut saisir une chaine de caractère & calculer sa taille,et je veut charger la chaine saisie en mémoire centrale? que doit je faire? comment je peu Mon fichier Mp3 [ par li2k ] Salut!J'aimerai créer en assembleur un programme qui lance la lecture d'un fichier mp3 (Juste pour faire mon réveil personnalisé  sur ordi)Mais bon le un code en assembleur [ par tatouna ] salut à tous, je suis débutante en asm donc j'ai un problème et je souhaite que vous m'aidiez j'ai une chaine de caractère (une date) et je veut la p 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 Lecture de DTA [ par mouadestla ] Bonsoir , je débute en assembleur , j'esseye de coder en 16 bits un petit programme qui fait appele à l'interuptions 21h : 4Eh du DOS qui cherche un f tp assembleur i3 pour la FST [ par babbiverus ] main proc mov ax,@Datamov ds, axmov si,offset tabmov cx, 16mov bx,0saisie:  mov dx,offset commande;afficher "saisir un nombre"mov ah,9int 21hmov ah, 1


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales