x86_64 머신 코드 (리눅스), 175 99 76 바이트
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
이것은 이진 파일의 덤프이며이 모두는 175 바이트입니다. 기본적으로 모든 답변과 동일한 두 가지 루프를 수행하지만 콘솔에 인쇄하는 것은 약간 어렵고 기본적으로 문자를 스택에 인쇄하여 역으로 인쇄 한 다음 (Linux 관련) syscall을 작성하여 실제로 해당 문자를 넣습니다 stdout에.
이제는 1 번의 쓰기 작업 만 수행하고 (빠른!) 마법의 숫자 (wow!)를 가지며 syscall을 만들기 전에 전체 결과를 스택으로 뒤로 밀면되도록 이것을 최적화했습니다. 누가 적절한 종료 코드가 필요하기 때문에 종료 루틴을 수행 했습니까?
여기 제에 대한 링크의 첫 번째 와 두 은 원래 nasm 구문의 시도 시도에 입니다.
개선 방법에 대한 다른 제안이있는 사람을 환영합니다. 궁금한 점이 있으면 논리를 더 자세히 설명 할 수도 있습니다.
(또한 모든 열을 정렬하기 위해 여분의 공간을 인쇄하지는 않지만 필요한 경우 논리를 몇 바이트 더 넣을 수 있습니다).
편집 : 이제 여분의 공간을 인쇄하고 훨씬 더 골프 다운됩니다! 레지스터로 꽤 미친 짓을하고 있으며이 프로그램을 확장하면 불안정 할 것입니다.
for루프 이외의 작업을 수행 합니까? 도전적인 부분은 어디에 있습니까?