Exemple d'utilisation de récursion en Assembleur
Illustration avec une procedure de factoriel tout simple
le nombre est passé par le stack et le resultat est renvoyé dans le AX si depassement alors AX = 0
Source / Exemple :
.model small
; ici les declarations extrn
extrn putstrng:far
extrn newline:far
extrn getdec$:far
extrn putdec$:far
extrn facto:far
; d'autres extrn s'ils sont necessaires
;
.stack 256
;
.const
; ici les declaration des constantes, s'il y en a
tab db ' '
lgtab dw $ - tab
.data
; ici les declarations des variables, s'il y en a
.code
assume ds:dgroup
;
debut: mov ax, seg dgroup ; initialisation des regs
mov ds, ax
mov es, ax
;
; votre programme
;
mov bx,0 ;le compteur
mov ax,1
.while ax != 0
push bx
call facto
push ax
.if ax==0
jmp terminer
.endif
mov ax,bx
call putdec$
lea di,tab
mov cx,lgtab
call putstrng
pop ax
call putdec$
call newline
inc bx
terminer:
.endw
;FACTO
; terminez avec les instructions suivantes
mov ax, 4c00h
int 21h
FACTO PROC NEAR BASIC, x:word
LOCAL y:WORD
.if x==0
mov ax,1
.else
push x
pop y
dec x
push x
call facto
mul y
jno fin
mov ax,0
fin:
.endif
RET
FACTO ENDP
end debut
Conclusion :
Compiler avec MASM 6.15
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.