Fibonacci sequence: Difference between revisions
Content added Content deleted
Puppydrum64 (talk | contribs) |
|||
Line 221: | Line 221: | ||
JNZ LOOP ; jump if not zero |
JNZ LOOP ; jump if not zero |
||
RET ; return from subroutine</lang> |
RET ; return from subroutine</lang> |
||
=={{header|8086 Assembly}}== |
|||
Is it cheating to write it in C for 64-bit x86 then port it to 16-bit x86? |
|||
The max input is 25 before you start having 16-bit overflow. |
|||
<lang asm>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</lang> |
|||
=={{header|8th}}== |
=={{header|8th}}== |