Записывает вывод на периферийное устройство R16K1S60 в ASCII. Работает на Порошок Игрушка сохранить2012356
. (См. Ссылку в шапке для информации)
Размер программы в байтах - это скомпилированный результат (Cells Used * 2), а не сборка.
Вы знаете, что преуспели, когда логотип занимает больше места, чем ваш байт-код.
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
объяснение
Приведенный выше код на ассемблере реализует простой алгоритм сжатия: слова 0x000C - это новая строка, а 0x0009 - команда для остановки выполнения.
Остальные слова кодируются просто, например так: 0xTTCC
ASM использует все доступные ему регистры, включая некоторые из менее часто используемых:
Указатель инструкций для быстрого вызова нескольких известных значений с целью сохранения некоторых байтов (постоянное значение в экземпляре, а не просто регистр, использует дополнительный байт для его хранения)
Указатель стека используется в качестве шестого регистра общего назначения, поскольку ни один из кодов не использует этот стек.
Только AX, BX, CX и DX фактически используются для важных данных. EX и SP используются для хранения некоторых часто используемых констант.
Это несколько просто, и у него нет шансов на победу, но было весело писать!
Смотрите историю изменений для старого ответа (он такой же большой с точки зрения ASM)
Funfact: если бы это было измерено в словах (в случае R16K1S60,16 бит), это было бы меньше, чем ответ Pyth, на 72 байта