I need some help with some basic concepts here.

Hello! I'm a beginner of IBM PC assembly language programming and I'm confused with some concepts here so think I need some help.
What are 32-bit instructions and what are 16-bit instructions?
What is operand-size attribute?
And with the MOVSX/MOVZX instrucion, if the destination operand is a 32-bit register and the source operand is a memory location, how does the machine decide whether to read a byte or a word from that location?
Thank you in advance!

A 32-bit instruction is an instruction that takes up 32 bits, i.e. 4 bytes, whereas a 16-bit instruction is one that takes up 2 bytes.
Lots of CPUs have varying length instructions, even the old Z80 did; most were one byte but some were as long as 4 bytes.