我试图用汇编语言显示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
答案 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,...