我读到该MOV指令不能为其两个操作数都有内存位置.
喜欢:MOV [0012H], [0016H]不允许.
为什么这样?
其他指令可以为其两个操作数设置内存位置吗?
我想知道这是否允许组装
movl (%edx) (%eax)
Run Code Online (Sandbox Code Playgroud)
我猜想它会访问第一个操作数的内存,然后放入第二个操作数的内存,类似* a = * b,但是我没有看到任何处理此类的示例,因此我猜想它是不允许的。另外,有人告诉我这是不允许的
leal %esi (%edi)
Run Code Online (Sandbox Code Playgroud)
这是为什么?最后,还有其他类似的功能我不应该被禁止。
我找到了答案,说明无法在x86平台上直接存储到内存的复制,而不能将值存储在两者之间。
mov rax,[RSI]
mov [RDI],rax
Run Code Online (Sandbox Code Playgroud)
我大量使用pop来对内存进行64位写入,pop似乎直接将值复制到内存中,而没有任何明显的“中间人”。
值在写入之前但在读取之后在哪里?