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

```asm
<_hi_itoa>:
  endbr64
  mov    %rdi,%r8
  test   %rdi,%rdi
  je     L51
  test   %esi,%esi
  js     L141
  mov    $0x0,%r11d
  je     L54
L48:
  xor    %ecx,%ecx
  mov    $0xcccccccd,%r9d
  jmp    L108
  xchg   %ax,%ax
L90:
  imul   %r9,%rdi
  movd   (%r8,%rcx,4),%xmm2
  add    $0x30,%eax
  movd   %eax,%xmm0
  punpckldq %xmm2,%xmm0
  shr    $0x23,%rdi
  movq   %xmm0,(%r8,%rcx,4)
  add    $0x1,%rcx
  mov    %rdi,%rsi
L108:
  mov    %esi,%edi
  mov    %ecx,%r10d
  mov    %rdi,%rax
  imul   %r9,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%edx
  mov    %esi,%eax
  add    %edx,%edx
  sub    %edx,%eax
  jne    L90
  add    $0x9,%esi
  cmp    $0x12,%esi
  ja     L90
  cmp    $0x1,%r11d
  jne    L135
  movslq %ecx,%rdx
  add    $0x1,%r10d
  movl   $0x2d,(%r8,%rdx,4)
L135:
  mov    %r10d,%esi
  movslq %r10d,%rdx
  sar    %esi
  movl   $0x0,(%r8,%rdx,4)
  lea    0x0(,%rdx,4),%rcx
  je     L51
  movslq %esi,%rdx
  mov    %rcx,%r9
  mov    %esi,%edi
  shl    $0x2,%rdx
  sub    %rdx,%r9
  cmp    %rdx,%r9
  setge  %dl
  test   %rcx,%rcx
  setle  %r9b
  or     %r9b,%dl
  je     L162
  cmp    $0x1,%esi
  je     L162
  lea    -0x1(%rsi),%edx
  cmp    $0x2,%edx
  jbe    L58
  shr    $0x2,%edi
  mov    %r8,%rax
  lea    -0x10(%r8,%rcx,1),%rdx
  sub    $0x1,%edi
  shl    $0x4,%rdi
  lea    0x10(%r8,%rdi,1),%rdi
  nopl   (%rax)
L129:
  movdqu (%rdx),%xmm3
  movdqu (%rax),%xmm0
  add    $0x10,%rax
  sub    $0x10,%rdx
  pshufd $0x1b,%xmm3,%xmm1
  pshufd $0x1b,%xmm0,%xmm0
  movups %xmm1,-0x10(%rax)
  movups %xmm0,0x10(%rdx)
  cmp    %rdi,%rax
  jne    L129
  mov    %esi,%edx
  and    $0xfffffffc,%edx
  mov    %edx,%eax
  cmp    %edx,%esi
  je     L51
  sub    %edx,%esi
  mov    %esi,%edi
  cmp    $0x1,%esi
  je     L127
L63:
  shl    $0x2,%rdx
  sub    $0x8,%rcx
  sub    %rdx,%rcx
  lea    (%r8,%rdx,1),%rsi
  lea    (%r8,%rcx,1),%rdx
  movq   (%rsi),%xmm0
  movq   (%rdx),%xmm1
  pshufd $0xe1,%xmm0,%xmm0
  pshufd $0xe1,%xmm1,%xmm1
  movq   %xmm1,(%rsi)
  movq   %xmm0,(%rdx)
  mov    %edi,%edx
  and    $0xfffffffe,%edx
  add    %edx,%eax
  cmp    %edx,%edi
  je     L51
L127:
  movslq %eax,%rdx
  lea    (%r8,%rdx,4),%rcx
  mov    %r10d,%edx
  sub    %eax,%edx
  mov    (%rcx),%esi
  movslq %edx,%rax
  lea    -0x4(%r8,%rax,4),%rax
  mov    (%rax),%edx
  mov    %edx,(%rcx)
  mov    %esi,(%rax)
  ret
L162:
  lea    -0x1(%rsi),%edx
  lea    -0x4(%rcx,%r8,1),%rax
  lea    0x4(%r8,%rdx,4),%rsi
  nopl   0x0(%rax)
L102:
  mov    (%rax),%ecx
  mov    (%r8),%edx
  add    $0x4,%r8
  sub    $0x4,%rax
  mov    %ecx,-0x4(%r8)
  mov    %edx,0x4(%rax)
  cmp    %r8,%rsi
  jne    L102
L51:
  ret
  nopw   0x0(%rax,%rax,1)
L141:
  neg    %esi
  mov    $0x1,%r11d
  jmp    L48
  nopl   (%rax)
L54:
  movl   $0x30,(%rdi)
  ret
L58:
  xor    %edx,%edx
  jmp    L63
```

assistant: ```c
void _hi_itoa(uint8_t *s, int num) {
  uint8_t c;
  uint8_t sign = 0;
  if (s == NULL) {
    return;
  }
  uint32_t len, i;
  len = 0;
  if (num < 0) {
    sign = 1;
    num = abs(num);
  } else if (num == 0) {
    s[len++] = '0';
    return;
  }
  while (num % 10 || num / 10) {
    c = num % 10 + '0';
    num = num / 10;
    s[len + 1] = s[len];
    s[len] = c;
    len++;
  }
  if (sign == 1) {
    s[len++] = '-';
  }
  s[len] = '\0';
  for (i = 0; i < len / 2; i++) {
    c = s[i];
    s[i] = s[len - i - 1];
    s[len - i - 1] = c;
  }
}
```