어셈블리 인쇄 배열에서 파일로 인쇄합니다
문제
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 % 일하고 있습니다.
제휴하지 않습니다 StackOverflow