Як вправу я створив просте рішення для цього завдання, мовою асамблеї x86. Я запускаю це з FASM в Windows. Ось мій вихідний код:
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'
Коли я компілюю це, я отримую виконуваний файл більший, ніж я очікував. Ось шістнадцятковий набір:
Я зауважую, що між розділом коду та розділами імпорту даних та бібліотеки є багато порожнього простору, а також повідомлення про те, що "Ця програма не може бути запущена в режимі DOS", вкладена в код. Як я можу зібрати свій вихідний код до невеликого файлу, який підходить для Code Golf?
Як зауваження, вітаються пропозиції щодо кращих способів друку stdout
без імпорту msvcrt
та дзвінків printf
.