x86:为什么使用寄存器作为中间层?
比如说,x86:为什么使用寄存器作为中间层?,x86,X86,比如说,%eax有内容0x123,0x123有内容0x987。和地址0xabc有内容0x100 然后,使用movl(%eax),0xabc, 是否将0x987作为0xabc的内容移动?为什么我们需要另一个寄存器来执行此操作?i、 e movl (%eax), %eax movl %eax, 0xabc 类似地,movl 0xabc,(%eax)是否会将0x100移动到%eax的地址,即0x123??我们是否也需要另一个寄存器来执行此操作?这是因为x86不提供内存到内存的简单mov指令。
%eax
有内容0x123
,0x123
有内容0x987。
和地址0xabc
有内容0x100
然后,使用movl(%eax),0xabc
,
是否将0x987
作为0xabc
的内容移动?为什么我们需要另一个寄存器来执行此操作?i、 e
movl (%eax), %eax
movl %eax, 0xabc
类似地,
movl 0xabc,(%eax)
是否会将0x100
移动到%eax的地址,即0x123??
我们是否也需要另一个寄存器来执行此操作?这是因为x86不提供内存到内存的简单mov
指令。可以查看所有提供的表单并扫描列表,您将看到基本上是加载(从内存中移动)、存储(移动到内存)和注册注册表表单,但没有一个是从内存中加载和存储的
x86确实提供了更复杂的指令,例如从内存加载和存储的
movsd
:例如,该指令将4个字节从rsi
移动到rdi
。不过,在您的场景中,这些可能并没有真正的帮助:它们仍然需要两个地址寄存器,因为地址没有“立即”表单。它们仅在rep mov
表单中用于执行可变长度内存复制。因为x86 mov指令不需要两个内存操作数。