我正在尝试将总和存储在edx寄存器中,但是输出显示为0。如何解决此问题?
int main() {
float price[ ] = { 22.1, 34.44, 567.33, 2.45 };
float sum = 0;
__asm {
xor eax, eax; //counter
mov ebx, 4 //num elements in array
lea ecx, price //address of first element in array
xor edx, edx //store sum
L1 :
add edx, [ecx+eax*4]
cmp eax, ebx
je done
inc eax
jmp L1
done :
mov sum, edx
}
cout << "sum= " << sum;
return 0
}
add
是整数加;您需要addss xmm0, [ecx+eax*4]
,并在末尾存储addss xmm0, [ecx+eax*4]
。在循环之前用movss
将xmm0清零,就像使用xorps xmm0,xmm0
将整数寄存器清零一样。
((如果不确定,例如,在调试器中或在xor edx,edx
上,请查看纯C ++循环中未经优化或经过轻微优化的编译器输出,以获取有关如何使用这些语法的语法的信息
通过将这四个位模式作为整数求和而得到的整数可能表示(作为Binary32 IEEE浮点数)非常小的https://godbolt.org/,恰好打印了float
如果需要全部详细信息,请在单步执行时使用调试器查看寄存器和变量值。