有4种类型的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字节指令movw %ss, (%ecx)
汇编成功。
为什么会这样?
它只是Linuxas
错误吗?
ss 寄存器的长度为 16 位(2 字节(,因此 movw 确实是正确的,而movb
被正确地拒绝。
通常,除非不存在寄存器操作数,否则您可以简单地省略大小后缀并让汇编程序推断它。 汇编程序通常在这方面做得很好。