l código generado del compilador @Tiny C emite NOP y JMP extra (¿innecesarios?)

Puede alguien explicar por qué este código:

#include <stdio.h>

int main()
{
  return 0;
}

cuando se compila con tcc usandotcc code.c produce este asm:

00401000  |.  55               PUSH EBP
00401001  |.  89E5             MOV EBP,ESP
00401003  |.  81EC 00000000    SUB ESP,0
00401009  |.  90               NOP
0040100A  |.  B8 00000000      MOV EAX,0
0040100F  |.  E9 00000000      JMP fmt_vuln1.00401014
00401014  |.  C9               LEAVE
00401015  |.  C3               RETN

Supong

00401009  |.  90   NOP

al vez @ esté allí para un poco de alineación de memoria, pero ¿qué pasa con

0040100F  |.  E9 00000000     JMP fmt_vuln1.00401014
00401014  |.  C9              LEAVE

e refiero a por qué el compilador insertaría este salto cercano que salta a lasiguient instrucción, ¿DEJARÍA ejecutar de todos modos?

Estoy en Windows de 64 bits que genera un ejecutable de 32 bits usando TCC 0.9.26.

Respuestas a la pregunta(2)

Su respuesta a la pregunta