在TASM Assembly上丢失了斐波那契系列

时间:2015-09-30 23:46:36

标签: loops assembly x86-16 tasm

当我们知道前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个寄存器进行计算吗?

2 个答案:

答案 0 :(得分:1)

两次尝试都很接近,两者都缺少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。你的问题并不完全清楚,但这是两次不同的尝试,对吗?他们不会在同一个应用程序中一起工作: - )

答案 1 :(得分:1)

我不知道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