Я изучаю сборку для IA-32 с помощью MASM, используя Microsoft Visual C ++ Express Edition, и эта проблема возникла. Когда я делаю это:
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 можно найти на сайте Кипа Ирвина. Я использую его, потому что учебник, который использует мой профессор, - «Язык ассемблера для компьютеров на базе Intel», 5-е издание, Кип Ирвин. Когда я изменяю объявление переменных для этого:
fileName BYTE "vetor.txt", 0
fibonacciVetor DWORD 1, 1, (QUANT - 2) DUP(0)
fileHandler DWORD 0
Программа работает правильно.
Почему простое изменение порядка объявления влияет на то, как работает программа, или нет, поскольку переменная fileName должна быть размещена сразу после окончания fibonacciVetor, и на нее не должно влиять, когда я пишу в массив
Большое спасибо.