[A little about movzx and movsx]

movzx also known as "move with zero extend" meanwhile movsx stand for 
"move with signed extend"
actually it will be hard to understand it completly so I'm gonna give a 
very simple explanation.
movzx as we've read above as :"move with zero extend" this instruction 
will move our operand with additional zero extension where this movzx will
be used to move unsigned value only.
the syntax of movzx:
============
movzx destination, source
============

syntax of movsx:
=============
movsx destination, source

=============


and don't forget that movzx will be used for unsigned value and movsx will 
be used for signed value.

example of movzx:
==========
global _start
_start:
movzx_sample:
mov al,0x2f
movzx eax,al
out:
mov al,0x1
int 80h
==========

when it's movzx it will suppose your source register as 32 bit register