Assembleur 8086
Fermé
mucucu2
Messages postés
1
Date d'inscription
mardi 3 juin 2014
Statut
Membre
Dernière intervention
3 juin 2014
-
Modifié par mucucu2 le 3/06/2014 à 02:12
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 - 4 juin 2014 à 09:42
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 - 4 juin 2014 à 09:42
1 réponse
nicocorico
Messages postés
799
Date d'inscription
dimanche 19 juin 2011
Statut
Membre
Dernière intervention
3 juillet 2018
138
4 juin 2014 à 09:42
4 juin 2014 à 09:42
Bonjour,
oui c'est normal, c'est que tu demande à une instruction affichant un seul caractère d'en afficher deux! Il faut bel et bien utiliser deux fois l'instruction d'affichage en prenant soin de diviser la valeur par dix pour recueillir le premier et le second caractère à afficher en ajoutant à chacun 30h. Tu auras l'un et l'autre en effectuant une seule division, en considérant le résultat et le reste de la division. Il est aussi possible de simplement tester si la valeur dépasse 09 ou non, et en déduire s'il faut afficher "1" devant.
Par ailleurs, puisque ton programme ne prévois pas de tester les bornes des caractères entrés, il est plus simple d'additionner les deux résultats dans la même variable puis de soustraire 60h directement, plutôt que séparément..
Je te montre juste l'extraie de la la modification envisageable pour l'addition, et je te laisse apprendre par toi-même sur le reste! Il serait aussi possible de stocker la valeur dans des registres non modifiés par les interruptions suivantes plutôt qu'en mémoire, mais ça changerait peu de choses.
oui c'est normal, c'est que tu demande à une instruction affichant un seul caractère d'en afficher deux! Il faut bel et bien utiliser deux fois l'instruction d'affichage en prenant soin de diviser la valeur par dix pour recueillir le premier et le second caractère à afficher en ajoutant à chacun 30h. Tu auras l'un et l'autre en effectuant une seule division, en considérant le résultat et le reste de la division. Il est aussi possible de simplement tester si la valeur dépasse 09 ou non, et en déduire s'il faut afficher "1" devant.
Par ailleurs, puisque ton programme ne prévois pas de tester les bornes des caractères entrés, il est plus simple d'additionner les deux résultats dans la même variable puis de soustraire 60h directement, plutôt que séparément..
Je te montre juste l'extraie de la la modification envisageable pour l'addition, et je te laisse apprendre par toi-même sur le reste! Il serait aussi possible de stocker la valeur dans des registres non modifiés par les interruptions suivantes plutôt qu'en mémoire, mais ça changerait peu de choses.
mov ah,01h
int 21h
mov a,al
mov dx,offset retour
mov ah,9h
int 21h
mov dx,offset msg2
mov ah,9h
int 21h
mov ah,01h
int 21h
sub al,60h // On soustrait directement 2*30h
add a,al // et on stocke le résultat de l'addition
mov dx,offset retour
mov ah,9h
int 21h
mov al,a