user: 请从给定的汇编指令推导出C源代码:

```asm
<itostr>:
  endbr64
  movslq %edi,%rax
  movslq %esi,%rdi
  mov    %ecx,%r9d
  mov    %edx,%esi
  cmp    $0x1e,%edi
  jle    L50
  lea    D57(%rip),%r8
  movb   $0x0,D57(%rip)
  mov    %r8,%rax
  ret
  cs nopw 0x0(%rax,%rax,1)
L50:
  test   %eax,%eax
  je     L472
  cmp    $0x2,%edx
  je     L455
  cmp    $0x3,%edx
  jne    L112
  movsbq %dil,%rsi
  lea    D30(%rip),%r8
  test   %dil,%dil
  jg     L86
  jmp    L393
  nopl   0x0(%rax,%rax,1)
L238:
  add    $0x37,%edx
  nopl   0x0(%rax,%rax,1)
L391:
  test   %eax,%eax
  mov    %dl,(%r8,%rsi,1)
  lea    0xf(%rax),%edx
  cmovs  %edx,%eax
  sub    $0x1,%rsi
  sar    $0x4,%eax
  test   %sil,%sil
  jle    L393
L86:
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  shr    $0x1c,%ecx
  lea    (%rax,%rcx,1),%edx
  and    $0xf,%edx
  sub    %ecx,%edx
  cmp    $0x9,%edx
  jg     L238
  add    $0x30,%edx
  jmp    L391
  nopw   0x0(%rax,%rax,1)
L112:
  movsbq %dil,%rcx
  test   %dil,%dil
  jle    L393
  cmp    $0x1,%esi
  je     L489
  mov    $0xa,%esi
L509:
  lea    D30(%rip),%r8
  xchg   %ax,%ax
L205:
  cltd
  idiv   %esi
  add    $0x30,%edx
  mov    %dl,(%r8,%rcx,1)
  sub    $0x1,%rcx
  test   %cl,%cl
  jg     L205
L393:
  lea    D57(%rip),%r8
  movb   $0x0,(%r8,%rdi,1)
  mov    %r8,%rax
  ret
  nopw   0x0(%rax,%rax,1)
L472:
  cmp    $0x1,%edx
  jne    L289
  test   %ecx,%ecx
  je     L289
  test   %edi,%edi
  jle    L158
  lea    -0x8(%rdi),%eax
  cmp    $0x77,%eax
  ja     L520
  lea    -0x1(%rdi),%edx
  cmp    $0xe,%edx
  jbe    L494
  movdqa D69(%rip),%xmm0
  lea    D57(%rip),%r8
  movaps %xmm0,D10(%rip)
  cmp    $0x10,%edi
  je     L353
  lea    -0x11(%rdi),%eax
  lea    -0x10(%rdi),%esi
  cmp    $0x6,%eax
  jbe    L27
  mov    $0x10,%ecx
  mov    $0x10,%eax
L294:
  mov    D69(%rip),%r9
  lea    D10(%rip),%r8
  add    $0x8,%eax
  mov    %r9,(%r8,%rcx,1)
  cmp    $0x8,%esi
  je     L353
L47:
  movsbq %al,%rcx
  movb   $0x20,(%r8,%rcx,1)
  lea    0x1(%rax),%ecx
  movzbl %cl,%ecx
  cmp    %edi,%ecx
  jge    L353
  movb   $0x20,(%r8,%rcx,1)
  lea    0x2(%rax),%ecx
  movzbl %cl,%ecx
  cmp    %ecx,%edi
  jle    L353
  movb   $0x20,(%r8,%rcx,1)
  lea    0x3(%rax),%ecx
  movzbl %cl,%ecx
  cmp    %ecx,%edi
  jle    L353
  movb   $0x20,(%r8,%rcx,1)
  lea    0x4(%rax),%ecx
  movzbl %cl,%ecx
  cmp    %ecx,%edi
  jle    L353
  movb   $0x20,(%r8,%rcx,1)
  lea    0x5(%rax),%ecx
  movzbl %cl,%ecx
  cmp    %ecx,%edi
  jle    L353
  add    $0x6,%eax
  movb   $0x20,(%r8,%rcx,1)
  movzbl %al,%eax
  cmp    %eax,%edi
  jle    L353
  movb   $0x20,(%r8,%rax,1)
L353:
  movslq %edx,%rdx
  mov    %r8,%rax
  movb   $0x30,(%r8,%rdx,1)
  movb   $0x0,(%r8,%rdi,1)
  ret
  nop
L289:
  lea    D10(%rip),%r8
  test   %edi,%edi
  jle    L101
  lea    -0x8(%rdi),%eax
  cmp    $0x77,%eax
  ja     L107
  lea    -0x1(%rdi),%eax
  cmp    $0xe,%eax
  jbe    L174
  movdqa D10(%rip),%xmm0
  movaps %xmm0,D92(%rip)
  cmp    $0x10,%edi
  je     L66
  lea    -0x11(%rdi),%eax
  lea    -0x10(%rdi),%esi
  cmp    $0x6,%eax
  jbe    L550
  mov    $0x10,%eax
  mov    $0x10,%edx
L431:
  mov    D10(%rip),%rcx
  lea    D92(%rip),%r8
  movq   D92(%rip),%xmm1
  mov    %rcx,(%r8,%rax,1)
  mov    %edx,%eax
  movzbl %dl,%ecx
  add    $0x8,%edx
  shl    $0x8,%eax
  or     %ecx,%eax
  movd   %eax,%xmm2
  pshuflw $0x0,%xmm2,%xmm0
  paddb  %xmm0,%xmm1
  movq   %xmm1,%rax
  shr    $0x38,%rax
  cmp    $0x8,%esi
  je     L348
L533:
  movsbq %dl,%rax
  movb   $0x30,(%r8,%rax,1)
  lea    0x1(%rdx),%eax
  movzbl %al,%eax
  cmp    %edi,%eax
  jge    L101
  movb   $0x30,(%r8,%rax,1)
  lea    0x2(%rdx),%eax
  movzbl %al,%eax
  cmp    %eax,%edi
  jle    L101
  movb   $0x30,(%r8,%rax,1)
  lea    0x3(%rdx),%eax
  movzbl %al,%eax
  cmp    %eax,%edi
  jle    L101
  movb   $0x30,(%r8,%rax,1)
  lea    0x4(%rdx),%eax
  movzbl %al,%eax
  cmp    %eax,%edi
  jle    L101
  movb   $0x30,(%r8,%rax,1)
  lea    0x5(%rdx),%eax
  movzbl %al,%eax
  cmp    %eax,%edi
  jle    L101
  movb   $0x30,(%r8,%rax,1)
  lea    0x6(%rdx),%eax
  movzbl %al,%eax
  cmp    %eax,%edi
  jle    L101
  movb   $0x30,(%r8,%rax,1)
  lea    0x7(%rdx),%eax
L348:
  movzbl %al,%eax
L101:
  movb   $0x0,(%r8,%rax,1)
  mov    %r8,%rax
  ret
L455:
  movsbq %dil,%rcx
  test   %dil,%dil
  jle    L393
  jmp    L509
  xchg   %ax,%ax
L489:
  movsbq %dil,%rcx
  lea    D30(%rip),%r8
  nopl   0x0(%rax,%rax,1)
L38:
  movslq %eax,%r10
  mov    %eax,%esi
  imul   $0x66666667,%r10,%rdx
  sar    $0x1f,%esi
  sar    $0x22,%rdx
  sub    %esi,%edx
  lea    (%rdx,%rdx,4),%esi
  mov    %eax,%edx
  add    %esi,%esi
  sub    %esi,%edx
  test   %eax,%eax
  jne    L559
  test   %r9d,%r9d
  je     L559
  movb   $0x20,(%r8,%rcx,1)
  sub    $0x1,%rcx
  test   %cl,%cl
  jle    L393
  xor    %eax,%eax
  jmp    L38
  nopl   0x0(%rax)
L559:
  imul   $0x66666667,%r10,%r10
  add    $0x30,%edx
  mov    %dl,(%r8,%rcx,1)
  cltd
  sub    $0x1,%rcx
  sar    $0x22,%r10
  mov    %r10d,%eax
  sub    %edx,%eax
  test   %cl,%cl
  jg     L38
  jmp    L393
L107:
  xor    %eax,%eax
  lea    D92(%rip),%r8
  xchg   %ax,%ax
L453:
  movzbl %al,%edx
  add    $0x1,%eax
  movb   $0x30,(%r8,%rdx,1)
  movsbl %al,%edx
  cmp    %edx,%edi
  jg     L453
  jmp    L348
L520:
  xor    %eax,%eax
  lea    D92(%rip),%r8
L499:
  movzbl %al,%edx
  add    $0x1,%eax
  movb   $0x20,(%r8,%rdx,1)
  movsbl %al,%edx
  cmp    %edx,%edi
  jg     L499
L180:
  lea    -0x1(%rdi),%edx
  jmp    L353
L158:
  lea    D92(%rip),%r8
  jmp    L180
L66:
  lea    D92(%rip),%r8
  mov    $0x10,%eax
  jmp    L101
L174:
  mov    %edi,%esi
  xor    %eax,%eax
  xor    %edx,%edx
  jmp    L431
L494:
  mov    %edi,%esi
  xor    %ecx,%ecx
  xor    %eax,%eax
  jmp    L294
L550:
  mov    $0x10,%edx
  lea    D92(%rip),%r8
  jmp    L533
L27:
  mov    $0x10,%eax
  jmp    L47
```

