user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<int2string>:
  endbr64
  mov    %edi,%edx
  mov    %rsi,%rcx
  test   %edi,%edi
  je     L186
  js     L223
L231:
  mov    %edx,%eax
  shr    $0x9,%eax
  imul   $0x44b83,%rax,%rax
  shr    $0x27,%rax
  test   %eax,%eax
  jne    L222
  mov    %edx,%eax
  imul   $0x55e63b89,%rax,%rsi
  shr    $0x39,%rsi
  test   %esi,%esi
  jne    L263
  imul   $0x6b5fca6b,%rax,%rsi
  shr    $0x36,%rsi
  test   %esi,%esi
  je     L138
  mov    %rcx,%rdi
L141:
  imul   $0x6b5fca6b,%rax,%rax
  add    $0x30,%esi
  lea    0x1(%rdi),%rcx
  mov    %sil,(%rdi)
  shr    $0x36,%rax
  imul   $0x989680,%eax,%eax
  sub    %eax,%edx
L106:
  mov    %edx,%eax
  imul   $0x431bde83,%rax,%rsi
  shr    $0x32,%rsi
  test   %esi,%esi
  jne    L305
  movb   $0x30,(%rcx)
  lea    0x1(%rcx),%rdi
L96:
  mov    %edx,%esi
  shr    $0x5,%esi
  imul   $0xa7c5ac5,%rsi,%rsi
  shr    $0x27,%rsi
  test   %esi,%esi
  jne    L49
  movb   $0x30,(%rdi)
  lea    0x1(%rdi),%rcx
L92:
  mov    %edx,%eax
  mov    $0xd1b71759,%esi
  imul   %rax,%rsi
  shr    $0x2d,%rsi
  test   %esi,%esi
  jne    L104
  imul   $0x10624dd3,%rax,%rsi
  movb   $0x30,(%rcx)
  lea    0x1(%rcx),%rdi
  shr    $0x26,%rsi
  test   %esi,%esi
  jne    L294
L11:
  imul   $0x51eb851f,%rax,%rsi
  movb   $0x30,(%rdi)
  lea    0x1(%rdi),%rcx
  shr    $0x25,%rsi
  test   %esi,%esi
  je     L123
L300:
  imul   $0x51eb851f,%rax,%rax
  add    $0x30,%esi
  lea    0x1(%rcx),%rdi
  mov    %sil,(%rcx)
  shr    $0x25,%rax
  imul   $0x64,%eax,%eax
  sub    %eax,%edx
  mov    %edx,%eax
L248:
  mov    $0xcccccccd,%esi
  imul   %rax,%rsi
  shr    $0x23,%rsi
  test   %esi,%esi
  jne    L54
  movb   $0x30,(%rdi)
  lea    0x1(%rdi),%rcx
  test   %edx,%edx
  je     L258
L85:
  lea    0x1(%rcx),%rsi
  lea    0x30(%rdx),%eax
  mov    %al,(%rcx)
  movb   $0x0,(%rsi)
  ret
  nopw   0x0(%rax,%rax,1)
L222:
  lea    0x30(%rax),%esi
  lea    0x1(%rcx),%rdi
  imul   $0x3b9aca00,%eax,%eax
  mov    %sil,(%rcx)
  sub    %eax,%edx
  mov    %edx,%eax
  imul   $0x55e63b89,%rax,%rsi
  shr    $0x39,%rsi
  test   %esi,%esi
  jne    L12
  imul   $0x6b5fca6b,%rax,%rsi
  movb   $0x30,0x1(%rcx)
  lea    0x2(%rcx),%rdi
  shr    $0x36,%rsi
  test   %esi,%esi
  jne    L141
  movb   $0x30,(%rdi)
  lea    0x1(%rdi),%rcx
  jmp    L106
  nopw   0x0(%rax,%rax,1)
L223:
  movb   $0x2d,(%rsi)
  neg    %edx
  add    $0x1,%rcx
  jmp    L231
  xchg   %ax,%ax
L12:
  mov    %rdi,%rcx
