汇编程序可以在 1 字节寄存器上使用 movw 指令吗?
Can assembler use movw instruction on 1byte register?
有 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)
assemble失败,
2字节指令movw %ss, (%ecx)
assemble成功。
为什么会这样?
这只是 linux as
错误吗?
ss 寄存器是 16 位(2 字节)长,所以 movw 确实是正确的,而 movb
被正确拒绝。
通常,除非不存在寄存器操作数,否则您可以简单地省略大小后缀,让汇编器推断它。汇编器通常在这方面做得很好。
有 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)
assemble失败,
2字节指令movw %ss, (%ecx)
assemble成功。
为什么会这样?
这只是 linux as
错误吗?
ss 寄存器是 16 位(2 字节)长,所以 movw 确实是正确的,而 movb
被正确拒绝。
通常,除非不存在寄存器操作数,否则您可以简单地省略大小后缀,让汇编器推断它。汇编器通常在这方面做得很好。