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

```asm
<_prtl8>:
  endbr64
  push   %r12
  mov    %rdi,%rax
  mov    %rdi,%r11
  mov    %rdi,%r10
  push   %rbp
  mov    %rdi,%r9
  mov    %rdi,%rbp
  mov    %rdi,%r8
  push   %rbx
  mov    %rsi,%rdx
  mov    %rdi,%rbx
  mov    %rax,%rsi
  sar    $0x3,%rbp
  mov    %edi,%r12d
  sar    $0x6,%rbx
  sar    $0x9,%r11
  sar    $0xc,%r10
  and    $0x7,%r12d
  and    $0x7,%ebp
  sub    $0x20,%rsp
  sar    $0xf,%r9
  and    $0x7,%ebx
  and    $0x7,%r11d
  mov    %fs:0x28,%rcx
  mov    %rcx,0x18(%rsp)
  xor    %ecx,%ecx
  mov    %rax,%rcx
  sar    $0x12,%r8
  and    $0x7,%r10d
  sar    $0x15,%rdi
  sar    $0x18,%rsi
  and    $0x7,%r9d
  and    $0x7,%r8d
  sar    $0x1b,%rcx
  and    $0x7,%edi
  and    $0x7,%esi
  sar    $0x1e,%rax
  and    $0x7,%ecx
  add    $0x30,%r12d
  add    $0x30,%ebp
  add    $0x30,%ebx
  add    $0x30,%r11d
  add    $0x30,%r10d
  add    $0x30,%r9d
  add    $0x30,%r8d
  add    $0x30,%edi
  add    $0x30,%esi
  add    $0x30,%ecx
  and    $0x7,%eax
  add    $0x30,%eax
  movb   $0x0,0xc(%rsp)
  and    $0x33,%eax
  mov    %r12b,0xd(%rsp)
  mov    %bpl,0xe(%rsp)
  mov    %bl,0xf(%rsp)
  mov    %r11b,0x10(%rsp)
  mov    %r10b,0x11(%rsp)
  mov    %r9b,0x12(%rsp)
  mov    %r8b,0x13(%rsp)
  mov    %dil,0x14(%rsp)
  mov    %sil,0x15(%rsp)
  mov    %cl,0x16(%rsp)
  mov    %al,0x17(%rsp)
  cmp    $0x30,%al
  jne    L32
  cmp    $0x30,%cl
  jne    L10
  cmp    $0x30,%sil
  jne    L248
  cmp    $0x30,%dil
  jne    L288
  cmp    $0x30,%r8b
  jne    L135
  cmp    $0x30,%r9b
  jne    L229
  cmp    $0x30,%r10b
  jne    L143
  cmp    $0x30,%r11b
  jne    L124
  cmp    $0x30,%bl
  jne    L84
  cmp    $0x30,%bpl
  jne    L70
  movzwl 0xc(%rsp),%eax
  rol    $0x8,%ax
  mov    %ax,(%rdx)
  nopl   (%rax)
L16:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L213
  add    $0x20,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L229:
  mov    $0x6,%eax
  nopl   0x0(%rax)
L144:
  movslq %eax,%rcx
  lea    -0x3(%rax),%esi
  movzbl 0xc(%rsp,%rcx,1),%ecx
  mov    %cl,(%rdx)
  lea    -0x1(%rax),%ecx
  movslq %ecx,%rcx
  movzbl 0xc(%rsp,%rcx,1),%ecx
  mov    %cl,0x1(%rdx)
  lea    -0x2(%rax),%ecx
  movslq %ecx,%rcx
  movzbl 0xc(%rsp,%rcx,1),%ecx
  mov    %cl,0x2(%rdx)
  cmp    $0x2,%eax
  je     L16
  movslq %esi,%rsi
  lea    -0x4(%rax),%ecx
  movzbl 0xc(%rsp,%rsi,1),%esi
  mov    %sil,0x3(%rdx)
  cmp    $0x3,%eax
  je     L16
  movslq %ecx,%rcx
  lea    -0x5(%rax),%esi
  movzbl 0xc(%rsp,%rcx,1),%ecx
  mov    %cl,0x4(%rdx)
  cmp    $0x4,%eax
  je     L16
  movslq %esi,%rsi
  lea    -0x6(%rax),%ecx
  movzbl 0xc(%rsp,%rsi,1),%esi
  mov    %sil,0x5(%rdx)
  cmp    $0x5,%eax
  je     L16
  movslq %ecx,%rcx
  lea    -0x7(%rax),%esi
  movzbl 0xc(%rsp,%rcx,1),%ecx
  mov    %cl,0x6(%rdx)
  cmp    $0x6,%eax
  je     L16
  movslq %esi,%rsi
  lea    -0x8(%rax),%ecx
  movzbl 0xc(%rsp,%rsi,1),%esi
  mov    %sil,0x7(%rdx)
  cmp    $0x7,%eax
  je     L16
  movslq %ecx,%rcx
  lea    -0x9(%rax),%esi
  movzbl 0xc(%rsp,%rcx,1),%ecx
  mov    %cl,0x8(%rdx)
  cmp    $0x8,%eax
  je     L16
  movslq %esi,%rsi
  lea    -0xa(%rax),%ecx
  movzbl 0xc(%rsp,%rsi,1),%esi
  mov    %sil,0x9(%rdx)
  cmp    $0x9,%eax
  je     L16
  movslq %ecx,%rax
  movzbl 0xc(%rsp,%rax,1),%eax
  mov    %al,0xa(%rdx)
  test   %ecx,%ecx
  je     L16
  movb   $0x0,0xb(%rdx)
  jmp    L16
L32:
  mov    $0xb,%eax
  jmp    L144
L10:
  mov    $0xa,%eax
  jmp    L144
L248:
  mov    $0x9,%eax
  jmp    L144
L288:
  mov    $0x8,%eax
  jmp    L144
L135:
  mov    $0x7,%eax
  jmp    L144
L143:
  mov    $0x5,%eax
  jmp    L144
L124:
  mov    $0x4,%eax
  jmp    L144
L84:
  mov    $0x3,%eax
  jmp    L144
L70:
  mov    $0x2,%eax
  jmp    L144
L213:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
_prtl8(num, str) long num;
char *str;
{
  int i;
  char c, temp[12];
  temp[0] = '\0';
  for (i = 1; i <= 11; i++) {
    temp[i] = (num & 07) + '0';
    num = num >> 3;
  }
  temp[11] &= '3';
  for (i = 11; temp[i] == '0'; i--)
    ;
  if (i == 0)
    i++;
  while (i >= 0)
    *str++ = temp[i--];
}
```