汇编程序可以在 1 字节寄存器上使用 movw 指令吗?

Can assembler use movw instruction on 1byte register?

有 4 种类型的 mov 指令:movbmovwmovl
后缀bwl表示源寄存器的大小。

但是,在组装时,我发现这些后缀有问题。
请参阅下面的示例。

 .global main
 main:
  movb %ss, (%ecx) # ==> assemble (X)
  movw %ss, (%ecx) # ==> assemble (O)

即使源寄存器 %ss 是 1 字节大小,

1字节指令movb %ss, (%ecx)assemble失败,
2字节指令movw %ss, (%ecx)assemble成功

为什么会这样?
这只是 linux as 错误吗?

ss 寄存器是 16 位(2 字节)长,所以 movw 确实是正确的,而 movb 被正确拒绝。

通常,除非不存在寄存器操作数,否则您可以简单地省略大小后缀,让汇编器推断它。汇编器通常在这方面做得很好。