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