我可以使用mov
作为源和目标的间接操作数吗?你可以使用具有间接操作数的mov作为源和目标吗?
E.g.
mov eax, OFFSET foo
mov esi, OFFSET bar
mov [eax],[esi + LENGTHOF bar]
从我已经试过我猜你不能因invalid instruction operand
错误。但是我没有阅读任何明确声明你不能这么做的地方,所以我想确保它不是由于其他错误。
我可以使用mov
作为源和目标的间接操作数吗?你可以使用具有间接操作数的mov作为源和目标吗?
E.g.
mov eax, OFFSET foo
mov esi, OFFSET bar
mov [eax],[esi + LENGTHOF bar]
从我已经试过我猜你不能因invalid instruction operand
错误。但是我没有阅读任何明确声明你不能这么做的地方,所以我想确保它不是由于其他错误。
x86 mov
指令不支持内存到内存移动。
看看Volume 2: Instruction Set Reference,即MOV
指令。有reg <- reg
,mem <- reg
和reg <- mem
表单,但没有mem <- mem
。
要将数据从存储器移动到存储器,必须使用中间寄存器或movs
指令,该指令将地址DS:ESI
中的值移动到ES:EDI
。这就是这些寄存器被命名的原因(源索引和目标索引)。
啊,好的。我不觉得这种间接寻址也是从存储器到存储器。谢谢!很快会接受。 – LazerSharks
Nit-picking:除非你计算'movs'和'pop'到内存位置。 –
@ 500-InternalServerError谢谢。我已经重申了我的开头句。 –
对于'mov [esp],[/]'''mov [...],[esp]''你可以在'_special case_ ...'中使用'push' /'pop' 'm32'内存操作数。缺点(除了在esp中有第二个地址操作数),esp也会改变。 –