Addition pourtant simple

cs_nostra Messages postés 3 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 14 mars 2003 - 14 mars 2003 à 18:41
littlefl Messages postés 21 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 2 juillet 2003 - 15 mars 2003 à 09:02
:-p Big toto

Je n'arrive pas à afficher le résultat de l'addition malgré les remarques de Nemesis. Merci de trouver le ou les erreurs commises.

;-----------------------------------------------;
; Pour Compiler: tasm32 tlink ;
;-----------------------------------------------;

; SEGMENT DE DATA-------------------------------
data16 segment public ; déclaration du segment de data
titre db 10,10
db " **********************************************",10,13
db " * *",10,13
db " * OPERATION SIMPLE *",10,13
db " * ADDITION DE 2 NOMBRES *",10,13
db " * *",10,13
db " **********************************************",10,10,13,'$'

message_A db 10,13," Soit A = ",'$'; une variable
message_B db 10,13," Soit B = ",'$'; une variable
message_AB db 10,10,13," A + B = ",'$'; le résultat de l'addition

Valeur_A db "3$"
Valeur_B db "2$"

data16 ends

; SEGMENT DE CODE----------------------------
code16 segment public ; déclaration du segment de code
assume cs:code16, ds:data16, ss:stack16

start16:
; Adapte le segment de data: ds
mov ax, data16 ; ax = data16
mov ds, ax ; ds = ax

; Saisie de l'identifiant et du passe
debut:

mov dx, offset titre ; offset de titre
mov ah, 09h ; Afficher un texte à l'écran
int 21h ; Interruption DOS

; Affiche la valeur de A
mov dx, offset message_A
int 21h ; Interruption DOS
mov dx,offset Valeur_A
int 21h ; Interruption DOS

; Affiche la valeur de B
mov dx, offset message_B
int 21h ; Interruption DOS
mov dx, offset Valeur_B
int 21h ; Interruption DOS

; Calcule A + B
add dx, offset valeur_A ; Ajoute dans Valeur_B la Valeur_A
push dx ; Empile (Valeur A+B)

; Affiche le résultat de A + B
mov dx, offset message_AB
int 21h ; Interruption DOS
pop dx ; Dépile (Valeur A+B)
int 21h ; Interruption DOS


; Quitte le programme
mov al, 00h ; pas de problèmes
mov ah, 4ch ; quitter le programme
int 21h ; Interruption DOS

code16 ends ; fin de text

; SEGMENT DE STACK----------------------------
stack16 segment stack
db 200h dup (?)
stack16 ends

end start16 ; fin du programme
; débute à 'start16'

1 réponse

littlefl Messages postés 21 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 2 juillet 2003
15 mars 2003 à 09:02
Oulala, ça fait bien longtemps que j'ai aps touché l'ASM 16 bits lol.

Bon alors déjà, ton addition est fausse, tu additionnes l'adresse de valeur_A avec celle de Valeur_B.

Après, quoiqu'il en soit, ton addition ne peut pas marcher, parce-que tout simplement tes variables sont de type string et non word ou byte !

En ASM, ce n'est pas comme en C, la routine d'affichage n'est pas aussi flexible, elle n'accepte que les chaînes.

La solution : Convertir ta chaîne en word puis additionner les deux. Il n'y a pas de routine de convertion en ASM, faut la faire toi même mais regarde sur ce site, il doit y en avoir.

Bon voilà, je crois que c'est tout, écrit mov ax, 4c00h au lieu de mov al, 00h et mov ah, 4ch
0
Rejoignez-nous