Grava a saída na tela periférica do R16K1S60 em ASCII. É executado no The Powder Toy salvar2012356
. (Veja o link no cabeçalho para informações)
O tamanho do byte do programa é o resultado compilado (Células Usadas * 2), não o assembly.
Você sabe que se saiu bem quando o logotipo ocupa mais espaço que o seu 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
Explicação
O código de montagem acima implementa um algoritmo de compactação simples, com as palavras 0x000C como uma nova linha e 0x0009 como o comando para interromper a execução.
As outras palavras são codificadas simplesmente, assim: 0xTTCC
O ASM usa todos os registros disponíveis, incluindo alguns dos menos usados:
O Ponteiro de Instruções, para que alguns valores conhecidos sejam recuperados rapidamente para salvar alguns bytes (um valor constante em uma instância que não é apenas um registro usa um byte extra para armazená-lo)
O ponteiro da pilha é usado como sexto registro de uso geral, porque nenhum código usa a pilha.
Somente AX, BX, CX e DX são realmente usados para dados importantes. EX e SP são usados para armazenar algumas constantes que são usadas com freqüência.
É um tanto simples e sem chance de ganhar, mas foi divertido escrever!
Consulte o histórico de revisões para obter a resposta antiga (é tão grande em termos de ASM)
fato relevante: se isso fosse medido em palavras (no caso dos R16K1S60,16 bits), seria menor que a resposta da pyth, em 72 bytes