генерация чисел для последовательности Фибоначчи и запись их в файл - PullRequest
0 голосов
/ 01 апреля 2011

Хорошо, я чувствую, что я очень близок к решению этого, но ничего, что я делаю с этим, похоже, не работает.Эта программа должна создать 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

Я вижу проблему в том, что она ничего не возвращает, и я не могу выяснить, что мне нужно для ее возврата,Я пытался вернуть разные регистры, но все они выдают ошибку.

1 Ответ

0 голосов
/ 01 апреля 2011

Только что сделал это в классе:

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
...