user: 下面的汇编指令对应的C源代码是什么:

```asm
<itoa>:
  endbr64
  lea    0x9(%rdi),%eax
  push   %r14
  mov    %edi,%ecx
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rsi,%rbx
  cmp    $0x12,%eax
  ja     L45
  test   %edi,%edi
  js     L206
  mov    %rsi,%rax
  mov    $0x1,%r8d
  mov    $0x1,%esi
L159:
  add    $0x30,%ecx
  mov    %cl,(%rax)
  mov    %r8d,%eax
  movb   $0x0,(%rbx,%rsi,1)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   0x0(%rax)
L45:
  movslq %edi,%rdx
  mov    %edi,%eax
  imul   $0x66666667,%rdx,%rdx
  sar    $0x1f,%eax
  sar    $0x22,%rdx
  sub    %eax,%edx
  lea    (%rdx,%rdx,4),%eax
  lea    0x9(%rdx),%esi
  add    %eax,%eax
  sub    %eax,%edi
  mov    %edx,%eax
  test   %ecx,%ecx
  js     L200
  lea    0x30(%rdi),%ebp
  cmp    $0x12,%esi
  jbe    L134
  movslq %edx,%rax
  mov    %edx,%ecx
  imul   $0x66666667,%rax,%rax
  sar    $0x1f,%ecx
  sar    $0x22,%rax
  sub    %ecx,%eax
  lea    (%rax,%rax,4),%ecx
  add    %ecx,%ecx
  sub    %ecx,%edx
  lea    0x30(%rdx),%r12d
  lea    0x9(%rax),%edx
  cmp    $0x12,%edx
  ja     L188
L72:
  mov    %rbx,%rdx
  mov    $0x3,%esi
  mov    $0x3,%r8d
  mov    $0x2,%ecx
  mov    $0x1,%edi
L172:
  add    $0x30,%eax
  mov    %al,(%rdx)
L77:
  mov    %r12b,(%rbx,%rdi,1)
L88:
  mov    %bpl,(%rbx,%rcx,1)
  mov    %r8d,%eax
  movb   $0x0,(%rbx,%rsi,1)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopw   0x0(%rax,%rax,1)
L200:
  mov    $0x30,%r13d
  mov    %r13d,%ebp
  sub    %edi,%ebp
  cmp    $0x12,%esi
  jbe    L156
  movslq %edx,%rax
  mov    %edx,%esi
  imul   $0x66666667,%rax,%rax
  sar    $0x1f,%esi
  sar    $0x22,%rax
  sub    %esi,%eax
  lea    (%rax,%rax,4),%r12d
  lea    0x0(%r13,%r12,2),%r12d
  sub    %edx,%r12d
  lea    0x9(%rax),%edx
  cmp    $0x12,%edx
  ja     L222
  cmp    $0xffffff9d,%ecx
  jge    L72
  movb   $0x2d,(%rbx)
  lea    0x1(%rbx),%rdx
  neg    %eax
  mov    $0x4,%esi
  mov    $0x4,%r8d
  mov    $0x3,%ecx
  mov    $0x2,%edi
  jmp    L172
  nopl   (%rax)
L206:
  movb   $0x2d,(%rsi)
  lea    0x1(%rsi),%rax
  neg    %ecx
  mov    $0x2,%esi
  mov    $0x2,%r8d
  jmp    L159
  nopl   0x0(%rax)
L134:
  mov    %rbx,%rdx
  mov    $0x2,%esi
  mov    $0x2,%r8d
  mov    $0x1,%ecx
L214:
  add    $0x30,%eax
  mov    %al,(%rdx)
  jmp    L88
  nopl   (%rax)
L156:
  movb   $0x2d,(%rbx)
  neg    %eax
  lea    0x1(%rbx),%rdx
  mov    $0x3,%esi
  mov    $0x3,%r8d
  mov    $0x2,%ecx
  jmp    L214
  nopl   0x0(%rax,%rax,1)
L188:
  movslq %eax,%rdx
  mov    %eax,%ecx
  imul   $0x66666667,%rdx,%rdx
  sar    $0x1f,%ecx
  sar    $0x22,%rdx
  sub    %ecx,%edx
  lea    (%rdx,%rdx,4),%ecx
  add    %ecx,%ecx
  sub    %ecx,%eax
  lea    0x30(%rax),%r14d
  lea    0x9(%rdx),%eax
  cmp    $0x12,%eax
  jbe    L168
L64:
  movslq %edx,%rax
  mov    %edx,%esi
  mov    %edx,%r13d
  imul   $0x66666667,%rax,%rcx
  sar    $0x1f,%esi
  sar    $0x22,%rcx
  sub    %esi,%ecx
  lea    (%rcx,%rcx,4),%ecx
  add    %ecx,%ecx
  sub    %ecx,%r13d
  add    $0x30,%r13d
L186:
  imul   $0x66666667,%rax,%rdi
  sar    $0x1f,%edx
  mov    %rbx,%rsi
  sar    $0x22,%rdi
  sub    %edx,%edi
  call   <itoa>
  movslq %eax,%rdx
  lea    0x1(%rax),%r9d
  lea    0x2(%rax),%edi
  mov    %r13b,(%rbx,%rdx,1)
  lea    0x3(%rax),%ecx
  lea    0x4(%rax),%r8d
  movslq %r9d,%r9
  movslq %edi,%rdi
  movslq %ecx,%rcx
  movslq %r8d,%rsi
L31:
  mov    %r14b,(%rbx,%r9,1)
  jmp    L77
  nopw   0x0(%rax,%rax,1)
L222:
  movslq %eax,%rdx
  mov    %eax,%esi
  mov    %eax,%edi
  imul   $0x66666667,%rdx,%rdx
  sar    $0x1f,%esi
  sar    $0x22,%rdx
  sub    %esi,%edx
  lea    (%rdx,%rdx,4),%esi
  add    %esi,%esi
  sub    %esi,%edi
  lea    0x9(%rdx),%esi
  cmp    $0xffffff9d,%ecx
  jge    L49
  mov    %r13d,%r14d
  sub    %edi,%r14d
  cmp    $0x12,%esi
  ja     L46
L205:
  cmp    $0xfffffc19,%ecx
  jge    L168
  movb   $0x2d,(%rbx)
  lea    0x1(%rbx),%rax
  neg    %edx
  mov    $0x5,%esi
  mov    $0x5,%r8d
  mov    $0x4,%ecx
  mov    $0x3,%edi
  mov    $0x2,%r9d
  jmp    L132
  nopl   0x0(%rax,%rax,1)
L168:
  mov    %rbx,%rax
  mov    $0x4,%esi
  mov    $0x4,%r8d
  mov    $0x3,%ecx
  mov    $0x2,%edi
  mov    $0x1,%r9d
L132:
  add    $0x30,%edx
  mov    %dl,(%rax)
  jmp    L31
  nopl   0x0(%rax,%rax,1)
L46:
  movslq %edx,%rax
  mov    %edx,%edi
  imul   $0x66666667,%rax,%rsi
  sar    $0x1f,%edi
  sar    $0x22,%rsi
  sub    %edi,%esi
  mov    %edx,%edi
  lea    (%rsi,%rsi,4),%esi
  add    %esi,%esi
  sub    %esi,%edi
  cmp    $0xfffffc19,%ecx
  jge    L64
  sub    %edi,%r13d
  jmp    L186
L49:
  mov    $0xa,%esi
  cltd
  idiv   %esi
  lea    0x30(%rdx),%r14d
  mov    %eax,%edx
  lea    0x9(%rax),%eax
  cmp    $0x12,%eax
  ja     L64
  jmp    L205
```

assistant: ```c
int itoa(int n, char s[]) {
  int i;
  if (!(n / 10)) {
    i = 0;
    if (n < 0) {
      n = -n;
      s[i++] = '-';
    }
    s[i++] = n + '0';
  } else {
    s[i = itoa(n / 10, s)] = (n < 0 ? -(n % 10) : n % 10) + '0';
    i++;
  }
  s[i] = '\0';
  return i;
}
```