tool_calls: name: parse_data
arguments: data_label: D69
type: byte[16]
name: parse_data
arguments: data_label: D10
type: byte[16]
name: parse_data
arguments: data_label: D92
type: byte[8]

tool: {"D69": [0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20]}

tool: {"D10": [0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30]}

tool: {"D92": [0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08]}

assistant: ```c
char *itostr(u_int iNumber, u_char cDigits, u_char cMode, u_char cDec_mode) {
  static char cBuffer[31];
  char c, cMod;
  u_int iDivisor = 10;
  if (cDigits > 30) {
    cBuffer[0] = '\0';
  } else {
    if (iNumber) {
      switch (cMode) {
      case 2:
        iDivisor = 2;
        break;
      case 1:
        iDivisor = 10;
        break;
      case 3:
        iDivisor = 16;
        break;
      }
      for (c = cDigits; c > 0; c--) {
        cMod = iNumber % iDivisor;
        if (cMode == 3) {
          if (cMod > 9)
            cBuffer[c - 1] = cMod + 55;
          else
            cBuffer[c - 1] = cMod + 48;
        } else {
          if (cMode == 1) {
            if ((!iNumber) && (cDec_mode))
              cBuffer[c - 1] = ' ';
            else
              cBuffer[c - 1] = cMod + 48;
          } else
            cBuffer[c - 1] = cMod + 48;
        }
        iNumber /= iDivisor;
      }
      cBuffer[cDigits] = '\0';
    } else {
      if ((cMode == 1) && (cDec_mode)) {
        for (c = 0; c < cDigits; c++)
          cBuffer[(unsigned char)c] = ' ';
        cBuffer[cDigits - 1] = '0';
        cBuffer[cDigits] = '\0';
      } else {
        for (c = 0; c < cDigits; c++)
          cBuffer[(unsigned char)c] = '0';
        cBuffer[(unsigned char)c] = '\0';
      }
    }
  }
  return (cBuffer);
}
```