RosettaCodeData/Task/Fibonacci-sequence/8086-Assembly/fibonacci-sequence-1.8086

31 lines
952 B
Text
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
fib:
2026-04-30 12:34:36 -04:00
; 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
2023-07-01 11:58:00 -04:00
push BP
push BX
push AX
2026-04-30 12:34:36 -04:00
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
2023-07-01 11:58:00 -04:00
jne LBB0_3
2026-04-30 12:34:36 -04:00
mov AX, 1 ;ELSE, SET AX = 1 AND RETURN
2023-07-01 11:58:00 -04:00
jmp LBB0_4
LBB0_3:
lea DI, WORD PTR [BX - 1] ;DI = BX - 1
2026-04-30 12:34:36 -04:00
call fib ;RETURN FIB(BX-1)
mov BP, AX ;STORE THIS IN BP
2023-07-01 11:58:00 -04:00
add BX, -2
2026-04-30 12:34:36 -04:00
mov DI, BX
call fib ;GET FIB(DI - 2)
add AX, BP ;RETURN FIB(DI - 1) + FIB(DI - 2)
2023-07-01 11:58:00 -04:00
LBB0_4:
2026-04-30 12:34:36 -04:00
add sp,2
2023-07-01 11:58:00 -04:00
pop BX
pop BP
ret