user: 这段汇编代码用C语言表示是什么样的?

```asm
<print_times_table>:
  endbr64
  cmp    $0xf,%edi
  ja     L128
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  lea    0x1(%rdi),%r14d
  mov    $0x0,%r15d
  jmp    L119
L132:
  mov    $0x2c,%edi
  call   <_putchar@plt>
  mov    $0x20,%edi
  call   <_putchar@plt>
  cmp    $0x9,%ebp
  jg     L80
  mov    $0x20,%edi
  call   <_putchar@plt>
  mov    $0x20,%edi
  call   <_putchar@plt>
  movslq %ebp,%rax
  imul   $0x66666667,%rax,%rax
  sar    $0x22,%rax
  mov    %ebp,%edx
  sar    $0x1f,%edx
  sub    %edx,%eax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%ebx
  lea    0x30(%rbx),%edi
  movsbl %dil,%edi
  call   <_putchar@plt>
L114:
  add    $0x1,%r12d
  add    0x8(%rsp),%ebp
  cmp    %r14d,%r12d
  je     L109
L0:
  mov    %ebp,%ebx
  mov    $0x0,%eax
  test   %r12d,%r12d
  jne    L132
L7:
  lea    -0xa(%rbp),%edx
  cmp    $0x59,%edx
  jbe    L87
  cmp    $0x63,%ebx
  jle    L11
  test   %al,%al
  je     L11
  movslq %ebx,%r13
  imul   $0x51eb851f,%r13,%rdi
  sar    $0x25,%rdi
  mov    %ebx,%eax
  sar    $0x1f,%eax
  mov    %eax,0xc(%rsp)
  sub    %eax,%edi
  add    $0x30,%edi
  movsbl %dil,%edi
  call   <_putchar@plt>
  imul   $0x66666667,%r13,%r13
  sar    $0x22,%r13
  sub    0xc(%rsp),%r13d
  movslq %r13d,%rax
  imul   $0x66666667,%rax,%rax
  sar    $0x22,%rax
  mov    %r13d,%edx
  sar    $0x1f,%edx
  sub    %edx,%eax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  mov    %r13d,%edi
  sub    %eax,%edi
  add    $0x30,%edi
  movsbl %dil,%edi
  call   <_putchar@plt>
  lea    0x0(%r13,%r13,4),%eax
  add    %eax,%eax
  sub    %eax,%ebx
  lea    0x30(%rbx),%edi
  movsbl %dil,%edi
  call   <_putchar@plt>
  jmp    L114
L80:
  mov    $0x1,%eax
  jmp    L7
L87:
  mov    $0x20,%edi
  call   <_putchar@plt>
  movslq %ebx,%r13
  imul   $0x66666667,%r13,%r13
  sar    $0x22,%r13
  mov    %ebx,%eax
  sar    $0x1f,%eax
  sub    %eax,%r13d
  lea    0x30(%r13),%edi
  movsbl %dil,%edi
  call   <_putchar@plt>
  lea    0x0(%r13,%r13,4),%eax
  add    %eax,%eax
  sub    %eax,%ebx
  lea    0x30(%rbx),%edi
  movsbl %dil,%edi
  call   <_putchar@plt>
  jmp    L114
L11:
  movslq %ebx,%rax
  imul   $0x66666667,%rax,%rax
  sar    $0x22,%rax
  mov    %ebx,%edx
  sar    $0x1f,%edx
  sub    %edx,%eax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%ebx
  lea    0x30(%rbx),%edi
  movsbl %dil,%edi
  call   <_putchar@plt>
  jmp    L114
L109:
  mov    $0xa,%edi
  call   <_putchar@plt>
  add    $0x1,%r15d
  cmp    %r14d,%r15d
  je     L35
L119:
  mov    %r15d,0x8(%rsp)
  mov    $0x0,%ebp
  mov    $0x0,%r12d
  jmp    L0
L35:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L128:
  ret
```

assistant: ```c
void print_times_table(int n) {
  int i, j, total;
  if (!(n > 15 || n < 0)) {
    for (i = 0; i <= n; i++) {
      for (j = 0; j <= n; j++) {
        total = (i * j);
        if (j != 0) {
          _putchar(',');
          _putchar(' ');
        }
        if (total < 10 && j != 0) {
          _putchar(' ');
          _putchar(' ');
          _putchar((total % 10) + '0');
        } else if (total >= 10 && total < 100) {
          _putchar(' ');
          _putchar((total / 10) + '0');
          _putchar((total % 10) + '0');
        } else if (total >= 100 && j != 0) {
          _putchar((total / 100) + '0');
          _putchar((total / 10) % 10 + '0');
          _putchar((total % 10) + '0');
        } else
          _putchar((total % 10) + '0');
      }
      _putchar('\n');
    }
  }
}
```