Ghi đầu ra ra màn hình ngoại vi R16K1S60 trong ASCII. Chạy trên The Powder Toy tiết kiệm 2012356
. (Xem liên kết trong tiêu đề để biết)
Kích thước byte của chương trình là kết quả được biên dịch (Các ô được sử dụng * 2), không phải là cụm.
Bạn biết bạn đã hoàn thành tốt khi logo chiếm nhiều không gian hơn mã byte của bạn.
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
Giải trình
Mã lắp ráp ở trên thực hiện một thuật toán nén đơn giản, với các từ 0x000C là một dòng mới và 0x0009 là lệnh dừng thực thi.
Các từ khác được mã hóa đơn giản, như thế này: 0xTTCC
T: Lần lặp lại giá trị
C: Ký tự ASCII cần in
ASM sử dụng mọi thanh ghi có sẵn cho nó, bao gồm một số những cái ít được sử dụng:
Con trỏ lệnh, để có được một vài giá trị đã biết vào việc thu hồi nhanh để lưu một số byte (Một giá trị không đổi trong một cảm ứng không chỉ là một thanh ghi sử dụng một byte bổ sung để lưu trữ nó)
Con trỏ ngăn xếp được sử dụng làm thanh ghi mục đích chung thứ 6, vì không có mã nào sử dụng ngăn xếp.
Chỉ AX, BX, CX và DX thực sự được sử dụng cho dữ liệu quan trọng. EX và SP được sử dụng để lưu trữ một số hằng số được sử dụng thường xuyên.
Nó hơi đơn giản và không có cơ hội chiến thắng, nhưng thật vui khi viết!
Xem lịch sử sửa đổi cho câu trả lời cũ (Nó chỉ lớn bằng ASM)
funfact: nếu điều này được đo bằng từ (trong trường hợp R16K1S60,16 bit) thì nó sẽ nhỏ hơn câu trả lời thứ ba, ở mức 72 byte