문제

Fibonacci 시리즈의 첫 번째 47 값이 계산 된 파일을 쓸 수있는이 프로그램이 필요합니다.내 절차는 제공된 라이브러리에서 포함 된 절차를 사용하여 47 개의 항목을 올바르게 표시하지만 파일에 인쇄하지 않습니다.

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

도움이 되었습니까?

해결책

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

다른 팁

L1: add eax,ebx
    call    WriteDec
    call Crlf

    mov [esi],eax
    xchg    eax,ebx
    ***add  esi,TYPE array***
    loop L1
.

재미있는 솔루션은 ESI에 유형 배열을 추가하여 레지스터의 답변을 출력하는 지점을 이동해야합니다.지금 100 % 일하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top