有四种类型的mov
指令:movb
,movw
,movl
。
后缀b
,w
,l
表示源寄存器的大小。
然而,在组装时,我发现了这些后缀的问题。
见下面的例子。
.global main
main:
movb %ss, (%ecx) # ==> assemble (X)
movw %ss, (%ecx) # ==> assemble (O)
即使源寄存器%ss
是1字节大小,
1字节指令movb %ss, (%ecx)
汇编失败,
2字节指令qazxsw poi汇编成功。
为什么会这样?
它只是linux movw %ss, (%ecx)
bug吗?
ss寄存器长度为16位(2字节),所以movw确实是正确的,而as
被正确拒绝。
通常,除非没有寄存器操作数,否则您可以简单地省略大小后缀并让汇编程序推断它。汇编程序通常做得非常好。