在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