我无法编译这个,我应该如何在Visual Studio中将[eax + 4]移动到y?
float x, y, z;
__asm
{
mov x, eax
mov y, [eax+4]
mov z, [eax+8]
}
编辑: “错误1错误C2424:'+':'第二个操作数'中的表达式不正确”
答案 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
}