在 VS 中移动 [eax+4]
Move [eax+4] in VS
我无法编译这个,我应该如何在Visual Studio中将[eax+4]移动到y?
float x, y, z;
__asm
{
mov x, eax
mov y, [eax+4]
mov z, [eax+8]
}
编辑:
错误1 错误 C2424:"+":"第二个操作数"中的表达式不正确
MOV 指令无法将内存移动到内存。查看您喜欢的汇编语言参考,了解有关每个指令规则的更多详细信息。如果某些内容未明确列为允许,则不允许。你不能只是编造东西。处理器非常挑剔。
您使用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 个字节。
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
}
相关文章:
- 将对象移动到std::shared_ptr
- 何时在引用或唯一指针上使用移动语义
- 如何从具有移动语义的类对象中生成共享指针
- 将shared_ptr移动到<StructA>shared_ptr<变体<结构A、结构 B>>
- C / C++ 移位/偏移/向左或向右移动位图?
- MSVC将仅移动结构参数解释为指针
- 自定义先决条件对移动分配运算符有效吗
- 返回值优化:显式移动还是隐式
- 当有分配器意识的容器被复制/移动时,反弹分配器是否被复制/移走
- 为什么复制而不是移动数据元素?
- 可以使用移动语义更改或改进此C++代码吗?
- 使lambda不可复制/不可移动
- c++在使用指针时移动语义
- 将QGraphicsItem的移动区域限制在多边形区域内
- SendInput()鼠标移动计算
- 按值 C++ 返回时进行双倍移动
- 移动二维数组中的字符
- 符合者在EAX上来回产生一个移动
- 在 VS 中移动 [eax+4]
- 使用 c++ 中的 __asm 将 short 类型的变量移动到 EAX 中 (VS 2010)