ASCII'de R16K1S60'ın ekran çevre birimine çıkışı yazar. Toz Oyuncak tasarruf çalışır 2012356
. (Bilgi için başlıktaki bağlantıya bakın)
Programın bayt boyutu derleme değil, derlenen sonuçtur (Kullanılan Hücreler * 2).
Logo bayt kodunuzdan daha fazla yer kapladığında iyi iş çıkardığınızı biliyorsunuz.
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
açıklama
Yukarıdaki derleme kodu, basit bir sıkıştırma algoritması uygular; 0x000C sözcükleri yeni satır ve 0x0009 yürütmeyi durdurma komutudur.
Diğer kelimeler basitçe kodlanır, şöyle: 0xTTCC
ASM, daha az kullanılanlar da dahil olmak üzere, mevcut her kaydı kullanır:
Talimat İşaretçisi, bazı baytları kaydetmek için birkaç bilinen değeri hızlı bir şekilde geri çağırmak için (Sadece bir kayıt değil, bir girişteki sabit bir değer, depolamak için ekstra bir bayt kullanır)
Yığın İşaretçisi 6. genel amaçlı kayıt olarak kullanılır, çünkü kodlardan hiçbiri yığını kullanmaz.
Önemli veriler için sadece AX, BX, CX ve DX kullanılır. EX ve SP, sık kullanılan bazı sabitleri saklamak için kullanılır.
Biraz basit ve kazanma şansı yok, ama yazmak eğlenceliydi!
Eski yanıt için düzeltme geçmişine bakın (ASM açısından büyüktür)
funfact: bu kelimelerle ölçülmüş olsaydı (R16K1S60,16 bit olması durumunda), 72 baytta pire cevabından daha küçük olurdu