; Pour cet exemple, la pile n’est pas nécessaire. DW 100 DUP (?) PILE ENDS affiche macro chaine ; macro pour afficher une chaîne de ; caractères MOV DX,offset chaine ; offset renvoie l’adresse de début de chaine MOV AH, 09h ; fonction qui affiche une chaîne de caractères INT 21h ENDM ; fin de la macro DATA SEGMENT ; déclaration de variables val1 db 0 val2 db 0 recup_val1 db 10,13,'veuillez taper le nombre1 :',32,'$' ; 10 et 13=endl du C recup_val2 db 10,13,'veuillez taper la nombre2 :',32,'$' aff_resu db 10,13,'la somme est:',32,'$' ; $ caractère de fin de chaine DATA ENDS CODE SEGMENT ; zone de code ASSUME CS:CODE, DS:DATA ; génération de l’adresse du segment de code et de données DEBUT: ; entrée du code MOV AX, DATA ; Initialiser le registre DS pour récupérer l’adresse du segment de donnée MOV DS, AX ; à partir d’ici on peut placer nos lignes de code affiche recup_val1 ; appel de macro pour afficher un message contenu dans recup_val1 MOV AH,1 ; faire une lecture au clavier grâce à la fonction 1 le caractère tapé sera placé dans INT 21h MOV val1,AL affiche recup_val2 ; appel de la macro pour afficher un message sur écran MOV AH,1 ;faire une lecture au clavier INT 21h ADD AL,val1 ; AL = AL + val1 MOV val2,AL
affiche aff_resu ; appel de la macro pour afficher un message sur écran
SUB val2,30h ; les valeurs lues tantôt sont en ascii; exemple : ; si on tape les valeurs 1 et 2, ; le programme récupère 31 et 32, valeurs ; hexadécimales des caractères 1 et 2. ; Donc 31 + 32 = 63. et 63 n’est pas la valeur hexa ; du caractère 3. Sa valeur est 33 ; autrement dit, on doit retirer 30 en hexa ou 48 en ; décimal. MOV AH,2 ; afficher la valeur saisie grâce à la fonction 2 qui affiche le contenu de DL MOV DL,val2 INT 21h MOV AH, 4Ch ; on termine le programme avec la fonction MOV AL, 0 ; 4c en hexa. On place une valeur >=0 pour dire INT 21h ; que l’exécution s’est déroulée correctement. ; Équivalent en c de return 0 CODE ENDS ; fin du segment de code END DEBUT