(我将这个问题基于x86-64架构)
如果主存储器是按地址索引的字节数组-那么为什么应该使用movq(%rdx), %rax
而不是movb(%rdx), %rax
?我的意思是movq
用于移动四字,而movb
用于移动字节。因此,据我所知,mov#(%rdx), %rax
的源位于内存中,因此应该为1个字节。我知道寄存器%rax
实际上是x86-64上的一个四字,但这并不意味着我们moving
进行了四重移动-我们将一个字节移动到可以容纳四重的位置字(8个字节)-对吗?
那么为什么不使用movb(%rdx), %rax
或也许使用movzbq (%rdx), %rax
?
答案 0 :(得分:0)
后缀表示指令将移动多少字节。因此,当您执行movq (%rdx), %rax
时,将从内存中移出8个字节,起始地址为%rdx
中的地址。
movb (%rdx), %rax
无效。 movb (%rdx), %al
将从%rdx
的地址移1个字节到%rax
的低字节。 movzbq (%rdx), %rax
移动1个字节,将其零扩展到8个字节,然后将该值写入%rax