;fib.asm     Calcula a sequencia de Fibonacci com 8 bits de precisão
;			 Celio G.			 Out 2003

	list      p=16F877             ; list directive to define processor
FSR		EQU   0x04                ; reg apontador
INDF	EQU   0x00		    ; reg indireto
w		EQU    0
f		EQU	1

f0		EQU 0ch                   ; endereço da variável f0
f1		EQU f0+1
f2		EQU f1+1
fibseq  EQU 10h			  ; endereço inicial do vetor p/ seq

	ORG 0x000

	movlw fibseq
	movwf FSR            ; FSR recebe endereço do vetor
	clrf f0		; 0=>f0
	clrf INDF               ; 0 => (FSR)
	incf FSR                ; aponta p/ proximo
	clrf f1
	incf f1		; 1=> f1
	clrf INDF
	incf INDF		; 1 => (FSR)
	incf FSR		; aponta p/ próximo
loop
	movf f0,w		; f0 =>w
	addwf f1,w	; f0+f1 =>w
	bc done                 ; se CY terminamos
	movwf f2		; f0+f1 =>f2
	movwf INDF           ; f0 + f1 => (FSR)
	incf FSR		; aponta p/ proximo elemento do vetor
	movf f1,w		; f1 =w
	movwf f0		; f1=> f0
	movf f2,w		; f2 =>w
	movwf f1		; f2 => f1
	b loop
done:
	sleep
 END                  

