fibonacci program - retrotruestory/M1DEV GitHub Wiki

6/4/2002 By Bill Buzbee

Here's a fibonacci program compiled with my retargeted lcc (using the new a/b register conventions).  
I still some tuning to do to improve the code generation, but it's pretty close:

; Program start
    .global _fib
    .cseg
_fib:
    enter 10
;int fib(int n) {
; if (n < 2) {
    ld.16 a,4+12(sp)
    ldi.16 b,2
    cmpb.sge a,b,L2
; return n;
    ld.16 a,4+12(sp)
    br L1
L2:
; return (fib(n-1) + fib(n-2));
    ld.16 a,4+12(sp)
    sub.16 a,1
    st.16 (sp+0),a
    call _fib
    st.16 -2+12(sp),a
    ld.16 a,4+12(sp)
    sub.16 a,2
    st.16 (sp+0),a
    call _fib
    st.16 -4+12(sp),a
    ld.16 b,-2+12(sp)
    copy a,b
    ld.16 b,-4+12(sp)
    add.16 a,b
L1:
    leave
    ret
    .global _main
_main:
    enter 14
;int main() {
; int num = 10;
    ldi.16 a,10
    st.16 -2+16(sp),a
; int result = fib(num);
    ld.16 a,-2+16(sp)
    st.16 (sp+0),a
    call _fib
    st.16 -4+16(sp),a
; printf("Fib %d -> %d\n",num,result);
    lea a,L5(dp)
    st.16 (sp+0),a
    ld.16 a,-2+16(sp)
    st.16 (sp+2),a
    ld.16 a,-4+16(sp)
    st.16 (sp+4),a
    call _printf
; return(0);
    ldi.16 a,0
L4:
    leave
       ret
L5:
    .defb 70
    .defb 105
    .defb 98
    .defb 32
    .defb 37
    .defb 100
    .defb 32
    .defb 45
    .defb 62
    .defb 32
    .defb 37
    .defb 100
    .defb 10
    .defb 0
; End of program
    .end
⚠️ **GitHub.com Fallback** ⚠️