NASM称“操作码和操作数的无效组合”

时间:2015-05-19 21:01:14

标签: assembly nasm opcode operands

我刚开始学习汇编编程。我在linux上使用NASM。 我写了这段代码,基本上是为了计算某事物的某些功能而且我知道它可能不是很好,但我真的不在乎这一点,我想要的只是一些想法为什么我一直得到那个错误,因为我我试图修改和切换操作数和操作以及问题部分中的所有内容,但是如果有的话只给了我更多的错误消息。 就像我说的那样,我真的,对这整个事情都很陌生,我可能只是愚蠢。 问题必须在其中一行中。如果你需要它,我当然会发布更多的代码,我只是不希望你不得不去70-80行奇怪的,不必要的复杂代码。我只是想知道这可能是什么原因导致这种情况发生,因为我现在非常,非常绝望,而且我已经达到了思考它并且没有任何新想法会使一切变得更糟的程度。 我将把这部分留在这里。但是我会给你任何你需要知道的帮助。

    mov dword [power], 2
    mov ecx, 0

while:
    mov eax, [neededforloop]
    cmp eax, ecx
    je endwhile

    mov eax, [power]
    mul eax, 2
    mov [power], eax

    mov eax, ecx
    add eax, 1
    mov ecx, eax

    jmp while

1 个答案:

答案 0 :(得分:6)

当然,nasm给了你一个行号...应该指向你mul eax, 2。反过来,您应该在参考手册中查看该指令,并注意到没有mul指令接受立即作为操作数。虽然imul有这样的一个。

TL; DR:将mul eax, 2更改为imul eax, 2(这实际上是imul eax, eax, 2的简写)。

PS:您应该使用shift乘以2。