x86:将操作注册为内存内容和内存地址?
寄存器-->内存地址-->内存内容 内存地址-->内存内容 以上型号正确吗 如果是的话,你能建议我是否认为它是正确的吗 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-->错误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内容的内容
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
。