在VS中移动[eax + 4]

时间:2012-09-16 15:28:17

标签: c++ assembly

我无法编译这个,我应该如何在Visual Studio中将[eax + 4]移动到y?

float x, y, z;

__asm
{
    mov x,      eax
    mov y,      [eax+4]
    mov z,      [eax+8]
}

编辑: “错误1错误C2424:'+':'第二个操作数'中的表达式不正确”

3 个答案:

答案 0 :(得分:10)

MOV指令无法将内存移至内存。有关每条指令规则的更多详细信息,请查看您最喜欢的汇编语言参考。如果某些内容未明确列为允许,则不允许。你不能只是弥补东西。处理器非常挑剔。

答案 1 :(得分:3)

@Raymond是对的,您可以使用临时寄存器来传输它。确保不要破坏已使用的寄存器。例如:

mov   x, eax
push  eax
push  ebx
mov   ebx, eax ; displacement is only possible with ebp or ebx
mov   eax, [ebx+4] 
mov   y, eax
mov   eax, [ebx+8]
mov   z, eax
pop   ebx
pop   eax

答案 2 :(得分:-2)

float x, y, z;

__asm
{
    mov x,      eax
    push        eax
    mov eax,    [eax+4]
    mov y,      eax
    pop         eax
    mov eax,    [eax+8]
    mov z,      eax
}
相关问题