x86:将操作注册为内存内容和内存地址?

x86:将操作注册为内存内容和内存地址?,x86,cpu-registers,X86,Cpu Registers,寄存器-->内存地址-->内存内容 内存地址-->内存内容 以上型号正确吗 如果是的话,你能建议我是否认为它是正确的吗 movl%eax,%ebx-->它将eax的内存地址移动到ebx,这也会导致内容移动 movl(%eax),%ebx-->它只移动内容,不接触地址 movl值,%eax-->将值的内存地址移动到%eax(以及内容,即eax具有新内存内容) movl%eax,val-->val也有新的内存地址和内容(都是%eax) movl$val,%eax-->val是移动到%eax内容的内容

寄存器-->内存地址-->内存内容

内存地址-->内存内容

以上型号正确吗

如果是的话,你能建议我是否认为它是正确的吗

movl%eax,%ebx-->它将eax的内存地址移动到ebx,这也会导致内容移动

movl(%eax),%ebx-->它只移动内容,不接触地址

movl值,%eax-->将值的内存地址移动到%eax(以及内容,即eax具有新内存内容)

movl%eax,val-->val也有新的内存地址和内容(都是%eax)

movl$val,%eax-->val是移动到%eax内容的内容(地址不变)

移动%eax,$val-->

movl(%eax),val-->val只有新的内存内容

mov(%eax),$val-->错误


mov$val,(%eax)-->错误?

movl%eax,%ebx
-->将寄存器
%eax
的内容移动到寄存器
%ebx
中。与
%eax
包含的内容无关

movl(%eax),%ebx
-->将
%eax
中包含的内存地址的内容移动到寄存器
%ebx

movl值,%eax
-->将内存地址
值的内容移动到寄存器
%eax

movl%eax,val
-->将寄存器的内容
%eax
移动到内存地址
val

movl$val,%eax
-->将常量
$val
移动到寄存器
%eax

movl%eax,$val
-->不可能。不能将某些内容移动到常量值中

movl(%eax),val
-->不可能。必须将寄存器用作中间寄存器:

movl (%eax),%eax
movl %eax,val    ; or use another intermediate register than %eax                    
mov(%eax),$val
-->i不可能。不能将某些内容移动到常量值中


mov$val,(%eax)
-->将常量
$val
移动到
%eax

中包含的内存地址中。请参见
%eax
%ebx
没有内存地址,它们是寄存器,只能包含内存地址。其中大多数都没有意义。请注意,在AT&T(Gnu)语法中,目标和源的顺序与英特尔语法相反。%eax-->0x100和0x100:0x123%ebx-->0x212和0x212::0x456然后movl%eax,%ebx将导致:%ebx-->0x100。。。它是否正确?它与
%eax
包含的数据类型无关。它可以是地址、整数或任何时间,
movl%eax,%ebx
只需将
%eax
中的值复制到
%ebx
。因此,如果
%eax
0x100
,那么
%ebx
也将变成
0x100