31 lines
900 B
Plaintext
31 lines
900 B
Plaintext
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
|