汇编mov指令后缀?

时间:2019-09-17 07:13:58

标签: c assembly x86-64

(我将这个问题基于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

1 个答案:

答案 0 :(得分:0)

后缀表示指令将移动多少字节。因此,当您执行movq (%rdx), %rax时,将从内存中移出8个字节,起始地址为%rdx中的地址。

movb (%rdx), %rax无效。 movb (%rdx), %al将从%rdx的地址移1个字节到%rax的低字节。 movzbq (%rdx), %rax移动1个字节,将其零扩展到8个字节,然后将该值写入%rax