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

```asm
<ft_putnbr>:
  endbr64
  push   %r15
  mov    %edi,%eax
  push   %r14
  push   %r13
  mov    $0xcccccccd,%r13d
  push   %r12
  push   %rbp
  mov    %eax,%ebp
  push   %rbx
  sub    $0x38,%rsp
  test   %eax,%eax
  js     L113
L19:
  cmp    $0x9,%ebp
  jbe    L20
L74:
  mov    %ebp,%r12d
  mov    %r12,%rax
  imul   %r13,%rax
  shr    $0x23,%rax
  mov    %rax,0x10(%rsp)
  cmp    $0x63,%ebp
  jbe    L111
  imul   $0x51eb851f,%r12,%rax
  shr    $0x25,%rax
  mov    %rax,0x18(%rsp)
  cmp    $0x3e7,%ebp
  jbe    L110
  imul   $0x10624dd3,%r12,%rax
  shr    $0x26,%rax
  mov    %rax,0x20(%rsp)
  cmp    $0x270f,%ebp
  jbe    L17
  mov    $0xd1b71759,%r14d
  imul   %r12,%r14
  shr    $0x2d,%r14
  cmp    $0x1869f,%ebp
  jbe    L54
  mov    %ebp,%ebx
  shr    $0x5,%ebx
  imul   $0xa7c5ac5,%rbx,%rbx
  shr    $0x27,%rbx
  cmp    $0xf423f,%ebp
  jbe    L72
  imul   $0x431bde83,%r12,%r15
  shr    $0x32,%r15
  mov    %r15,0x8(%rsp)
  cmp    $0x98967f,%ebp
  jbe    L66
  imul   $0x6b5fca6b,%r12,%rdx
  shr    $0x36,%rdx
  mov    %rdx,%r15
  cmp    $0x5f5e0ff,%ebp
  jbe    L56
  imul   $0x55e63b89,%r12,%rax
  shr    $0x39,%rax
  cmp    $0x3b9ac9ff,%ebp
  jbe    L90
  mov    %ebp,%edi
  mov    %eax,0x2c(%rsp)
  shr    $0x9,%edi
  imul   $0x44b83,%rdi,%rdi
  shr    $0x27,%rdi
  call   <ft_putnbr>
  mov    0x2c(%rsp),%ecx
  mov    %rcx,%rax
  imul   %r13,%rcx
  shr    $0x23,%rcx
  lea    (%rcx,%rcx,4),%ecx
  add    %ecx,%ecx
  sub    %ecx,%eax
L90:
  lea    0x30(%rax),%edi
  call   <ft_putchar@plt>
  mov    %r15d,%eax
  imul   %r13,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%r15d
L56:
  lea    0x30(%r15),%edi
  call   <ft_putchar@plt>
  mov    0x8(%rsp),%eax
  mov    %rax,%rsi
  imul   %r13,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%esi
  mov    %esi,0x8(%rsp)
L66:
  mov    0x8(%rsp),%edi
  add    $0x30,%edi
  call   <ft_putchar@plt>
  mov    %ebx,%eax
  imul   %r13,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%ebx
L72:
  lea    0x30(%rbx),%edi
  call   <ft_putchar@plt>
  mov    %r14d,%eax
  imul   %r13,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%r14d
L54:
  lea    0x30(%r14),%edi
  call   <ft_putchar@plt>
  mov    0x20(%rsp),%eax
  mov    %rax,%rdx
  imul   %r13,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%edx
  mov    %edx,0x20(%rsp)
L17:
  mov    0x20(%rsp),%edi
  add    $0x30,%edi
  call   <ft_putchar@plt>
  mov    0x18(%rsp),%eax
  mov    %rax,%rsi
  imul   %r13,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%esi
  mov    %esi,0x18(%rsp)
L110:
  mov    0x18(%rsp),%edi
  add    $0x30,%edi
  call   <ft_putchar@plt>
  mov    0x10(%rsp),%eax
  mov    %rax,%rcx
  imul   %r13,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%ecx
  mov    %ecx,0x10(%rsp)
L111:
  mov    0x10(%rsp),%edi
  add    $0x30,%edi
  call   <ft_putchar@plt>
  mov    %r12,%rax
  imul   %r13,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%edx
  mov    %ebp,%eax
  add    %edx,%edx
  sub    %edx,%eax
  mov    %eax,%ebp
  test   %eax,%eax
  jns    L19
L113:
  mov    $0x2d,%edi
  neg    %ebp
  call   <ft_putchar@plt>
  cmp    $0x9,%ebp
  ja     L74
L20:
  add    $0x38,%rsp
  lea    0x30(%rbp),%edi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1050 <ft_putchar@plt>
```

assistant: ```c
void ft_putnbr(int n) {
  unsigned int nbr;
  if (n < 0) {
    ft_putchar('-');
    nbr = -n;
  } else
    nbr = n;
  if (nbr >= 10) {
    ft_putnbr(nbr / 10);
    ft_putnbr(nbr % 10);
  } else {
    ft_putchar(nbr + '0');
  }
}
```