NASM 说 "Invalid combination of opcode and operands"

NASM says "Invalid combination of opcode and operands"

我刚开始学习汇编编程。我在 linux 上使用 NASM。 我写的这段代码基本上是为了计算某物的某物的幂,我知道它可能不太好,但我现在真的不在乎,我只想知道为什么我一直收到那个错误,因为我试图修改和切换操作数和操作以及问题所在部分中的所有内容,但如果有的话只会给我更多错误消息。 正如我所说,我对这一切真的、真的很陌生,我可能只是愚蠢。 问题必须在这些行之一中。如果您需要它,我当然会 post 更多代码,我只是不想让您不得不浏览 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

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

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

PS: 你应该使用移位乘以2.