x86 Assembly, 512 bytes
NASM ile derlenmiş ve QEMU ile test edilmiştir. Önyükleme yapmak için, önyükleyicinin sonuna 2 bitlik bir önyükleme imzası koymanız gerekir (dosyaya 510 bayt), bu nedenle derlenen kodu sıfırlarla doldururken 317 bayt kaybettim. Bu benim ilk golf oyunum, bu yüzden dev hatalardan dolayı özür dilemeliyim.
[org 7c00h] ;So NASM can change the labels into memory locations correctly.
cld ;Tells lodsb to look forward in memory
mov bh, 65 ;Moves the ASCII value of A into the BH register
mov si, NATO ;Moves the first byte of NATO into the si register
call print ;Call the 'print' subroutine
jmp $ ;Loops forever
print:
mov ah, 0eh ;Moves the hex value 0E into the AH register. Tells interrupt 10h that we want subfucntion 0E
lodsb ;Load a byte of SI into AL and increments a register (DL i think) that tells it the offset to look at
cmp al, 3 ;Compares the AL register that now has a byte from our string to ASCII value 3 (Enf Of Text)
je R ;If AL == 3 then jump to R
cmp al, 0 ;Comapre AL to ASCII 0 (NULL)
je newWord ;If AL == 0 hump to newWord
int 10h ;Execute interrupt 10h Subfunction 0Eh (stored in AH register) which prints character value in AL
jmp print ;Jump to print
newWord:
mov al, 10 ;Move ASCII 10 (New Line) into AL
int 10h ;Print character
mov al, 13 ;Move ASCII 13 (Carriage Return) into AL
int 10h ;Print character
mov al, bh ;Move BH (which has our starting letter) into AL
int 10h ;Print Character
mov al, 58 ;Move ASCII 58 (:) into AL
int 10h ;Print Character
mov al, 32 ;Move ASCII 32 (Space) into AL
int 10h ;Print Character
mov al, bh ;Move BH into AL
int 10h ;Print Character
inc bh ;Increments BH by one (BH++)
jmp print ;Jump to print
R:
ret ;Returns from a subroutine
;Below defines bytes (db) of our string to print. I used 0 as word seperators and 3 to end the string.
NATO: db 0,"lfa",0,"ravo",0,"harlie",0,"elta",0,"cho",0,"oxtrot",0,"olf",0,"otel",0,"ndia",0,"uliet",0,"ilo",0,"ima",0,"ike",0,"ovember",0,"scar",0,"apa",0,"uebec",0,"omeo",0,"ierra",0,"ango",0,"niform",0,"ictor",0,"hiskey",0,"ray",0,"ankee",0,"ulu",3
times 0200h - 2 - ($ - $$) db 0 ;Zerofill the file with upto 510 bytes (This is where all my bytes are)
dw 0AA55H ;Write the bootsignature
Çıktı
Yukarıdaki kodun çıktısı budur. Gördüğünüz gibi A: Alfa eksik ve bunun nedeni istemin 25 satır yüksekliğinde olması ...
Bunu kanıtlamak için A: Alfa'yı değiştirdim 0,"ulu"
, 32,"Z: Zulu"
böylece Zulu Yankee ile aynı satırda yer alıyor.
Biri bana kodumdan 317 bayt sıfır dolum çıkarabileceğimi söylerse sevinirim, böylece 195 bayt olur. Ayrıca, eğer çıktı ekrana sığmayacağından bile geçerliyse.