5

Informações que acredito que sejam úteis:

1.

O projeto foi vibe-codado, conforme dá para ver aqui: https://github.com/PlummersSoftwareLLC/TinyRetroPad/blob/main/agents.md

2.

O dev commitou o executável: https://github.com/PlummersSoftwareLLC/TinyRetroPad/blob/main/trpad.exe

3.

O projeto peca em otimizações de tamanho óbvias, como neste trecho:

FindTail:
        mov     al, [esi]
        test    al, al
        je      GotTail
	
        cmp     al, '\'
        je      MarkTail
	
        inc     esi
        jmp     FindTail
        ...

Que poderia ter o tamanho reduzido drasticamente usando a instrução scasb com o prefixo repne.

Isso não é uma crítica ao autor do projeto. Escrever assembly é fácil, mas otimizar assembly (seja para tamanho, seja para performance) é outra história.

Mas esses erros de otimização óbvios servem para mostrar como ele conseguiria um código muito menor simplesmente escrevendo o projeto em C e compilando com flags de otimização para tamanho (-Os). O GCC não comete erros óbvios.

Ironicamente, escrever o código diretamente em assembly fez o código do projeto ficar maior.

4.

Em um projeto pequeno, a maior parte do tamanho do executável vem da própria estrutura do PE32/PE32+.

Se você compilar um hello world em C usando o MinGW, você provavelmente vai obter um executável com mais de 30 KB e vai pensar: "Ué, mas isso prova que escrever em C faria um executável muito maior que escrever em assembly".

Isso não é verdade, porque a maior parte do tamanho do executável vem de dados dentro dele que não são necessários para a execução do mesmo (como a seção .rsrc).

Dá para conseguir um executável funcional muito menor se você estruturá-lo manualmente ao invés de deixar o linker fazer isso. Eu até falei algo relacionado a isso neste post onde eu mostrei um hello world de 171 bytes de tamanho. Para comparação, um hello world normal tem 8.3KB de tamanho. Isso representa uma redução de quase 50x no tamanho do executável.

Isso, inclusive, reduziria muito mais o tamanho do executável do que a otimização do tamanho do código.

Carregando publicação patrocinada...