Ich habe eine Assembler-Datei mit diesem Code:Seltsam NASM Fehler: ungültige Kombination von Opcode und Operanden
global _start
_start:
mov eax, -2
imul eax, c
mov ebx, eax
mov eax, 82
imul eax, d
sub ebx, eax
div 4
mov eax, 1
mov ebx, 0
int 0x80
section .data
a: db 10
c: db 3
d: db 2
ich kompilieren mit:
nasm -f elf c1.asm
ich einen Fehler:
c1.asm:15: error: invalid combination of opcode and operands
Was ist das Problem mit meinem Code, und wie kann ich es beheben?
Zeile 15 sieht wie 'div 4' aus, und gemäß einer Befehlssatzreferenz [_DIV_] (http://www.felixcloutier.com/x86/DIV.html) wird kein unmittelbarer Operand verwendet. Es benötigt einen Speicheroperanden oder ein Register. –
Um eine vorzeichenlose Integer-Division um 4 zu machen, brauchst du überhaupt kein "div". Machen Sie eine logische Verschiebung um 2 Bits nach rechts: 'shr eax, 2' – Michael
Wenn Sie das nächste Mal nach einem Fehler in einer bestimmten Zeile fragen, können Sie uns Zeilennummern in der Quelle bereitstellen. Oder einen Kommentar eingeben, um die Linie zu identifizieren. –