Bonjour ! je voulais savoir ce que fais ce programme ??

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
;****************************************************************
;*		utilisations des directives d'assemblage	*
;****************************************************************
 
        name direct
 
        .MODEL SMALL
 
;******************************************
;*		zone de pile			*
;******************************************
        .STACK 100h
;******************************************
;*		zone de données			*
;******************************************
        .DATA
i		dw	?
j		dw	?
k		dw	?
rr              db      ?
compt		dw 	1
resul		dw	10 dup(?)
 
 
 
MIN		EQU	100
MAX		EQU	200
 
; La chaîne de caractère à imprimer à l'écran
affnb DB    '   ','$'
un    DW    1
dix   DW    10
 
CALL  imprnb
 
;******************************************
;*		zone de code			*
;******************************************
 affresul DB '    ','$' 
		.code
 
		;affectation de l'adresse de début du code dans ds
 
;************************************************
;*		zone de macro(segment de code)	*
;************************************************
 
;à faire
 
operation macro d1,d2,d3
 
mov ax,2*d1+3*(d2+d3)
 
 
endm
 
 
 
;************************************************
;*		point d'entrée			*
;************************************************
 
 
DEBUT:		
 
operation n1,n2,n3
 
MOV AH,04CH
  INT 21H
 
main endp
 
imprnb proc
  MOV   BX,offset affnb    ; Je lui passe une chaine de 3 caracteres
  ADD   BX,2               ; J'ai 3 chiffre mais j'avance de 2 pour pas ecraser le caractere de fin de chaine '$'
  MOV   AX,nb              ; Je recupere le nb dans AX
  MOV   CX,3               ; CX sert de compteur pour la boucle
  @@chiffreSuivant:
    PUSH  CX
    MUL   un               ; Je multiplie AX par 1 pour eviter les divisions pas 0
    DIV   dix              ; Je divise AX par 10 pour recuper le chiffre dans DL
    ADD   DL,48            ; J'additionne 48 au chiffre pour avoir le code ascii
    MOV   [BX],DL          ; Je deplace la reponse dans la chaine
    DEC   BX               ; Je me deplace dans la chaine
    POP   CX
  LOOP @@chiffreSuivant
 ; J'affiche a l'ecran la chaine qui contient le score
  MOV   AH,09h
  MOV   DX,offset affnb
  INT   21h
  RET
imprnb endp
 
 
 
;*********déclaration des types
 
;à faire
 
n1=type i
n2=type j
n3=type k
 
EX1=type rr
EX2=type rr
 
;*********initialisations
 
; à faire
 
n1=0
n2=0
n3=0
 
 
 
;************************************************
; boucle de 4 itérations de la macro 		*
;************************************************
;à faire
 
REPT 4
 
operation n1,n2,n3
 
mov resul,ax
 
 
n1=n1+1
n2=n2+2
n3=n3+3
 
 
ENDM
 
 
;************************************************
; la détection du moment ou la différence 	*
; est minimale					*
;************************************************
 
;à faire
 
 WHILE (EX1-EX2) GT 10
 
 
 EX2=EX2+1
 INC compt
 
 mov bx,compt
 
 ENDM
 
;*****************************************
;    fin
;*****************************************
        mov     ax,4c00h                ; terminaison du programme
        int     21h
        end     DEBUT