Microsoft Visual C ++ Express Editionを使用して、MASMでIA-32のアセンブリを学習していますが、この問題が発生しました。私がこれをするとき:
INCLUDE Irvine32.inc
QUANT = 47
.data
fibonacciVetor DWORD 1, 1, (QUANT - 2) DUP(0)
fileName BYTE "vetor.txt", 0
fileHandler DWORD 0
.code
main PROC
mov esi, 0
mov ecx, QUANT
L1: mov eax, fibonacciVetor[esi * TYPE fibonacciVetor]
add eax, fibonacciVetor[esi * TYPE fibonacciVetor + 4]
mov fibonacciVetor[esi * TYPE fibonacciVetor + 8], eax
inc esi
loop L1
mov edx, OFFSET fileName
call CreateOutputFile
mov fileHandler, eax
mov edx, OFFSET fibonacciVetor
mov ecx, QUANT * TYPE fibonacciVetor
call WriteToFile
mov eax, fileHandler
call CloseFile
exit
main ENDP
END main
fileName文字列はプロセスの途中で消去されるため、このプログラムは正しく実行されません。Irvine32.incライブラリは、KipIrvineのWebサイトにあります。私の教授が使用している教科書は、キップ・アーバインによる「Intelベースのコンピューター用のアセンブリ言語」第5版であるため、私はそれを使用しています。このための変数宣言を変更すると、次のようになります。
fileName BYTE "vetor.txt", 0
fibonacciVetor DWORD 1, 1, (QUANT - 2) DUP(0)
fileHandler DWORD 0
プログラムは正しく実行されます。
fileName変数はfibonacciVetorの終了直後に割り当てる必要があり、配列に書き込むときに影響を受けないため、宣言の順序を変更するだけでプログラムの実行方法に影響するのはなぜですか?
どうもありがとうございます。