我需要这个程序来写出一个文件,其中包含斐波那契数列的前47个值。我的过程使用提供的库中包含的过程正确显示47个条目,但它不会将它们打印到文件中。
我相当确定它将数组存储在esi中,但我的fib.bin文件只有一个条目,而不是数组的开头。我很确定我需要做的就是使用esi,但我无法弄明白,提前谢谢。
TITLE Fibonacci Numbers (FibNums.asm)
INCLUDE Irvine32.inc
.data
fileHandle DWORD ?
filename BYTE "fib.bin",0
FIB_COUNT = 47
array DWORD FIB_COUNT DUP(?)
.code
main PROC
;Creates the file
mov edx,OFFSET filename
call CreateOutputFile
mov fileHandle,eax
;Generates the array of values
mov esi,OFFSET array
mov ecx,FIB_COUNT
call generate_fibonacci
;Write out to file
mov eax,fileHandle
mov edx,OFFSET array
mov ecx,SIZEOF array
call WriteToFile
;Close the file
mov eax,fileHandle
call CloseFile
exit
main ENDP
;--------------------------------------------------
generate_fibonacci PROC USES eax ebx ecx
;
;Generates fibonacci values and stores in an array
;Receives: ESI points to the array, ECX = count
;Returns: Nothing
;---------------------------------------------------
mov eax,1
mov ebx,0
L1: add eax,ebx
call WriteDec
call Crlf
mov [esi],eax
xchg eax,ebx
loop L1
ret
generate_fibonacci ENDP
END main
答案 0 :(得分:0)
你必须增加esi:
...
L1: add eax,ebx
call WriteDec
call Crlf
mov [esi], eax
xchg eax, ebx
add esi, 4 ; move forward 4 Bytes (4*8 bits) = 1 dword (1*32 bits)
loop L1
...
答案 1 :(得分:0)
L1: add eax,ebx
call WriteDec
call Crlf
mov [esi],eax
xchg eax,ebx
***add esi,TYPE array***
loop L1
有趣的解决方案,只需要向esi添加TYPE数组,移动它在寄存器中输出答案的位置。现在100%工作。