Scrive l'output sullo schermo periferico R16K1S60 in ASCII. Funziona con il salvataggio di The Powder Toy 2012356. (Vedi link nell'intestazione per informazioni)
La dimensione in byte del programma è il risultato compilato (Celle utilizzate * 2), non l'assieme.
Sai di aver fatto bene quando il logo occupa più spazio del tuo bytecode.
a:
mov ex, ip
mov ax, .string
mov sp, ip
mov dx, 0x1000
send sp, dx
.loop:
mov bx, [ax]
cmp bx, ip
je .end
cmp bx, ip
je .newline
shr bx, cx, 8
and cx, 0x00FF
.inner:
send sp, cx
sub bx, ex
jnz .inner
.reentry:
add ax, ex
jmp .loop
.newline:
add dx, 0x0020
send sp, dx
jmp .reentry
.string:
dw 0x0120
dw 0x135F
dw 0x000C
dw 0x012F
dw 0x1320
dw 0x015C
dw 0x000C
dw 0x152D
dw 0x000C
dw 0x017C
dw 0x1320
dw 0x017C
dw 0x000C
dw 0x152D
dw 0x000C
dw 0x017C
dw 0x1320
dw 0x017C
dw 0x000C
dw 0x152D
dw 0x000C
dw 0x015C
dw 0x0A5F
dw 0x0420
dw 0x055F
dw 0x012F
dw 0x000C
dw 0x0B20
dw 0x017C
dw 0x0220
dw 0x012F
dw 0x000C
dw 0x0B20
dw 0x017C
dw 0x0120
dw 0x012F
dw 0x000C
dw 0x0B20
dw 0x017C
dw 0x012F
dw 0x0009
.end:
hlt
Spiegazione
Il codice assembly sopra implementa un semplice algoritmo di compressione, con le parole 0x000C come newline e 0x0009 come comando per interrompere l'esecuzione.
Le altre parole sono codificate semplicemente, in questo modo: 0xTTCC
L'ASM utilizza tutti i registri disponibili, inclusi alcuni dei meno utilizzati:
L'istruzione Pointer, per richiamare rapidamente alcuni valori noti per salvare alcuni byte (un valore costante in un'istruzione che non è solo un registro utilizza un byte aggiuntivo per memorizzarlo)
Stack Pointer viene utilizzato come sesto registro per scopi generici, poiché nessuno dei codici utilizza lo stack.
Solo AX, BX, CX e DX sono effettivamente utilizzati per dati importanti. EX e SP vengono utilizzati per memorizzare alcune costanti che vengono utilizzate di frequente.
È in qualche modo semplice e ha poche possibilità di vincere, ma è stato divertente scrivere!
Vedi la cronologia delle revisioni per la vecchia risposta (è altrettanto grande in termini di ASM)
funfact: se questo fosse misurato in parole (nel caso dei bit R16K1S60,16) sarebbe più piccolo della risposta pyth, a 72 byte