Assembler first sees the .align directive. Since it does not know whether this address is inside the function body or not, it cannot output NULL 0x00 bytes and must generate NOP ( 0x90 ).
But:
lea esi,[esi+0x0] ; does nothing, psuedocode: ESI = ESI + 0
performed in fewer measures than
nop nop nop nop nop nop
If this code gets into the body of the function (for example, loop alignment), the lea version will be much faster, but still โdoes nothingโ.
Unsigned
source share