getfib: ;input: BX = the desired fibonacci number (in other words, the "n" in "F(n)") ; DS must point to the segment where the fibonacci table is stored ;outputs to DX:AX (DX = high word, AX = low word) push ds cmp bx,41 ;bounds check ja IndexOutOfBounds shl bx,1 shl bx,1 ;multiply by 4, since this is a table of dwords mov ax,@code mov ds,ax mov si,offset fib mov ax,[ds:si] ;fetch the low word into AX mov dx,2[ds:si] ;fetch the high word into DX pop ds ret IndexOutOfBounds: stc ;set carry to indicate an error mov ax,0FFFFh ;return FFFF as the error code pop ds ret ;table of the first 41 fibonacci numbers fib dword 0, 1, 1, 2, 3, 5, 8, 13 dword 21, 34, 55, 89, 144, 233, 377, 610 dword 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657 dword 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269 dword 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986 dword 102334155