fib: ; WRITTEN IN C WITH X86-64 CLANG 3.3 AND DOWNGRADED TO 16-BIT X86 ; INPUT: DI = THE NUMBER YOU WISH TO CALC THE FIBONACCI NUMBER FOR. ; OUTPUTS TO AX push BP push BX push AX mov BX, DI ;COPY INPUT TO BX xor AX, AX ;MOV AX,0 test BX, BX ;SET FLAGS ACCORDING TO BX je LBB0_4 ;IF BX == 0 RETURN 0 cmp BX, 1 ;IF BX == 1 RETURN 1 jne LBB0_3 mov AX, 1 ;ELSE, SET AX = 1 AND RETURN jmp LBB0_4 LBB0_3: lea DI, WORD PTR [BX - 1] ;DI = BX - 1 call fib ;RETURN FIB(BX-1) mov BP, AX ;STORE THIS IN BP add BX, -2 mov DI, BX call fib ;GET FIB(DI - 2) add AX, BP ;RETURN FIB(DI - 1) + FIB(DI - 2) LBB0_4: add sp,2 pop BX pop BP ret