对于具有两个操作数的 MUL,NASM 表示“操作码和操作数的组合无效”

问题描述 投票:0回答:1

我刚刚开始学习汇编编程。我在 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
assembly x86 nasm opcode operands
1个回答
9
投票

nasm 肯定已经给了你行号……它应该指向你

mul eax, 2
。反过来,您应该在参考手册中查找该指令,并注意到没有
mul
指令接受立即数作为操作数。不过,有这样一个
imul

TL;DR:将

mul eax, 2
更改为
imul eax, 2
(这实际上是
imul eax, eax, 2
的简写)。

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

© www.soinside.com 2019 - 2024. All rights reserved.