我正在使用 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
该程序无法正确运行,因为文件名字符串在进程中间被删除。Irvine32.inc 库可以在 Kip Irvine 的网站上找到。我使用它是因为我的教授使用的教科书是“基于 Intel 的计算机的汇编语言”,Kip Irvine 的第 5 版。当我为此更改变量声明时:
fileName BYTE "vetor.txt", 0
fibonacciVetor DWORD 1, 1, (QUANT - 2) DUP(0)
fileHandler DWORD 0
程序运行正常。
为什么仅仅更改声明的顺序会影响程序的运行或不运行,因为 fileName 变量应该在 fibonacciVetor 结束后立即分配,并且在我写入数组时不应该受到影响?
非常感谢。