As per my understanding, MOVZX used for unsigned widening conversions, which convert smaller size (Memory | REG) to bigger size (Memory | REG) with zero-extension. It works fine when I do following conversions:
`movzx <reg16>, <op8>
movzx <reg32>, <op8>
movzx <reg32>, <op16>
movzx <reg64>, <op8>
movzx <reg64>, <op16>`
Note: Second operand can be either be REG or Memory.
But when I'm trying to perform below operation:
movzx <reg64>, <op32>
It fails. Why?
section .data
MSG1 dd 10000
section .text
global _start
_start:
mov eax, dword[MSG1]
movzx rbx, eax
last:
mov rax, 60
xor rdi, 0
syscall
$nasm -f elf64 sample.asm -g -l sample.lst
The error I am getting :
"sample.asm:8: error: invalid combination of opcode and operands"