Aide avec un prog. d'add. en lang. assembleur
spoonatte
Messages postés
85
Statut
Membre
-
nicocorico Messages postés 846 Statut Membre -
nicocorico Messages postés 846 Statut Membre -
Bonjour,
J'ai créé un programme en langage Assembleur pour l'addition de deux nombre, mais j'ai un problème que le résultat est toujours 'M' , C'est le code source :
J'ai créé un programme en langage Assembleur pour l'addition de deux nombre, mais j'ai un problème que le résultat est toujours 'M' , C'est le code source :
.Model Small .Stack 100H .Data MSG1 DB 'Saisie le premier nombre : $' ;N1 DB ?,'$' MSG2 DB 0DH,0AH,'Saisie le deuxieme nombre : $' ;N2 DB ?,'$' MSG3 DB 0DH,0AH,'La somme est : $' Somme DB ?,'$' MSG4 DB 0DH,0AH,'Press Any Key To Continue ...$' .Code MAIN PROC ;Initialize Data Segment MOV AX, @Data MOV DS, AX ;Print MSG1 MOV AH,09H LEA DX, MSG1 INT 21H ;Scan N1 MOV AH,01H INT 21H MOV BL, AL ; Enregistrer le premier nombre dans le registre BL ;Print MSG2 MOV AH,09H LEA DX, MSG2 INT 21H ;Scan N2 MOV AH,01H INT 21H ;Add BL To AL ADC AL, BL ; AL = AL + BL <==> AL = le premier nombre + le deuxiem nombre MOV SOMME, AL ; SOMME = AL ;Print MSG3 MOV AH,09H LEA DX, MSG3 INT 21H ;Print La somme MOV AH,02H LEA DX, SOMME INT 21H ;Print close msg MOV AH,09H LEA DX, MSG4 INT 21H ;Stop program MOV AH,01H INT 21H ;Return to DOS MOV AH,4CH INT 21H MAIN ENDP END MAIN
1 réponse
-
Tu cherches à afficher le nombre en passant par sa variable, ça ne peut fonctionner car il n'y a pas de fonction d'affichage de nombre, il faut pour cela le convertir en chaine de caractères...
-
-
-
-
Voici la marche à suivre:
tab db 06 dup (?) ;AX doit être initialisé avec la valeur à afficher Mov SI,offset tab[05] ; on fait pointer SI sur la fin de la chaine Mov Byte ptr [SI],'$' ; Place le caractère de fin Mov CX,10; @Bcl: Dec SI ; On commence par décrémenter car on a déjà mis '$' Xor DX,DX ; Il faut mettre DX à 0 avant la division Div CX ; Divise AX par 10, DX contient le reste Add DL,48 ; Ajoute '0' en ascii Mov [SI],DL ; Place le caractère And AX,AX ; Teste si AX vaut 0 Jnz @Bcl ; En sortie de boucle, SI pointe sur le 1er caractère du nombre Mov DX,SI Mov AH,09h Int 21 ; Affiche la chaine
-