我无法编译此代码,如何在Visual Studio中将[eax + 4]移至y?
float x, y, z;
__asm
{
mov x, eax
mov y, [eax+4]
mov z, [eax+8]
}
编辑:
错误1错误C2424:“ +”:“第二个操作数”中的表达式不正确
最佳答案
您将eax
用作指针,因此似乎不太可能将该位模式存储到float x
中。也许您打算从内存中复制3个浮点数,分别为[eax+0]
,+ 4和+8?
@RaymondChen是正确的,您可以使用临时寄存器进行传输。显而易见的选择是临时选择ECX或EDX。那些与EAX一起使用的函数被调用,因此使用它们不会强制编译器将它们保存/恢复到包含asm块的函数中。
即使值为float
,也可以使用32位整数寄存器复制它们,而不是通过XMM0或x87寄存器复制它们。您没有对它们进行FP数学运算。
mov ecx, [eax]
mov x, ecx // you probably want this, not mov x, eax
mov ecx, [eax+4]
mov y, ecx
mov ecx, [eax+8]
mov z, ecx
如果您知道
x
和y
是连续的,则可以使用XMM寄存器一次复制8个字节。关于c++ - 在VS中移动[eax + 4],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12448161/