【问题标题】:invalid instruction suffix for `mov' (movw %ax, %ebx)'mov' 的指令后缀无效 (movw %ax, %ebx)
【发布时间】:2016-07-12 13:08:06
【问题描述】:

当我尝试编译以下程序时:

.globl _start
.section    .text

_start:     movw        $-23, %ax
            movl        $-1,  %ebx   # -1 = $0xffffffff
            movw        %ax,  %ebx

            movl        $1, %eax
            movl        $0, %ebx
            int         $0x80

我收到此错误消息:

demo.s: Assembler messages:
demo.s:7: Error: invalid instruction suffix for `mov'

所以,问题的根源就在这里:

movw        %ax,  %ebx

但问题是我不认为我正在做的事情是完全错误的,而且这是我目前正在阅读的书中使用的示例:Professional Assembly Language by Richard Blum (2005)

【问题讨论】:

  • movw %ax, %ebx 没有意义。它是“将 16 位 寄存器 AX 移入 32 位 寄存器 EBX”。你会怎么做?零扩展 (movzwl %ax, %ebx)?符号扩展 (movswl %ax, %ebx)?你确定作者不是有意movw %ax, %bx?我无法从源代码中的用途中分辨出来。
  • movw %ax, %ebx - 这正是书中所呈现的方式。
  • 从那本书的勘误表部分来看,我对其中的来源有点谨慎。只要确保,对于每一个解释过的东西,你都可以在没有书的情况下编写自己的源代码,它在调试器中完全按预期工作(注意所有寄存器、内存和标志的变化)。基本上只有一本适用于 ASM 开发人员的规范书籍。说明参考指南。其他一切就像自行车上的辅助轮,非常有帮助,直到你超过一定的水平,那就是负担。下一个有用的 ASM 书籍要么是目标平台的详细架构,要么是数学理论书籍。
  • 稍微符合 Ped7g 我想指出的是,“专业汇编编码器”很少会将 32 位寄存器与 16 位寄存器混淆。这和勘误表可能表明作者并不像他们声称的那样习惯于汇编。
  • 嗯...对于一本包含 576 页的书,该页面上列出了 5 个错误。现在,我不认识 Richard Blum,也没有读过这本书,所以我无法亲自证明它的质量。但这个错误率远没有高到足以引起警告的地步。当你出版一本书时,错误总会悄悄出现,无论它经过多少审稿人,我认为错误地输入额外的“e”不足以质疑作者的能力。这里的cmets让我很惊讶。 Effective C++(广受赞誉的文本)还有很多勘误。

标签: assembly x86 gnu-assembler


【解决方案1】:

你没有写,你想用那个程序做什么。

首先将-23 放入ax,然后将-1 放入ebx,然后尝试将ax 放入ebx,这在x86 处理器上无效,因为ax 是16 位的, ebx 是 32 位寄存器。 mov 在处理过程中无法转换数据的宽度。

要使其发挥作用,有两个基本选项。

    1234563 (在您的情况下,结果将是ebx/bx/bl 中的-23)。
  • 如果您想将 16b 值扩展为 32b 值,您可以这样做:

    1. movswl %ax, %ebx # sign-extended conversion (movsx in Intel syntax)
    2. movzwl %ax, %ebx # zero-extended conversion (movzx in Intel syntax)

在 1. 中,ebx(以及bxbl)将包含-23。 在 2. ebx 将包含 0x0000FFE9,因此 ebx 将是 65513bxbl 将是 -23 如果被视为有符号整数。或65513 用于bx233 中的bl,当被视为无符号整数时。

关于这本书……你确定吗?再仔细读一遍,一定是错字,或者你忽略了一些微小的细节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多