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