我无法编译此代码,如何在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


如果您知道xy是连续的,则可以使用XMM寄存器一次复制8个字节。

关于c++ - 在VS中移动[eax + 4],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12448161/

10-12 23:56