Escribe la salida a la pantalla del periférico R16K1S60 en ASCII. Se ejecuta en The Powder Toy save 2012356
. (Ver enlace en el encabezado para obtener información)
El tamaño del byte del programa es el resultado compilado (Celdas utilizadas * 2), no el ensamblado.
Sabes que lo has hecho bien cuando el logotipo ocupa más espacio que tu código de bytes.
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
Explicación
El código de ensamblaje anterior implementa un algoritmo de compresión simple, con las palabras 0x000C como una nueva línea y 0x0009 como el comando para detener la ejecución.
Las otras palabras se codifican simplemente, así: 0xTTCC
El ASM utiliza todos los registros disponibles, incluidos algunos de los menos utilizados:
El puntero de instrucciones, para obtener algunos valores conocidos en la recuperación rápida para guardar algunos bytes (un valor constante en una instrucción que no es solo un registro utiliza un byte adicional para almacenarlo)
El puntero de pila se usa como sexto registro de propósito general, porque ninguno de los códigos usa la pila.
Solo AX, BX, CX y DX se usan realmente para datos importantes. EX y SP se usan para almacenar algunas constantes que se usan con frecuencia.
Es algo simple y tiene pocas posibilidades de ganar, ¡pero fue divertido escribir!
Vea el historial de revisiones para la respuesta anterior (es tan grande en términos de ASM)
funfact: si esto se midiera en palabras (en el caso de R16K1S60,16 bits) sería más pequeño que la respuesta pyth, a 72 bytes