;fib.asm macro recursiva para calcular a sequencia de Fibonacci com 8 bits de precisão ;MC404 2oSem 2012 - Prof Célio G. ;********************************************************************************************* .nolist .include "m88def.inc" .list rjmp start .macro fib8 ; @0= max nivel de recursão, @1 = ponteiro p/ armazenar a seq na RAM .if @0 >0 add r0,r1 st @1+, r0 brcs fim ; se overflow pare a recursão r1 terá o ultimo valor correo ($E9) eor r0,r1 ; troca r0 com r1 eor r1,r0 eor r0,r1 fim: fib8 @0-1, @1 .endif .endm ;****************************************************************************** ; a macro a seguir carrega uma constante de 16 bits num par de registradores .macro ldiw ; @0= X,Y ou Z; @1= cte de 16 bits ldi @0l, low(@1) ldi @0h, high(@1) .endm ;**************************************************************************** start: ldiw x, SRAM_START ; armazenaremos a sequencia no inicio da RAM clr r0 clr r1 inc r1 ; 0 e 1 são os valores iniciais da sequencia fib8 15,x ; 16 é o nivel maximo de recursão suportado pelo montador rjmp PC