迷失在 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
当我们知道前 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