Menulis output ke layar perangkat R16K1S60 di ASCII. Berjalan pada The Powder Toy save2012356
. (Lihat tautan di tajuk untuk info)
Ukuran byte program adalah hasil yang dikompilasi (Sel Digunakan * 2), bukan rakitan.
Anda tahu Anda telah melakukannya dengan baik ketika logo membutuhkan lebih banyak ruang daripada bytecode Anda.
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
Penjelasan
Kode rakitan di atas mengimplementasikan algoritma kompresi sederhana, dengan kata-kata 0x000C menjadi baris baru dan 0x0009 menjadi perintah untuk menghentikan eksekusi.
Kata-kata lain disandikan secara sederhana, seperti ini: 0xTTCC
ASM menggunakan setiap register yang tersedia untuknya, termasuk beberapa yang kurang umum digunakan:
Instruction Pointer, untuk mendapatkan beberapa nilai yang diketahui ke dalam penarikan cepat untuk menyimpan beberapa byte (Nilai konstan dalam sebuah instuksi yang bukan hanya sebuah register menggunakan byte tambahan untuk menyimpannya)
Stack Pointer digunakan sebagai register tujuan umum ke-6, karena tidak ada kode yang menggunakan stack.
Hanya AXE, BX, CX, dan DX yang benar-benar digunakan untuk data penting. EX dan SP digunakan untuk menyimpan beberapa konstanta yang sering digunakan.
Ini agak sederhana, dan memiliki peluang nol untuk menang, tetapi menyenangkan untuk menulis!
Lihat riwayat revisi untuk jawaban lama (Sama besarnya dalam hal ASM)
funfact: jika ini diukur dalam kata-kata (dalam kasus R16K1S60,16 bit) itu akan lebih kecil daripada jawaban pyth, pada 72 byte