我正在使用Microsoft Visual C++ Express Edition学习使用MASM为IA-32进行Assembly,并且出现了这个困难。当我这样做时:为什么这个数组声明会入侵下一个?
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库可以在Kip Irvine的网站上找到。我正在使用它,因为我的教授正在使用的教科书是“基于Intel的计算机的汇编语言”,第5版由Kip Irvine提供。当我为此更改变量声明时:
fileName BYTE "vetor.txt", 0
fibonacciVetor DWORD 1, 1, (QUANT - 2) DUP(0)
fileHandler DWORD 0
程序正常运行。
为什么简单地改变声明的顺序会影响程序的运行或没有影响,因为fileName变量应该在fibonacciVetor结束之后立即分配,并且当我写入阵列?
非常感谢。
我不是问,因为我希望程序运行简单。我在问我在寻找什么。当然,制作1000个职位并使用30个职位的阵列可以实现这一目标,但是却没有告诉我为什么问题首先发生。 – jpmelos 2010-04-14 16:41:08
这就是我为什么回答你的原因。你把45磅重的包装放在47磅。没有必要陷入困境并使我失望。 – Ron 2010-04-15 12:32:05