-1

わかりました、私はこれを解決することに非常に近づいているように感じますが、これに対して何もしていないようです. このプログラムは、フィボナッチ数列の 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

私が見ている問題は、何も返されておらず、何を返す必要があるのか​​ わからないことです。さまざまなレジスタを返そうとしましたが、すべてエラーが発生します。

4

1 に答える 1

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
于 2011-04-01T02:51:27.253 に答える