เขียนเอาต์พุตไปยังหน้าจอต่อพ่วง 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 ใช้การลงทะเบียนทุกครั้งที่มีอยู่รวมถึงการลงทะเบียนที่ใช้กันน้อย
Instruction Pointer เพื่อให้ทราบค่าบางอย่างในการเรียกคืนอย่างรวดเร็วเพื่อบันทึกไบต์บางค่า (ค่าคงที่ใน instuction ที่ไม่ใช่แค่การลงทะเบียนใช้ไบต์พิเศษเพื่อเก็บไว้)
Stack Pointer ถูกใช้เพื่อการลงทะเบียนเอนกประสงค์ที่ 6 เนื่องจากไม่มีโค้ดใดที่ใช้สแต็ก
มีการใช้เฉพาะ AX, BX, CX และ DX สำหรับข้อมูลสำคัญ EX และ SP ใช้เพื่อเก็บค่าคงที่บางค่าที่ใช้บ่อย
มันค่อนข้างง่ายและไม่มีโอกาสชนะ แต่มันสนุกที่จะเขียน!
ดูประวัติการแก้ไขสำหรับคำตอบเก่า (มันมีขนาดใหญ่ในแง่ของ ASM)
funfact: ถ้านี่เป็นหน่วยวัดเป็นคำ (ในกรณีของ R16K1S60,16 บิต) มันจะเล็กกว่าคำตอบของ pyth ที่ 72 ไบต์