XOR BX, BX
FIB PROC
CMP AX, 0x0
JE FIN_CERO
CMP AX, 0x01
JE FIN_UNO
DEC AX
PUSH AX
DEC AX
CALL FIB
; En este momento BX tiene el resultado de S(n - 2)
; el tema es que en el proximo CALL FIB, estas pisando BX, con el nuevo valor es decir el de S(n - 1), tendrías que guardar S(n - 2) antes de la llamada
; ej: guardando S(n - 2) en CX
mov CX, BX
POP AX
CALL FIB
; En este momento BX tiene el valor de S(n-1)
; Está faltando sumar BX:= S(n - 1) + S(n - 2) ?
; es decir, BX:= BX + CX
ADD BX, CX
RET
FIN_CERO:
ADD BX, 0
RET
FIN_UNO:
ADD BX, 1
RET