Código de máquina x86_64 (Linux), 175 99 76 bytes
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
Este es un volcado del archivo binario, y todo esto es de 175 bytes. Básicamente, hace los mismos dos bucles que todas las respuestas, pero imprimir en la consola es un poco más difícil y básicamente requiere presionar a los personajes para imprimir en la pila en reversa, y luego hacer un syscall (específico de Linux) para poner esos caracteres en realidad en stdout.
Ahora he optimizado esto para que solo se realice 1 operación de escritura (¡más rápido!) Y tenga números mágicos (¡guau!) Y empuje todo el resultado hacia la pila hacia atrás antes de realizar la llamada al sistema. También eliminé la rutina de salida porque ¿quién necesita el código de salida adecuado?
Aquí hay un enlace a mi primer y segundo intento, en su sintaxis nasm original.
Doy la bienvenida a cualquiera que tenga otras sugerencias sobre cómo se puede mejorar. También puedo explicar la lógica con más detalle si alguien tiene curiosidad.
(Además, no imprime los espacios adicionales para alinear todas las columnas, pero si es necesario, puedo poner la lógica a costa de unos pocos bytes más).
EDITAR: ¡Ahora imprime espacios adicionales y se juega aún más! Está haciendo algunas cosas bastante locas con los registros, y probablemente sea inestable si este programa se expandiera.
forbucles? ¿Dónde está la parte desafiante (interesante)?