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
| data segment
bienvenu db 10,13,"***Ce programme Calcul le factoriel d'un nombre donnee en entree***",10,13,'$'
msg db 10,13,"donnez votre chiffre",'$'
msg1 db 10,13,"le resultat est:",'$'
result db ?
erreur db 10,13,"Erreur,veuillez rentré un chiffre",'$'
data ends
ma_pile segment stack
dw 256 dup (?)
TOS LABEL WORD
ma_pile ends
code segment
assume cs:code,ds:data, ss:ma_pile
debut:
mov ax,data
mov dx,ax
mov ah, 9
lea dx, bienvenu
int 21h
;affichage du message bienvenu
lea dx,msg
MOV BX,0
MOV CX,10
;LECTURE ET CONVERTION DES DU NOMBRE LU DANS LE REGISTRE BX
LECT:
MOV AH,01H ;on lit un caractaire
INT 21H
CBW
SUB AL,30H ;si oui on lui soustrait 30H
push ax
call near ptr fact
pop cx
pop bp
;fin de la procedure fact
lea dx,msg1
mov ah,9
int 21h
;pour afficher 'le resultat est'
lea dx,result
mov ah,9
int 21h
;pour afficher le resultat
mov ax,4c00h
int 21h
;retour au systeme
fact near ptr proc
push bp
mov bp, sp
push cx
mov cx, [bp+4]
;cx reçoit la valeur du chiffre
mov ax, 1
boucle1:
mul cx
loop boucle1
;appel recursive jusqu'a trouvé la valeur 1
mov result,cx
;pour l'affichage du resultat
ret
fact endp
ends code
end debut |
Partager