00001 #include "p18cxxx.inc"
00002 global fibo
00003 PGM CODE
00004 fibo: movff FSR2L,POSTINC1 ;keretmutató mentése
00005 movff FSR1L,FSR2L ;keretmutató új értéke
00006 clrf POSTINC1 ;lokális változónak helyet csinál
00007 movlw 0xfe ;W=-2 (n címe FSR2-2)
00008 movf PLUSW2,W ;W <- (FSR2-2)
00009 movwf INDF2 ;v = n
00010 sublw 0x01 ;W = n-1
00011 bc kilep ;kilép, ha n=<1
00012 movf INDF2,W
00013 addlw 0xff
00014 movwf POSTINC1 ;paraméterátadás
00015 rcall fibo ;fibo(n-1) hívás
00016 movf POSTDEC1,F ;paraméter eltávolítás
00017 movwf INDF2 ;v = fibo(n-1)
00018 movlw 0xfe ;W = -2
00019 movf PLUSW2,W ;W = n
00020 addlw 0xfe ;W = n-2
00021 movwf POSTINC1 ;paraméterátadás
00022 rcall fibo ;fibo(n-2) hívás
00023 movf POSTDEC1 ;paraméter eltávolítás
00024 addwf INDF2 ;W = fibo(n-1)+fibo(n-2)
00025 kilep: movf INDF2,W ;eredmény elővétele
00026 movf POSTDEC1 ;verem ürítése
00027 movf POSTDEC1 ;mutató pozicionálása
00028 movff INDF1,FSR2L ;keretmutató helyreállítása
00029 return 0 ;visszatérés, eredmény W-ben
00030 END