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.
- https://www.felixcloutier.com/x86/mul只有单操作数形式。
- https://www.felixcloutier.com/x86/imul 有
imul r, r/m
和 imul r,r/m,imm
形式,可用于签名或未签名。以及扩大单操作数有符号乘法。
我刚开始学习汇编编程。我在 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.
- https://www.felixcloutier.com/x86/mul只有单操作数形式。
- https://www.felixcloutier.com/x86/imul 有
imul r, r/m
和imul r,r/m,imm
形式,可用于签名或未签名。以及扩大单操作数有符号乘法。