在Fibonacci系列中打印前27个值

时间:2015-09-27 03:09:57

标签: assembly masm fibonacci irvine32

我试图用汇编语言显示Fibonacci系列中的前27个值。我遇到了很多麻烦。我一直在四处走动所以请帮助我。我所看到的对我来说没有意义。

TITLE Fibonacci
INCLUDE Irvine32.inc
.code
main PROC
mov ebp, 0
mov edx, 1
mov ebx, edx
mov ecx, 27
L1:
mov eax, edx
mov ebp, eax
mov edx, ebx
add ebx, ebp
call DumpRegs
call WriteInt
loop L1
exit
main ENDP
END main

2 个答案:

答案 0 :(得分:1)

首先不要尝试在循环中包含前两个数字。它不付钱!

在您的代码中,您初始化EBP = 0,但这是不必要的。即使不使用EBP,您也可以完成这项工作。

这是我对27个斐波那契数字的简约版本:

 mov  eax, 1
 call WriteInt
 call WriteInt
 mov  edx, eax
 mov  ecx, 27-2
L1:
 xchg eax, edx
 add  eax, edx
 call WriteInt
 loop L1

确保 DumpRegs WriteInt 等例程保留您在代码中使用的寄存器。

答案 1 :(得分:1)

如果我们使用不太直观的设置,我们可以显示来自单个循环的所有27个Fibonacci数字!

mov  ecx, 27
mov  eax, 1
cdq             ;EDX becomes 0
L1:
call WriteInt
xchg eax, edx
add  eax, edx
loop L1

此解决方案输出 1,1,2,3,5,8,13,...... ,但有些作者在 0 处开始斐波纳契系列。要做到这一点,只需在循环之前执行1个单独的 WriteInt 并使用26的计数器。

mov  ecx, 26
xor  eax, eax
call WriteInt
inc  eax
cdq             ;EDX becomes 0
L1:
call WriteInt
xchg eax, edx
add  eax, edx
loop L1

现在输出将为 0,1,1,2,3,5,8,...