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



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

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

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

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

1字节指令movb %ss, (%ecx)组装失败
2字节指令movw %ss, (%ecx)汇编成功

为什么会这样?
它只是Linuxas错误吗?

ss 寄存器的长度为 16 位(2 字节(,因此 movw 确实是正确的,而movb被正确地拒绝。

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

最新更新