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

```asm
<kitoa>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xd0,%rsp
  mov    %edi,-0xb4(%rbp)
  mov    %rsi,-0xc0(%rbp)
  mov    %rdx,-0xc8(%rbp)
  mov    %ecx,-0xb8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x90(%rbp),%rax
  mov    $0x80,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  mov    -0xc8(%rbp),%rdx
  mov    -0xc0(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  cmpq   $0x1,-0xc8(%rbp)
  jbe    L37
  cmpl   $0x0,-0xb4(%rbp)
  jne    L131
  mov    -0xc0(%rbp),%rax
  movb   $0x30,(%rax)
  mov    -0xc0(%rbp),%rax
  add    $0x1,%rax
  movb   $0x0,(%rax)
  jmp    L42
L131:
  movl   $0x0,-0xa4(%rbp)
  cmpl   $0x0,-0xb4(%rbp)
  jns    L27
  cmpl   $0x10,-0xb8(%rbp)
  je     L27
  movl   $0x1,-0xa4(%rbp)
  negl   -0xb4(%rbp)
L27:
  cmpl   $0x10,-0xb8(%rbp)
  jne    L142
  movl   $0x0,-0xa4(%rbp)
L142:
  mov    -0xb4(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  movl   $0x0,-0x9c(%rbp)
  jmp    L114
L36:
  mov    -0xa0(%rbp),%eax
  cltd
  idivl  -0xb8(%rbp)
  mov    %edx,-0x94(%rbp)
  mov    -0x94(%rbp),%eax
  add    $0x30,%eax
  mov    %al,-0xa5(%rbp)
  cmpl   $0x9,-0x94(%rbp)
  jle    L24
  mov    -0x94(%rbp),%eax
  add    $0x37,%eax
  mov    %al,-0xa5(%rbp)
L24:
  mov    -0x9c(%rbp),%eax
  cltq
  movzbl -0xa5(%rbp),%edx
  mov    %dl,-0x90(%rbp,%rax,1)
  mov    -0xa0(%rbp),%eax
  cltd
  idivl  -0xb8(%rbp)
  mov    %eax,-0xa0(%rbp)
  addl   $0x1,-0x9c(%rbp)
L114:
  cmpl   $0x7f,-0x9c(%rbp)
  jg     L154
  cmpl   $0x0,-0xa0(%rbp)
  jg     L36
L154:
  movl   $0x0,-0x9c(%rbp)
  cmpl   $0x0,-0xa4(%rbp)
  je     L122
  mov    -0xc0(%rbp),%rax
  movb   $0x2d,(%rax)
  movl   $0x1,-0x9c(%rbp)
L122:
  lea    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  sub    $0x1,%eax
  mov    %eax,-0x98(%rbp)
  jmp    L83
L94:
  mov    -0x9c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0xc0(%rbp),%rax
  add    %rax,%rdx
  mov    -0x98(%rbp),%eax
  cltq
  movzbl -0x90(%rbp,%rax,1),%eax
  mov    %al,(%rdx)
  addl   $0x1,-0x9c(%rbp)
  subl   $0x1,-0x98(%rbp)
L83:
  mov    -0x9c(%rbp),%eax
  cltq
  cmp    %rax,-0xc8(%rbp)
  jbe    L145
  cmpl   $0x0,-0x98(%rbp)
  jns    L94
L145:
  mov    -0xc8(%rbp),%rax
  lea    -0x1(%rax),%rdx
  mov    -0xc0(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  jmp    L42
L37:
  nop
L42:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L85
  call   <__stack_chk_fail@plt>
L85:
  leave
  ret
```

assistant: ```c
void kitoa(int val_signed, char *dst_c, size_t sz, int radix) {
  char dst[128];
  memset(dst, 0, 128);
  memset(dst_c, 0, sz);
  if (sz <= 1)
    return;
  if (val_signed == 0) {
    dst_c[0] = '0';
    dst_c[1] = 0;
    return;
  }
  int neg = 0;
  if (val_signed < 0 && radix != 16) {
    neg = 1;
    val_signed = -val_signed;
  }
  if (radix == 16)
    neg = 0;
  int val = val_signed;
  int x;
  for (x = 0; x < 128 && val > 0; x++) {
    int mod = val % radix;
    char character = mod + '0';
    if (mod >= 10)
      character = (mod - 10) + 'A';
    dst[x] = character;
    val /= radix;
  }
  x = 0;
  if (neg) {
    dst_c[0] = '-';
    x = 1;
  }
  int pos = strlen(dst) - 1;
  for (; x < sz && pos >= 0; x++, pos--)
    dst_c[x] = dst[pos];
  dst_c[sz - 1] = 0;
}
```