Como exercício, criei uma solução simples para esse desafio, na linguagem Assembly x86. Estou executando isso com o FASM no Windows. Aqui está o meu código fonte:
format PE console
entry start
include 'WIN32A.inc'
section '.text' code executable
start:
push char ; Start at 'A'
call [printf] ; Print the current letter 4 times
call [printf]
call [printf]
call [printf]
inc [char] ; Increment the letter
cmp [char], 'Z' ; Compare to 'Z'
jle start ; char <= 'Z' --> goto start
section 'r.data' data readable writeable
char db 'A', 10, 0 ; Stores the current letter
section '.idata' data readable import
library msvcrt, 'msvcrt.dll'
import msvcrt, printf, 'printf'
Ao compilar isso, obtenho um executável maior do que eu esperava. Aqui está um hexdump:
Percebo que há muito espaço vazio entre a seção de código e as seções de importação de dados e bibliotecas, bem como uma mensagem dizendo "Este programa não pode ser executado no modo DOS" incorporado no código. Como posso montar meu código-fonte em um arquivo pequeno, adequado para o Code Golf?
Como observação, sugestões de melhores maneiras de imprimir stdout
sem importar msvcrt
e ligar printf
são bem-vindas.