user: Demonstrate the C code that generates the assembly output below:

```asm
<int2string>:
  endbr64
  sub    $0x28,%rsp
  mov    %rsi,%rdx
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  test   %edi,%edi
  js     L83
  mov    $0x0,%r9d
  je     L142
L78:
  mov    %edi,%esi
  mov    $0xcccccccd,%r8d
  imul   %r8,%rsi
  shr    $0x23,%rsi
  lea    (%rsi,%rsi,4),%ecx
  mov    %esi,%eax
  mov    %edi,%esi
  add    %ecx,%ecx
  sub    %ecx,%esi
  mov    %sil,0x9(%rsp)
  test   %eax,%eax
  je     L188
  mov    %eax,%ecx
  imul   %r8,%rcx
  shr    $0x23,%rcx
  lea    (%rcx,%rcx,4),%edi
  add    %edi,%edi
  sub    %edi,%eax
  mov    %al,0xa(%rsp)
  test   %ecx,%ecx
  je     L180
  mov    %ecx,%eax
  imul   %r8,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%edi
  add    %edi,%edi
  sub    %edi,%ecx
  mov    %cl,0xb(%rsp)
  test   %eax,%eax
  je     L275
  mov    %eax,%ecx
  imul   %r8,%rcx
  shr    $0x23,%rcx
  lea    (%rcx,%rcx,4),%edi
  add    %edi,%edi
  sub    %edi,%eax
  mov    %al,0xc(%rsp)
  test   %ecx,%ecx
  je     L270
  mov    %ecx,%eax
  imul   %r8,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%edi
  add    %edi,%edi
  sub    %edi,%ecx
  mov    %cl,0xd(%rsp)
  test   %eax,%eax
  je     L50
  mov    %eax,%ecx
  imul   %r8,%rcx
  shr    $0x23,%rcx
  lea    (%rcx,%rcx,4),%edi
  add    %edi,%edi
  sub    %edi,%eax
  mov    %al,0xe(%rsp)
  test   %ecx,%ecx
  je     L148
  mov    %ecx,%edi
  imul   %r8,%rdi
  shr    $0x23,%rdi
  lea    (%rdi,%rdi,4),%eax
  add    %eax,%eax
  sub    %eax,%ecx
  mov    %cl,0xf(%rsp)
  test   %edi,%edi
  je     L131
  mov    %edi,%eax
  imul   %r8,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%ecx
  add    %ecx,%ecx
  sub    %ecx,%edi
  mov    %dil,0x10(%rsp)
  test   %eax,%eax
  je     L195
  mov    %eax,%ecx
  imul   %r8,%rcx
  shr    $0x23,%rcx
  lea    (%rcx,%rcx,4),%edi
  add    %edi,%edi
  sub    %edi,%eax
  mov    %al,0x11(%rsp)
  test   %ecx,%ecx
  je     L5
  add    $0x30,%eax
  mov    %cl,0x12(%rsp)
  add    $0x30,%ecx
  add    $0xa,%r9d
  mov    %cl,(%rdx)
  lea    0x2(%rdx),%rdi
  mov    $0x8,%ecx
  mov    %al,0x1(%rdx)
  mov    $0x9,%eax
L65:
  lea    -0x1(%rcx),%r10d
  movslq %r10d,%r8
  movzbl 0x9(%rsp,%r8,1),%r8d
  add    $0x30,%r8d
  mov    %r8b,(%rdi)
  test   %r10d,%r10d
  je     L176
  lea    -0x2(%rcx),%r10d
  movslq %r10d,%r8
  movzbl 0x9(%rsp,%r8,1),%r8d
  add    $0x30,%r8d
  mov    %r8b,0x1(%rdi)
  test   %r10d,%r10d
  je     L176
  lea    -0x3(%rcx),%r10d
  movslq %r10d,%r8
  movzbl 0x9(%rsp,%r8,1),%r8d
  add    $0x30,%r8d
  mov    %r8b,0x2(%rdi)
  test   %r10d,%r10d
  je     L176
  lea    -0x4(%rcx),%r10d
  movslq %r10d,%r8
  movzbl 0x9(%rsp,%r8,1),%r8d
  add    $0x30,%r8d
  mov    %r8b,0x3(%rdi)
  test   %r10d,%r10d
  je     L176
  lea    -0x5(%rcx),%r10d
  movslq %r10d,%r8
  movzbl 0x9(%rsp,%r8,1),%r8d
  add    $0x30,%r8d
  mov    %r8b,0x4(%rdi)
  test   %r10d,%r10d
  je     L176
  lea    -0x6(%rcx),%r10d
  movslq %r10d,%r8
  movzbl 0x9(%rsp,%r8,1),%r8d
  add    $0x30,%r8d
  mov    %r8b,0x5(%rdi)
  test   %r10d,%r10d
  je     L176
  sub    $0x7,%ecx
  movslq %ecx,%r8
  movzbl 0x9(%rsp,%r8,1),%r8d
  add    $0x30,%r8d
  mov    %r8b,0x6(%rdi)
  test   %ecx,%ecx
  je     L176
  add    $0x30,%esi
  mov    %sil,0x7(%rdi)
L176:
  add    $0x1,%eax
  cltq
  add    %rax,%rdx
L142:
  movb   $0x0,(%rdx)
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L141
  mov    %r9d,%eax
  add    $0x28,%rsp
  ret
  nopw   0x0(%rax,%rax,1)
L83:
  movb   $0x2d,(%rsi)
  neg    %edi
  add    $0x1,%rdx
  mov    $0x1,%r9d
  jmp    L78
L50:
  mov    $0x5,%ecx
  nopl   0x0(%rax)
L22:
  lea    -0x1(%rcx),%eax
  add    %ecx,%r9d
  sub    $0x2,%ecx
  movslq %eax,%rdi
  movslq %ecx,%r8
  movzbl 0x9(%rsp,%rdi,1),%edi
  movzbl 0x9(%rsp,%r8,1),%r8d
  add    $0x30,%edi
  add    $0x30,%r8d
  mov    %dil,(%rdx)
  lea    0x2(%rdx),%rdi
  mov    %r8b,0x1(%rdx)
  test   %ecx,%ecx
  jne    L65
  mov    $0x1,%eax
  jmp    L176
  xchg   %ax,%ax
L188:
  add    $0x30,%esi
  add    $0x1,%r9d
  mov    %sil,(%rdx)
  jmp    L176
L180:
  mov    $0x2,%ecx
  jmp    L22
L275:
  mov    $0x3,%ecx
  jmp    L22
L270:
  mov    $0x4,%ecx
  jmp    L22
L148:
  mov    $0x6,%ecx
  jmp    L22
L131:
  mov    $0x7,%ecx
  jmp    L22
L195:
  mov    $0x8,%ecx
  jmp    L22
L5:
  mov    $0x9,%ecx
  jmp    L22
L141:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int int2string(int value, char *buf) {
  int count = 0;
  char *bp = buf;
  if (value < 0) {
    *bp++ = '-';
    value = -value;
    count++;
  }
  char tmp[15];
  int i = 0;
  while (value > 0) {
    tmp[i++] = value % 10;
    value /= 10;
  }
  count += i;
  while (i) {
    *bp++ = tmp[--i] + '0';
  }
  *bp = 0;
  return count;
}
```