一千萬個為什麽

搜索

為什麽這個數組聲明會入侵下一個?

我正在使用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庫可以在Kip Irvine的網站上找到。我正在使用它,因為我教授使用的教科書是“基於英特爾的計算機的匯編語言”,第5版由Kip Irvine撰寫。當我為此更改變量聲明時:

    fileName BYTE "vetor.txt", 0
    fibonacciVetor DWORD 1, 1, (QUANT - 2) DUP(0)
    fileHandler DWORD 0

該程序運行正常。

為什麽簡單地改變聲明的順序會影響程序的運行方式,因為fileName變量應該在fibonacciVetor結束後立即分配,並且在寫入數組時不應該受到影響?

非常感謝你。

最佳答案

只是一個猜測,但我會說定義中的(Quant - 2)術語是問題。我可以看到說(Quant - 1)如果你要使用零相對數組,但是使用-2,你將失去放置最後一個元素的空間。

只是擺脫-2。記憶力便宜且充足。畢竟,你不是在編程KIM-1。

轉載註明原文: 為什麽這個數組聲明會入侵下一個?