what is the function of NOPL in x86 machine? It feels like it doesn't do anything, but why is it always in the assembly code?
NOP
is a one-byte "do nothing" operation, quite literally "no operation". NOPW, NOPL, etc.. are the equivalent do-nothings, but take up word and long-sized bytes.
e.g.
NOP // 1byte opcode
NOP // 1byte opcode
is equivalent to doing
NOPW // 2byte opcode.
They're very handy for padding things out so a code sequence begins on a particular memory boundary, by taking up a few bytes of instruction space, yet not actually doing anything.
NOP's sole effect on the CPU is to increment IP
/EIP
by 1. The NOPx equivalents will do so by 2, 4, etc...