在MASM中向斐波那契数列输出错误
我一直在为这个任务编写代码,似乎无法获得正确的输出结果。 任何人都可以请帮我吗?
注意:该程序在MASM中编译
以下是代码:
INCLUDE Irvine32.inc
.data
string1 byte "Enter number to generate Fibonacci series: ",0
string2 byte "Fibonacci is ",0
.code
main PROC
call DumpRegs;
mov edx,offset string1;
call writestring;
call ReadInt;
mov ecx,eax;
mov eax,1;
call DumpRegs;
dec ecx;
mov esi,eax;
JMP Jumpzero;
mov edx, offset string2;
call writeint ; Display the contents of eax register on the output device
Jumpzero:
add eax,esi;
call DumpRegs;
inc esi;
dec ecx
jnz Jumpzero
exit
MAIN ENDP
END main
; ...
call ReadInt
mov ecx,eax
mov eax,1
mov edx,eax
call writeint ; Assuming EDX is incremented by writeint
_generate:
call writeint
add eax,edx
mov edx,eax
loop _generate
; ...
哦,亲爱的,人们正在根据欧文的材料进行教学? 这解释了很多。
我认为你需要像这样思考:
你需要记住3个数字:
当前数字
以前的号码
当前和以前的总和
然后将电流移至前一个,总计至当前并继续。
因此,如果您设置为ebx =当前值,edx =之前的值,ecx =要输出的值的数量
那么你可以使用一个中央循环,如:
fib_loop:
mov eax, ebx
add eax, edx
mov edx, ebx
mov ebx, eax
call writeint
dec ecx
jnz fib_loop
注意:我正在从您的评论中看到'writeint'过程的行为,它仅在输出设备上显示eax,并假定它不会与任何其他寄存器混淆。
只有两个数字需要跟踪Fibonacci。 如果允许XCHG,逻辑将是:
swap(A, B)
A += B
如果不是,则交换需要临时变量:
D = B
B = A
A = D
A += B
A和B的初始值取决于你想要的第一个输出。 例如,从A = 1(fib(-1)),B = -1(fib(-2))开始,然后会生成序列0,1,1,2,3,5,...。 或者从A = 0(fib(0)),B = 1(fib(-1))开始,产生序列1,1,2,3,5,......
链接地址: http://www.djcxy.com/p/89853.html