* przyklad procedury rekurencyjnej * zaglebiajacej sie do 20 razy @stack_pointer = $FF @stack_address = $400 ;--- org $2000 ;--- ; dla pewnosci zerujemy wskaznik stosu lda #0 sta @stack_pointer ; wywolujemy procedure TEST, parametrem jest wartosc 0, lub inna wartosc <20 test #0 ; petla bez konca, aby mozna bylo zobaczyc efekt dzialania loop jmp loop ; deklaracja procedury TEST test .proc {.byte war} ; odczytujemy parametr ldx @stack_pointer lda war,x ; i zwiekszamy o 1 clc adc #1 ; sprawdzamy czy osiagnelismy wartosc 20 ; jesli nie to wywolaj jeszcze raz procedure TEST cmp #20 beq quit ; wywolujemy procedure TEST, parametrem jest zawartosc akumulatora test @ ; osiagnelismy wartosc 20 wiec wracamy ; zdejmujemy wartosc odlozona na stos i umieszczamy na ekranie quit ldx @stack_pointer lda war,x ekr sta $bc40 inc ekr+1 .exit .endp icl 'macros\call.asm' icl 'macros\exitproc.asm'