Code Assembleur
Résolu
amigos22
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
nicocorico Messages postés 799 Date d'inscription Statut Membre Dernière intervention -
nicocorico Messages postés 799 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je viens de commencer la programmation en assembleur et je me suis planter au niveau de mon premier programme,
j'aimerais écrire un programme qui accepte deux entier par le clavier et affiche la somme de ces deux dernier, j'ai essayer par ce code mais ça ne marche pas, pouvez m'aider SVP
Data Segment
chaine DB "La somme est :$"
nbre1 DB ?
nbre2 DB ?
somme db ?
Data EndS
Code Segment
Assume Cs: Code ; Ds: DATA
main: Mov AX,Data
Mov DS,AX
mov Ah,1 ; lecture de premier nbre
int 21h
mov nbre1,al
mov Ah,1 ; lecture de deuxiéme nbre
int 21h
mov nbre2,al
mov ax,nbre1
add ax,nbre2
mov somme,ax
mov DX, offset chaine
mov AH, 9h
int 21h
mov dl,somme ; affichage de la somme
mov ah,2
int 21h
mov ah,4ch
int 21h
code ends
end main
je viens de commencer la programmation en assembleur et je me suis planter au niveau de mon premier programme,
j'aimerais écrire un programme qui accepte deux entier par le clavier et affiche la somme de ces deux dernier, j'ai essayer par ce code mais ça ne marche pas, pouvez m'aider SVP
Data Segment
chaine DB "La somme est :$"
nbre1 DB ?
nbre2 DB ?
somme db ?
Data EndS
Code Segment
Assume Cs: Code ; Ds: DATA
main: Mov AX,Data
Mov DS,AX
mov Ah,1 ; lecture de premier nbre
int 21h
mov nbre1,al
mov Ah,1 ; lecture de deuxiéme nbre
int 21h
mov nbre2,al
mov ax,nbre1
add ax,nbre2
mov somme,ax
mov DX, offset chaine
mov AH, 9h
int 21h
mov dl,somme ; affichage de la somme
mov ah,2
int 21h
mov ah,4ch
int 21h
code ends
end main
A voir également:
- Code Assembleur
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
3 réponses
Oui, c'est normal que ça ne marche pas : tu oublies d'ajuster la valeur lue en ascii à laquelle il faut soustraire 48 pour récupérer un nombre et tu mélange l'utilisation de 'somme' en byte et word...
Data Segment chaine DB "La somme est :$" nbre1 DB ? nbre2 DB ? somme db ? Data EndS Code Segment Assume Cs: Code ; Ds: DATA main: Mov AX,Data Mov DS,AX mov Ah,1 ; lecture de premier nbre int 21h Sub AL,48; Js @Null Cmp AL,09; Ja @null ; test de validitée du caractère mov nbre1,al ; AH n'est pas modifié, il est inutile de le recharger ; lecture de deuxiéme nbre int 21h Sub AL,48; Js @Null Cmp AL,09; Ja @null mov nbre2,al mov al,nbre1 add al,nbre2 mov somme,al mov DX, offset chaine mov AH, 9h int 21h mov dl,somme ; affichage de la somme mov ah,2 int 21h @Null: mov ah,4ch int 21h code ends end main
ça me fait plaisir...
Et tu as dû te rendre compte que j'ai oublié d'ajouter 48 pour retransformer la somme en caractère avant sortie !
A vrai dire l'assembleur sous dos, c'est très loin pour moi, je lui préfère très nettement la version 32 bits sous delphi , très puissant et pratique !
Et tout dépend de ce que tu veux faire, mais ce code peut bien sûr être très amélioré, ici ile teste la validitée des entrées et affiche la dizaine du résultat :
Le chêne aussi était un gland, avant d'être un chêne
Et tu as dû te rendre compte que j'ai oublié d'ajouter 48 pour retransformer la somme en caractère avant sortie !
A vrai dire l'assembleur sous dos, c'est très loin pour moi, je lui préfère très nettement la version 32 bits sous delphi , très puissant et pratique !
Et tout dépend de ce que tu veux faire, mais ce code peut bien sûr être très amélioré, ici ile teste la validitée des entrées et affiche la dizaine du résultat :
Data Segment chaine DB "La somme est :$" Data EndS Code Segment Assume Cs: Code ; Ds: DATA main: Mov AX,Data Mov DS,AX mov Ah,1 ; lecture de premier nbre int 21h Sub AL,48; Js @Null Cmp AL,09; Ja @null ; test de validitée du caractère mov BL,AL ; utilise BL pour sauvegarder ; AH n'est pas modifié, il est inutile de le recharger int 21h cmp AL,48; Jb @Null Cmp AL,48 + 09 ; ici on garde la base 48 Ja @null Add BL,al mov DX, offset chaine mov AH, 9h int 21h mov ah,2 Cmp BL,48 + 10; Jb @One ; Teste si le nombre dépasse 09 Mov DL,48 + 01; int 21h ; écrit '1' Sub BL,10 ; retire la dizaine @One: mov dl,BL int 21h @Null: mov ah,4ch int 21h code ends end main
Le chêne aussi était un gland, avant d'être un chêne