我正在使用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