par*_*ara 0 c++ x86 assembly inline-assembly
我无法编译这个,我应该如何在Visual Studio中将[eax + 4]移动到y?
float x, y, z;
__asm
{
mov x, eax
mov y, [eax+4]
mov z, [eax+8]
}
Run Code Online (Sandbox Code Playgroud)
编辑:"错误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
Run Code Online (Sandbox Code Playgroud)
如果知道x
并且y
是连续的,则可以使用XMM寄存器一次复制8个字节。