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 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
| INCLUDE numtoalfa.inc
.MODEL small,stdcall
.STACK 8192
.386
.DATA
nb dw 9
tab dd 50,2,3,40,1,6,7,8,9
som dd 0
moyenne dd 0
maximum db " le maximum est: $"
minimum db " le minimum est: $"
average db " la moyenne est: $"
somme db " la somme est: $"
min dd 0
max dd 0
.CODE
maxProc proc
push bp
mov bp,sp
xor eax, eax
mov cx, word ptr [bp+4] ;nb=9
mov bx, word ptr [bp+8] ;adresse de tab
xor si,si
;trouve le maximum
plusgrand:
mov eax,dword ptr[bx][si]
parcourir:
add si,4
dec cx
cmp eax,dword ptr[bx][si]
jl plusgrand
cmp cx,0
jnz parcourir
mov bx,word ptr[bp+6] ;met l'offset de max dans bx
mov dword ptr[bx],eax ;met le résultat, le maximum dans la variable max
pop bp
ret 6
maxProc ENDP
minProc proc
push bp
mov bp,sp
xor eax, eax
mov cx, word ptr[bp+4] ;nb=9
mov bx,word ptr [bp+8] ;adresse de tab
xor si,si
;trouve min
pluspetit:
mov eax,dword ptr[bx][si]
parcourir2:
add si,4
dec cx
cmp dword ptr[bx][si],eax
jl pluspetit
cmp cx,0
jnz parcourir2
;dtoaDUN eax
mov bx,word ptr[bp+6] ;met l'offset de min dans dx
mov dword ptr[bx],eax
pop bp
ret 6
minProc ENDP
AddTab proc
push bp
mov bp,sp
xor eax, eax
mov cx, word ptr [bp+4] ; nb=9
mov bx, word ptr [bp+6] ; adresse de tab
xor si, si
bcl:
add eax, dword ptr [bx][si] ; ajout de chacun des 9 termes du tableau
add si, 4 ; avance dans le tableau
dec cx
jnz bcl
mov bx, word ptr [bp+8] ; l'adresse de <som> est mise dans bx
mov dword ptr [bx], eax ; la somme eax est transférée
pop bp
ret 6 ; prend l'adresse de retour puis remonte de 8 dans la pile
AddTab ENDP
Calculmoyenne proc
push bp
mov bp,sp
xor edx,edx
mov ecx,dword ptr [bp+4] ;met nb=9 dans ebx
mov eax,dword ptr [bp+6] ;met la somme dans eax
div ecx
mov bx,word ptr[bp+8] ;l'adresse de <moyenne> est mise dans bx
mov dword ptr[bx],eax ;met le résultat de la division dans moyenne
pop bp
ret 6
Calculmoyenne ENDP
main proc
mov ax,@data
mov ds, ax
mov es, ax
;fonction qui trouve le maximum
push offset tab
push offset max
push nb
call maxProc
; affichage de le max
mov ah, 09h
mov dx, offset maximum
int 21h
dtoaDUN max
;fonction qui trouve le minimum
push offset tab
push offset min
push nb
call minProc
; affichage de le min
mov ah, 09h
mov dx, offset minimum
int 21h
dtoaDun min
;somme
push offset som
push offset tab
push nb
call AddTab ; retour dans eax
; affichage de la somme
mov ah, 09h
mov dx, offset somme
int 21h
dtoaDUN som
;moyenne
push offset moyenne
push som
push nb
call Calculmoyenne
; affichage de la moyenne
mov ah, 09h
mov dx, offset average
int 21h
dtoaDUN moyenne
; attente d'une touche
mov ah, 00h
int 16h
; fin du programme
mov ah, 4Ch
mov al,0
int 21h
; et retour au DOS
main ENDP
END main |
Partager