Als Übung habe ich eine einfache Lösung für diese Herausforderung in x86-Assemblersprache erstellt. Ich führe dies mit FASM unter Windows aus. Hier ist mein Quellcode:
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'
Wenn ich dies kompiliere, erhalte ich eine ausführbare Datei, die größer ist als erwartet. Hier ist ein Hexdump:
Ich stelle fest, dass zwischen dem Codeabschnitt und den Daten- und Bibliotheksimportabschnitten viel Leerraum vorhanden ist und dass im Code die Meldung "Dieses Programm kann nicht im DOS-Modus ausgeführt werden" eingebettet ist. Wie kann ich meinen Quellcode zu einer kleinen Datei zusammenstellen, die für Code Golf geeignet ist?
Als Randnotiz sind Vorschläge für bessere Druckmöglichkeiten stdout
ohne Importieren msvcrt
und Aufrufen printf
willkommen.