Um tempo atrás, rolou nas interwebs um belíssimo programa BASIC de uma linha para C64, que gera um labirinto aleatório com duas míseras instruções, um PRINT e um GOTO. O negócio fez tanto sucesso que chegou a virar livro.
Pois bem, me chega um cavalheiro chamado Jim Leonard, hacker casca-grossa também conhecido como Trixter, e lança o desafio: fazer o mesmo programa em assembler 8088, para PC*, com o mínimo de bytes possível.
Aí os recordes vão se sucedendo: 25 bytes, 15,13, 12. 11… dez! A essa altura o povo já estava apelando para truques que não são coisa de Jesus, tais como instruções não-documentadas que só funcionam em CPUs Intel, presumir estado dos registradores na entrada, entre outras ignomínias.
Segue o código assembler vencedor. Tirem as crianças da sala:
init: scasb salc and al,''-'/' add al,'/' int 29h jmp init
* PCs clássicos, por favor, tipo XT original ou Tandy 1000. Seu PC, não. Seu PC é velho. Mas há os que crêem que PCs podem ser clássicos. Esse assunto vai dar pano pra manga…
Uma pergunta bem besta de um novato nessas coisas… como eu monto esses caras?
A princípio, pelo DOS, com DEBUG. Só que a tal da SALC é instrução não documentada e você vai ter que botar “DB D6”: http://www.rcollins.org/secrets/opcodes/SALC.html