mov ebx, price
загружает значение из памяти, а не указатель, как обычно для синтаксиса MASM с mov reg, symbol
. Это объект массива, а не указатель, и (я думаю) не "распадается" на указатель при использовании таким образом .
Нет указателя на этот массив куда угодно в памяти вы можете загрузить с mov
, потому что это не так, как работают C массивы.
Используйте отладчик, чтобы увидеть значение регистра. Также посмотрите на сгенерированный компилятором сборка, используя disassembly-view в вашем отладчике. Таким образом, вы можете видеть, что он собран в mov ebx, [ebp + something]
, загружая price[0]
.
Написание asm (особенно inline asm) без отладчика похоже на попытку построить робота с завязанными глазами; это пустая трата вашего и чужого времени.
mov [price + ecx*4], eax
может сработать, если MSV C скомпилирует это в [ebp + constant + ecx*4]
режим адресации для вас.
Если нет, используйте mov ebx, [price]
вместо MOV, чтобы получить адрес. (И все же масштабируйте ваш индекс, потому что элементы имеют длину 4 байта. В противном случае вы создаете 4-байтовое хранилище со смещением в 1 байт, которое частично перекрывает два float
элемента price[]
.)