2014-02-16 38 views
-1

我可以使用mov作为源和目标的间接操作数吗?你可以使用具有间接操作数的mov作为源和目标吗?

E.g.

mov eax, OFFSET foo 
mov esi, OFFSET bar 
mov [eax],[esi + LENGTHOF bar] 

从我已经试过我猜你不能因invalid instruction operand错误。但是我没有阅读任何明确声明你不能这么做的地方,所以我想确保它不是由于其他错误。

+0

对于'mov [esp],[/]'''mov [...],[esp]''你可以在'_special case_ ...'中使用'push' /'pop' 'm32'内存操作数。缺点(除了在esp中有第二个地址操作数),esp也会改变。 –

回答

2

x86 mov指令不支持内存到内存移动。

看看Volume 2: Instruction Set Reference,即MOV指令。有reg <- reg,mem <- regreg <- mem表单,但没有mem <- mem

要将数据从存储器移动到存储器,必须使用中间寄存器或movs指令,该指令将地址DS:ESI中的值移动到ES:EDI。这就是这些寄存器被命名的原因(源索引和目标索引)。

+0

啊,好的。我不觉得这种间接寻址也是从存储器到存储器。谢谢!很快会接受。 – LazerSharks

+1

Nit-picking:除非你计算'movs'和'pop'到内存位置。 –

+0

@ 500-InternalServerError谢谢。我已经重申了我的开头句。 –

相关问题