【问题标题】:Can assembler use movw instruction on 1byte register?汇编程序可以在 1byte 寄存器上使用 movw 指令吗?
【发布时间】:2018-09-03 11:19:39
【问题描述】:

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

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

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

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

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

为什么会这样?
难道只是linux as的bug?

【问题讨论】:

    标签: assembly x86 elf disassembly mov


    【解决方案1】:

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

    一般来说,除非没有寄存器操作数,你可以简单地省略大小后缀,让汇编器推断它。汇编程序通常在这方面做得很好。

    【讨论】:

    • 哦,我误会%ss 是1byte 大小的寄存器...非常感谢!
    猜你喜欢
    • 2015-11-01
    • 2012-01-02
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    相关资源
    最近更新 更多