user: 这段汇编代码用C语言表示是什么样的?

```asm
<itostr>:
  endbr64
  cmp    $0x1e,%esi
  jle    L97
  movb   $0x0,D7(%rip)
  lea    D7(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
L97:
  push   %rbx
  mov    %edx,%r8d
  mov    %ecx,%ebx
  test   %edi,%edi
  je     L56
  mov    $0x2,%r10d
  cmp    $0x2,%edx
  je     L29
  cmp    $0x3,%edx
  mov    $0x10,%r10d
  mov    $0xa,%eax
  cmovne %eax,%r10d
L29:
  movsbq %sil,%rcx
  lea    D43(%rip),%r11
  test   %sil,%sil
  jg     L108
  jmp    L58
  nopl   (%rax)
L174:
  lea    0x30(%rdx),%r9d
  cmp    $0x1,%r8d
  je     L103
L33:
  mov    %r9b,(%r11,%rcx,1)
  sub    $0x1,%rcx
  mov    %eax,%edi
  test   %cl,%cl
  jle    L58
L108:
  mov    %edi,%eax
  cltd
  idiv   %r10d
  cmp    $0x3,%r8d
  jne    L174
  lea    0x37(%rdx),%edi
  cmp    $0xa,%edx
  lea    0x30(%rdx),%r9d
  cmovge %edi,%r9d
  mov    %eax,%edi
  mov    %r9b,(%r11,%rcx,1)
  sub    $0x1,%rcx
  test   %cl,%cl
  jg     L108
L58:
  lea    D7(%rip),%rax
  movslq %esi,%rsi
  movb   $0x0,(%rax,%rsi,1)
  pop    %rbx
  ret
L103:
  test   %edi,%edi
  jne    L30
  mov    $0x20,%r9d
  test   %ebx,%ebx
  jne    L33
L30:
  lea    0x30(%rdx),%r9d
  jmp    L33
  nopl   0x0(%rax)
L56:
  xor    %edx,%edx
  lea    D7(%rip),%rax
  cmp    $0x1,%r8d
  jne    L37
  test   %ecx,%ecx
  je     L37
  test   %esi,%esi
  jle    L131
  nop
L120:
  movzbl %dl,%ecx
  add    $0x1,%edx
  movb   $0x20,(%rax,%rcx,1)
  movsbl %dl,%ecx
  cmp    %esi,%ecx
  jl     L120
L131:
  lea    -0x1(%rsi),%edx
  movslq %esi,%rsi
  movslq %edx,%rdx
  movb   $0x30,(%rax,%rdx,1)
  movb   $0x0,(%rax,%rsi,1)
  pop    %rbx
  ret
  nopl   0x0(%rax)
L37:
  test   %esi,%esi
  jle    L35
  nopl   0x0(%rax)
L155:
  movzbl %dl,%ecx
  add    $0x1,%edx
  movb   $0x30,(%rax,%rcx,1)
  movsbl %dl,%ecx
  cmp    %esi,%ecx
  jl     L155
  movzbl %dl,%edi
L35:
  movslq %edi,%rdi
  movb   $0x0,(%rax,%rdi,1)
  pop    %rbx
  ret
```

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);
}
```