好吧,我觉得我非常接近解决这个问题,但我对此做的一切似乎都有效。 该程序必须创建47个斐波纳契数列,然后将它们存储在DWORDS数组中,然后将其写入文件(fib.bin)。格式化有点搞砸但如果你需要任何澄清,我会尽力帮助。
INCLUDE Irvine32.inc
.data
fileHandle DWORD ?
filename BYTE "fib.bin", 0
FIB_COUNT = 47
array DWORD FIB_COUNT DUP(?)
.code
main PROC
; Create the file
mov edx,OFFSET filename
call CreateOutputFile
mov fileHandle,eax
; Generate the array of values
mov esi,OFFSET array
mov ecx,FIB_COUNT
call generate_fibonacci
; Write the array to a 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 ebp, 0
mov edx, 1
mov ebx, edx
mov ecx, 47
L1:
mov eax, edx
mov ebp, eax
mov edx, ebx
add ebx, ebp
; dec ecx
loop L1
ret
generate_fibonacci ENDP
END main
我看到的问题是它没有返回任何东西,我无法找到我需要它返回的东西。我已经尝试过它返回各种寄存器,但所有寄存器都出错了。
答案 0 :(得分:0)
在课堂上做了这个:
INCLUDE Irvine32.inc
.data
fileHandle DWORD ?
fileName BYTE "myFile.bin", 0
arrSize = 47
myArray DWORD arrSize DUP(?)
.code
main PROC
call Clrscr
;Create the file
mov edx, OFFSET fileName
call CreateOutputFile
mov fileHandle, eax
;Call array process
mov esi, OFFSET myArray
mov ecx, arrSize
call GetFib
;Write array
mov eax, fileHandle
mov edx, OFFSET myArray
mov ecx, SIZEOF myArray
call WriteToFile
;close
mov eax, fileHandle
call CloseFile
exit
main ENDP
GetFib PROC USES eax ebx ecx
;--------------------------------
;Generates fibonnaci sequence and stores in array
;Recieves: ESI points to the array, ECX is the number of values
;Returns: Nothing
;--------------------------------
;Set starting values
mov eax, 1
mov ebx, 0
L1:
;Add the second number to the first
add eax, ebx
call WriteDec
call CrlF
;Move value to array, increment esi, exchange values
mov [esi], eax
add esi, TYPE myArray
xchg eax, ebx
loop L1
ret
GetFib ENDP
END main