kode mesin x86_64 (linux), 175 99 76 byte
0000000000400080 <_start>:
400080: 66 bf 09 00 mov $0x9,%di
0000000000400084 <_table.L2>:
400084: 6a 0a pushq $0xa
400086: 89 fe mov %edi,%esi
0000000000400088 <_table.L3>:
400088: 89 f0 mov %esi,%eax
40008a: f7 e7 mul %edi
000000000040008c <_printInteger>:
40008c: 6a 20 pushq $0x20
40008e: 3c 0a cmp $0xa,%al
400090: 7d 02 jge 400094 <_printInteger.L1>
400092: 6a 20 pushq $0x20
0000000000400094 <_printInteger.L1>:
400094: 66 31 d2 xor %dx,%dx
400097: b3 0a mov $0xa,%bl
400099: 66 f7 f3 div %bx
40009c: 83 c2 30 add $0x30,%edx
40009f: 52 push %rdx
4000a0: 66 85 c0 test %ax,%ax
4000a3: 75 ef jne 400094 <_printInteger.L1>
4000a5: 6a 3d pushq $0x3d
4000a7: 66 57 push %di
4000a9: 80 04 24 30 addb $0x30,(%rsp)
4000ad: 6a 78 pushq $0x78
4000af: 66 56 push %si
4000b1: 80 04 24 30 addb $0x30,(%rsp)
4000b5: ff ce dec %esi
4000b7: 75 cf jne 400088 <_table.L3>
4000b9: ff cf dec %edi
4000bb: 75 c7 jne 400084 <_table.L2>
00000000004000bd <_printChars>:
4000bd: 66 ba 00 08 mov $0x800,%dx
4000c1: b0 01 mov $0x1,%al
4000c3: 66 bf 01 00 mov $0x1,%di
4000c7: 48 89 e6 mov %rsp,%rsi
4000ca: 0f 05 syscall
Ini adalah dump dari file biner, dan semua ini adalah 175 byte. Ini pada dasarnya melakukan dua loop yang sama seperti yang dilakukan semua jawaban, tetapi mencetak ke konsol sedikit lebih sulit dan pada dasarnya mengharuskan mendorong karakter untuk mencetak ke stack secara terbalik, dan kemudian membuat syscall (khusus linux) untuk benar-benar memasukkan karakter-karakter itu. ke stdout.
Saya sekarang telah mengoptimalkan ini sehingga hanya 1 operasi tulis dilakukan (lebih cepat!) Dan memiliki angka ajaib (wow!) Dan dengan mendorong seluruh hasil ke tumpukan ke belakang sebelum melakukan syscall. Saya juga mengeluarkan rutin keluar karena siapa yang butuh kode keluar yang benar?
Berikut ini tautan ke pertama dan kedua saya upaya , dalam sintaks nasm aslinya.
Saya menyambut siapa saja yang memiliki saran lain tentang bagaimana hal itu dapat ditingkatkan. Saya juga bisa menjelaskan logikanya lebih terinci jika ada yang penasaran.
(Juga, itu tidak mencetak ruang ekstra untuk membuat semua kolom sejajar, tetapi jika itu diperlukan saya bisa memasukkan logika dengan biaya beberapa byte lagi).
EDIT: Sekarang mencetak ruang ekstra dan bermain golf lebih banyak lagi! Itu melakukan beberapa hal yang sangat gila dengan register, dan mungkin tidak stabil jika program ini akan diperluas.
for
loop? Di mana bagian yang menantang (menarik)?