ce programme illustre la recursivite en assembleur
on utilise comme example la fonction de "FIBONACCI" et la "FACTORIEL"
Source / Exemple :
DONNE SEGMENT
MESSAGE DB 10,13,"*********CE PROGRAMME CALCULE LE SUIT DE FIBONACCI EN ASSEMBLEUR*******",10,13,'$'
UN_NUMERO DB 10,13," ENTRER LE RANG : ",'$'
RESULTAT DB 10,13," VIOCI LE RESULTAT ",'$'
MSGFACTO DB 10,13," ET POUR LE FACTORIELLE LE RESULTATA EST : ",'$'
MSGERREUR DB 10,13,"ENTRER UN NOMBRE SVP",'$'
DONNE ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DONNE
debut:
MOV AX,DONNE
MOV DS,AX
LEA DX,MESSAGE
MOV AH,09H
INT 21H
LEA DX,UN_NUMERO
INT 21H
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
CMP AL,13 ; si c'est ENTRER on va la suit du programme
JE SUIT
CMP AL,30H ;SINON ON VERIFIE SI C'EST UN CHIFFRE
JL ERREUR
CMP AL,39H
JA ERREUR
SUB AL,30H ;si oui on lui soustrait 30H
XCHG AX,BX
MUL CX ;on multiplie le resultat deja obtenu par 10
JC SUIT
ADD AX,BX ;ON L'ADDITIONNE AVEC LE NOMBRE LU
XCHG AX,BX ; on met le resultat dans bx
JMP LECT
SUIT:
MOV CX,BX ;ON MET DANS CX LE RAG
PUSH CX
CALL FIBO
MOV DX,OFFSET RESULTAT
MOV AH,09H
INT 21H
CALL AFFICHE
POP CX
CALL FACTO
MOV BX,AX
LEA DX,MSGFACTO
MOV AH,09H
INT 21H
CALL AFFICHE
JMP FIN
ERREUR:
LEA DX,MSGERREUR
MOV AH,09H
INT 21H
FIN:
MOV AH,01H
INT 21H
MOV AH,4CH
INT 21H
;*************************************************
; LA PROCEDURE NON RECURSIVE DE FIBONACCI
;*************************************************
FIBO:
XOR AX,AX
JCXZ RETOURE
MOV BX,AX
INC AX
CMP CX,1
JBE RETOURE
TANQUE:
PUSH AX
ADD AX,BX
POP BX
LOOP TANQUE
RETOURE:
RET
;***************************************************
; LA PROCEDURE D'AFFICHAGE DU RESULTAT
;***************************************************
AFFICHE:
mov cl,10
MOV AX,BX
MOV SI,0
MOV DX,0
convert:
INC SI
div CX
cmp AX,0
je BOUCLE
ADD DL,30H
PUSH DX
CWD
JMP CONVERT
BOUCLE:
ADD DX,30H
PUSH DX
BCL:
POP DX
MOV AH,02H
INT 21H
DEC SI
CMP SI,0
JNE BCL
ret
;*******************************************************************
;******************************************************************
;**** LA FONCTION FACTORIELLE RECURSIF ****
;******************************************************************
FACTO:
XOR AX,AX
INC AX
FACTORIELLE:
JCXZ RET_PROG
MUL CX
DEC CX
CALL FACTORIELLE ;ICI LE CALL EST SEULLEMENT FAIR ILLUSION A LA RECURSIVITE
; LE RESULTAT RESTERA LE MEME AVEC UN JMP MAIS TRES EFFICASSE
RET_PROG:
ret
;**** FIN DE LA PROCEDURE ******
CODE ENDS
END debut