L263:
  imul   $0x55e63b89,%rax,%rax
  add    $0x30,%esi
  lea    0x1(%rcx),%rdi
  mov    %sil,(%rcx)
  shr    $0x39,%rax
  imul   $0x5f5e100,%eax,%eax
  sub    %eax,%edx
  mov    %edx,%eax
  imul   $0x6b5fca6b,%rax,%rsi
  shr    $0x36,%rsi
  test   %esi,%esi
  jne    L141
  movb   $0x30,(%rdi)
  lea    0x1(%rdi),%rcx
  jmp    L106
  nopl   0x0(%rax)
L104:
  add    $0x30,%esi
  lea    0x1(%rcx),%rdi
  mov    %sil,(%rcx)
  mov    $0xd1b71759,%ecx
  imul   %rcx,%rax
  shr    $0x2d,%rax
  imul   $0x2710,%eax,%eax
  sub    %eax,%edx
  mov    %edx,%eax
  imul   $0x10624dd3,%rax,%rsi
  shr    $0x26,%rsi
  test   %esi,%esi
  je     L11
L294:
  imul   $0x10624dd3,%rax,%rax
  add    $0x30,%esi
  lea    0x1(%rdi),%rcx
  mov    %sil,(%rdi)
  shr    $0x26,%rax
  imul   $0x3e8,%eax,%eax
  sub    %eax,%edx
  mov    %edx,%eax
  imul   $0x51eb851f,%rax,%rsi
  shr    $0x25,%rsi
  test   %esi,%esi
  jne    L300
L123:
  movb   $0x30,(%rcx)
  lea    0x1(%rcx),%rdi
  jmp    L248
  nopw   0x0(%rax,%rax,1)
L186:
  mov    $0x30,%eax
  mov    %ax,(%rsi)
  ret
  nopl   0x0(%rax)
L115:
  imul   $0x51eb851f,%rax,%rsi
  shr    $0x25,%rsi
  test   %esi,%esi
  jne    L300
  mov    $0xcccccccd,%esi
  imul   %rax,%rsi
  shr    $0x23,%rsi
  test   %esi,%esi
  je     L85
  mov    %rcx,%rdi
L54:
  add    $0x30,%esi
  lea    0x1(%rdi),%rcx
  mov    %sil,(%rdi)
  mov    $0xcccccccd,%esi
  imul   %rsi,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%edx
  jne    L85
L258:
  lea    0x1(%rcx),%rsi
  movb   $0x30,(%rcx)
  movb   $0x0,(%rsi)
  ret
  nopw   0x0(%rax,%rax,1)
L305:
  imul   $0x431bde83,%rax,%rax
  add    $0x30,%esi
  lea    0x1(%rcx),%rdi
  mov    %sil,(%rcx)
  shr    $0x32,%rax
  imul   $0xf4240,%eax,%eax
  sub    %eax,%edx
  jmp    L96
  nopw   0x0(%rax,%rax,1)
L138:
  imul   $0x431bde83,%rax,%rsi
  shr    $0x32,%rsi
  test   %esi,%esi
  jne    L305
  mov    %edx,%esi
  shr    $0x5,%esi
  imul   $0xa7c5ac5,%rsi,%rsi
  shr    $0x27,%rsi
  test   %esi,%esi
  je     L163
  mov    %rcx,%rdi
L49:
  mov    %edx,%eax
  add    $0x30,%esi
  lea    0x1(%rdi),%rcx
  shr    $0x5,%eax
  mov    %sil,(%rdi)
  imul   $0xa7c5ac5,%rax,%rax
  shr    $0x27,%rax
  imul   $0x186a0,%eax,%eax
  sub    %eax,%edx
  jmp    L92
  nopl   (%rax)
L163:
  mov    $0xd1b71759,%esi
  imul   %rax,%rsi
  shr    $0x2d,%rsi
  test   %esi,%esi
  jne    L104
  imul   $0x10624dd3,%rax,%rsi
  shr    $0x26,%rsi
  test   %esi,%esi
  je     L115
  mov    %rcx,%rdi
  jmp    L294
```

assistant: ```c
void int2string(int n, char *s) {
  bool first = true;
  if (n == 0) {
    s[0] = '0';
    s[1] = 0;
    return;
  }
  if (n & (1u << 31)) {
    n = ~n + 1;
    *(s++) = '-';
  }
  for (int i = 1000000000; i > 0; i /= 10) {
    if (n / i == 0 && !first)
      *(s++) = '0';
    else if (n / i != 0) {
      *(s++) = '0' + n / i;
      n %= i;
      first = false;
    }
  }
  *s = 0;
}
```