Nasm Error: invalid combination of opcode and operands
Matthew Harrington
In my quest to learn NASM, I am trying to create a really simple program that does a division and outputs the result.
By the books, everything should run fine. I'm dividing 15 by 3, and it should automatically be stored in the AX register which I then move over to the ecx for output.
However, when I try to compile, I am getting the error
nums.asm:6: error: invalid combination of opcode and operands
nums.asm:7: error: invalid combination of opcode and operandsDoes anyone know what is wrong with lines 6 and 7?
This is my code:
segment .text global main
main: div 3, 15 mov ecx, ax mov ebx,1 ; arg1, where to write, screen mov eax,4 ; write sysout command to int 80 hex int 0x80 ; interrupt 80 hex, call kernel
exit: mov eax, 1 xor ebx, ebx int 0x80 1 Answer
I keep seeing this form often: div 3, 15 this is not any valid INTEL mneumonic!
To divide 15 by 3:
xor edx, edx
mov eax, 15
mov ecx, 3
div ecxFor the second error, you cannot move a 16 bit register into a 32 bit register like that. You need to use one of the following:
xor ecx, ecx
mov cx, axOr:
movzx ecx, ax 3