Основываясь на ответе Питера, есть еще одна проблема с этим кодом, которая исходит от вашего счетчика l oop. eax начинается с 0, что означает, что он пройдет 5 проходов через l oop (0, 1, 2, 3, 4), чтобы он равнялся ebx, что означает добавление некоторого значения мусора после окончания price
.
Я добавил суффикс f
после чисел с плавающей запятой, чтобы заставить замолчать предупреждение компилятора, но на самом деле это не фактор.
#include <iostream>
using namespace std;
int main() {
float price[] = { 22.1f, 34.44f, 567.33f, 2.45f };
float sum = 0;
__asm {
xor eax, eax; //counter
mov ebx, 4 //num elements in array
lea ecx, price //address of first element in array
xorps xmm0, xmm0
L1 :
addss xmm0, [ecx + eax * 4]
dec ebx
jz done
inc eax
jmp L1
done :
movss sum, xmm0
}
cout << "sum= " << sum;
return 0;
}
Для улучшения есть еще что-то этот код, но это дает правильный ответ.