Comme exercice, j'ai créé une solution simple pour ce défi, en langage d'assemblage x86. J'exécute cela avec FASM sur Windows. Voici mon code source:
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'
Lorsque je compile ceci, j'obtiens un exécutable plus grand que prévu. Voici un hexdump:
Je remarque qu'il y a beaucoup d'espace vide entre la section de code et les sections d'importation de données et de bibliothèque, ainsi qu'un message disant "Ce programme ne peut pas être exécuté en mode DOS" incorporé dans le code. Comment assembler mon code source dans un petit fichier adapté à Code Golf?
En guise de remarque, les suggestions de meilleures façons d'imprimer stdout
sans importer msvcrt
ni appeler printf
sont les bienvenues.