组件64位-movl,movq.互换是可以的



上下文:

在64位linux上学习GAS汇编。许多教程都是针对32位部件的。

难以通过x86_64部件进行衬套敲击。

问题:

当我用gcc编译c程序时,我仍然会看到一些%eaxmovl

我主要玩int32_t

但我认为一个必须使用x86_64上的64位指令(如raxrbx等)。

我不太明白。它们不应该是%raxmovq吗?在我的汇编程序中,我应该使用movq,对吧?即使是32位整数?我是个迷路的初学者。

感谢

您可以在64位模式中使用32位寄存器和指令,就像您也可以使用16位或8位一样。需要记住的一点是,32位指令将自动将相应64位寄存器的前32位清零,而16或8位指令则不会:

movabsq $0xffffffffffffffff, %rax
movb $0, %al  # rax = 0xffffffffffffff00
movw $0, %ax  # rax = 0xffffffffffff0000
movl $0, %eax # rax = 0x0000000000000000

使用32位指令的一个原因是它们是较短的机器代码。

相关内容

  • 没有找到相关文章