迷失在 TASM 大会上的斐波那契数列

Lost with fibonacci series on TASM Assembly

当我们知道前 2 个元素时,我得到了一份大学作业来计算 10 个元素的斐波那契数列。 我在过去的几个小时里一直在尝试这样做,但我在途中迷路了。

这是我的代码:

IDEAL
MODEL small
STACK 100h
DATASEG

Fiburnachi db 0, 1, ?, ?, ?, ?, ?, ?, ?, ?
TenTimes db 8


CODESEG

start:
    mov ax, @data
    mov ds, ax
    xor ax, ax
    xor bx, bx
    xor cx, cx


    mov cl, [TenTimes]
    lea bx, [Fiburnachi]
    FibLoop:
        mov al, [bx]       //This is my first attempt.
        add al, [bx+1]     //i have tried using only the "ax" register,
        inc [bx]           //i can't seem the find the correct way to
        mov [bx], al       //store the value I have in al (last result)

        mov al, [bx]       //This Doesn't work I dunno why really.
        mov dl, [bx+1]
        add al, dl
        mov [bx+1], al
        inc [bx]

    FibLoop

我认为我对通过数组索引正确循环和赋值的理解是错误的。

正确的做法是什么?我是否必须为计算本身使用 2 个寄存器?

两次尝试都很接近,都缺少 loop 命令。

第一个会这样工作:

mov al, [bx]
add al, [bx+1]
inc [bx]           
mov [bx+1], al // need to write to the next position

第二个:

mov al, [bx]
mov dl, [bx+1]
add al, dl
inc [bx] // need to increment before writing
mov [bx+1], al

并以 loop FibLoop.

结束

P.S。您的问题并不完全清楚,但这是两次独立的尝试,对吗?他们不会在同一个应用程序中一起工作:-)

我不知道 TASM,但我怀疑 inc [bx] 会在内存中递增一个字节(或字?),而不是递增 bx,在这种情况下,语法是 inc bx。

替代示例

        lea     bx,[Fiburnachi+2]
fib0:   mov     al,[bx-2]
        add     al,[bx-1]
        mov     [bx],al
        inc     bx              ;increment bx, not memory?
        loop    fib0