user: 请将以下的汇编代码转换成C语言代码:

```asm
<permute_norepeat>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    %r8d,0x54(%rsp)
  cmp    %r8d,%ecx
  je     L438
  test   %ecx,%ecx
  jle    L484
  mov    %rsi,%r10
  lea    0x1(%r8),%esi
  mov    %r8d,%eax
  mov    %rdi,%r11
  mov    %esi,0x50(%rsp)
  lea    0x2(%r8),%esi
  add    $0x8,%eax
  mov    %esi,0x4c(%rsp)
  lea    0x3(%r8),%esi
  mov    %esi,0x48(%rsp)
  lea    0x4(%r8),%esi
  mov    %esi,0x3c(%rsp)
  lea    0x5(%r8),%esi
  mov    %esi,0x24(%rsp)
  lea    0x6(%r8),%esi
  mov    %esi,0x14(%rsp)
  lea    0x7(%r8),%esi
  mov    %esi,0x38(%rsp)
  movslq %ecx,%rsi
  mov    %eax,0x20(%rsp)
  cltq
  mov    %rsi,0x28(%rsp)
  movq   $0x0,0x30(%rsp)
  mov    %rax,0x78(%rsp)
L272:
  cmpl   $0xf4240,(%r9)
  jg     L484
  mov    0x30(%rsp),%rdi
  cmpb   $0x0,(%r10,%rdi,1)
  jne    L212
  movzbl (%r11,%rdi,1),%esi
  movslq 0x54(%rsp),%rax
  mov    %r10,%rbx
  movq   $0x0,0x18(%rsp)
  mov    %sil,(%rdx,%rax,1)
  movb   $0x1,(%r10,%rdi,1)
  cmp    %ecx,0x50(%rsp)
  je     L127
L487:
  cmpl   $0xf4240,(%r9)
  jg     L292
  mov    0x18(%rsp),%rdi
  cmpb   $0x0,(%rbx,%rdi,1)
  jne    L389
  movzbl (%r11,%rdi,1),%esi
  movslq 0x50(%rsp),%rax
  movq   $0x0,0x8(%rsp)
  mov    %sil,(%rdx,%rax,1)
  movb   $0x1,(%rbx,%rdi,1)
  cmp    0x4c(%rsp),%ecx
  je     L254
L367:
  cmpl   $0xf4240,(%r9)
  jg     L92
  mov    0x8(%rsp),%rdi
  cmpb   $0x0,(%rbx,%rdi,1)
  jne    L414
  movzbl (%r11,%rdi,1),%esi
  movslq 0x4c(%rsp),%rax
  xor    %r10d,%r10d
  mov    %sil,(%rdx,%rax,1)
  movb   $0x1,(%rbx,%rdi,1)
  cmp    0x48(%rsp),%ecx
  je     L523
  mov    %r10,(%rsp)
  mov    %ecx,%r13d
  mov    %r11,%r10
L437:
  cmpl   $0xf4240,(%r9)
  jg     L22
  mov    (%rsp),%rdi
  cmpb   $0x0,(%rbx,%rdi,1)
  jne    L478
  movzbl (%r10,%rdi,1),%ecx
  movslq 0x48(%rsp),%rax
  xor    %r11d,%r11d
  mov    %cl,(%rdx,%rax,1)
  movb   $0x1,(%rbx,%rdi,1)
  cmp    0x3c(%rsp),%r13d
  je     L449
L36:
  cmpl   $0xf4240,(%r9)
  jg     L233
  cmpb   $0x0,(%rbx,%r11,1)
  jne    L12
  movzbl (%r10,%r11,1),%ecx
  movslq 0x3c(%rsp),%rax
  xor    %r15d,%r15d
  mov    %cl,(%rdx,%rax,1)
  movb   $0x1,(%rbx,%r11,1)
  cmp    0x24(%rsp),%r13d
  je     L507
  mov    %r11,0x40(%rsp)
L251:
  cmpl   $0xf4240,(%r9)
  jg     L467
  cmpb   $0x0,(%rbx,%r15,1)
  jne    L474
  movzbl (%r10,%r15,1),%ecx
  movslq 0x24(%rsp),%rax
  xor    %r14d,%r14d
  mov    %cl,(%rdx,%rax,1)
  movb   $0x1,(%rbx,%r15,1)
  cmp    0x14(%rsp),%r13d
  je     L489
L479:
  cmpl   $0xf4240,(%r9)
  jg     L477
  cmpb   $0x0,(%rbx,%r14,1)
  jne    L285
  movzbl (%r10,%r14,1),%ecx
  movslq 0x14(%rsp),%rax
  xor    %r12d,%r12d
  movslq 0x38(%rsp),%r11
  mov    %cl,(%rdx,%rax,1)
  movb   $0x1,(%rbx,%r14,1)
  cmp    %r11d,%r13d
  je     L421
L537:
  cmpl   $0xf4240,(%r9)
  jg     L457
  cmpb   $0x0,(%rbx,%r12,1)
  jne    L180
  movzbl (%r10,%r12,1),%eax
  xor    %ebp,%ebp
  mov    %al,(%rdx,%r11,1)
  movb   $0x1,(%rbx,%r12,1)
  cmp    0x20(%rsp),%r13d
  je     L504
L100:
  cmpl   $0xf4240,(%r9)
  jg     L390
  cmpb   $0x0,(%rbx,%rbp,1)
  jne    L350
  movzbl (%r10,%rbp,1),%eax
  mov    0x78(%rsp),%rsi
  mov    %r10,%rdi
  mov    %r13d,%ecx
  mov    %r11,0x70(%rsp)
  mov    %al,(%rdx,%rsi,1)
  mov    0x54(%rsp),%eax
  mov    %rbx,%rsi
  movb   $0x1,(%rbx,%rbp,1)
  lea    0x9(%rax),%r8d
  mov    %r9,0x68(%rsp)
  mov    %rdx,0x60(%rsp)
  mov    %r10,0x58(%rsp)
  call   <permute_norepeat>
  movb   $0x0,(%rbx,%rbp,1)
  mov    0x70(%rsp),%r11
  mov    0x68(%rsp),%r9
  mov    0x60(%rsp),%rdx
  mov    0x58(%rsp),%r10
  cs nopw 0x0(%rax,%rax,1)
L350:
  add    $0x1,%rbp
  cmp    %ebp,%r13d
  jg     L100
L390:
  movb   $0x0,(%rbx,%r12,1)
L180:
  add    $0x1,%r12
  cmp    %r12d,%r13d
  jg     L537
L457:
  movb   $0x0,(%rbx,%r14,1)
L285:
  add    $0x1,%r14
  cmp    %r14d,%r13d
  jg     L479
L477:
  movb   $0x0,(%rbx,%r15,1)
L474:
  add    $0x1,%r15
  cmp    %r15d,%r13d
  jg     L251
L467:
  mov    0x40(%rsp),%r11
L497:
  movb   $0x0,(%rbx,%r11,1)
L12:
  add    $0x1,%r11
  cmp    %r11d,%r13d
  jg     L36
L233:
  mov    (%rsp),%rax
  movb   $0x0,(%rbx,%rax,1)
L478:
  addq   $0x1,(%rsp)
  mov    (%rsp),%rax
  cmp    %eax,%r13d
  jg     L437
L22:
  mov    %r10,%r11
  mov    %r13d,%ecx
L132:
  mov    0x8(%rsp),%rax
  movb   $0x0,(%rbx,%rax,1)
L414:
  addq   $0x1,0x8(%rsp)
  mov    0x8(%rsp),%rax
  cmp    0x28(%rsp),%rax
  jne    L367
L92:
  mov    0x18(%rsp),%rax
  movb   $0x0,(%rbx,%rax,1)
L389:
  addq   $0x1,0x18(%rsp)
  mov    0x18(%rsp),%rax
  cmp    %rax,0x28(%rsp)
  jne    L487
L292:
  mov    %rbx,%r10
L265:
  mov    0x30(%rsp),%rax
  movb   $0x0,(%r10,%rax,1)
L212:
  addq   $0x1,0x30(%rsp)
  mov    0x30(%rsp),%rax
  cmp    %rax,0x28(%rsp)
  jne    L272
L484:
  add    $0x88,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L504:
  mov    (%r9),%eax
  lea    0x1(%rax),%esi
  imul   $0x3afb7e91,%esi,%eax
  mov    %esi,(%r9)
  add    $0x346dc0,%eax
  ror    $0x4,%eax
  cmp    $0x68db8,%eax
  ja     L390
  lea    D22(%rip),%rdi
  mov    %r11,0x70(%rsp)
  mov    %r9,0x68(%rsp)
  mov    %r10,0x60(%rsp)
  mov    %rdx,0x58(%rsp)
  call   <printf@plt>
  mov    0x58(%rsp),%rdx
  mov    0x60(%rsp),%r10
  mov    0x68(%rsp),%r9
  mov    0x70(%rsp),%r11
  jmp    L390
  nopl   0x0(%rax,%rax,1)
L421:
  mov    (%r9),%eax
  lea    0x1(%rax),%esi
  imul   $0x3afb7e91,%esi,%eax
  mov    %esi,(%r9)
  add    $0x346dc0,%eax
  ror    $0x4,%eax
  cmp    $0x68db8,%eax
  ja     L457
  lea    D22(%rip),%rdi
  mov    %r9,0x68(%rsp)
  mov    %r10,0x60(%rsp)
  mov    %rdx,0x58(%rsp)
  call   <printf@plt>
  mov    0x58(%rsp),%rdx
  mov    0x60(%rsp),%r10
  mov    0x68(%rsp),%r9
  jmp    L457
  nopl   0x0(%rax)
L489:
  mov    (%r9),%eax
  lea    0x1(%rax),%esi
  imul   $0x3afb7e91,%esi,%eax
  mov    %esi,(%r9)
  add    $0x346dc0,%eax
  ror    $0x4,%eax
  cmp    $0x68db8,%eax
  ja     L477
  lea    D22(%rip),%rdi
  mov    %r9,0x68(%rsp)
  mov    %r10,0x60(%rsp)
  mov    %rdx,0x58(%rsp)
  call   <printf@plt>
  mov    0x58(%rsp),%rdx
  mov    0x60(%rsp),%r10
  mov    0x68(%rsp),%r9
  jmp    L477
  nopl   0x0(%rax)
L507:
  mov    (%r9),%eax
  lea    0x1(%rax),%esi
  imul   $0x3afb7e91,%esi,%eax
  mov    %esi,(%r9)
  add    $0x346dc0,%eax
  ror    $0x4,%eax
  cmp    $0x68db8,%eax
  ja     L497
  lea    D22(%rip),%rdi
  mov    %r9,0x68(%rsp)
  mov    %r10,0x60(%rsp)
  mov    %r11,0x58(%rsp)
  mov    %rdx,0x40(%rsp)
  call   <printf@plt>
  mov    0x40(%rsp),%rdx
  mov    0x58(%rsp),%r11
  mov    0x60(%rsp),%r10
  mov    0x68(%rsp),%r9
  jmp    L497
  nopl   0x0(%rax,%rax,1)
L449:
  mov    (%r9),%eax
  lea    0x1(%rax),%esi
  imul   $0x3afb7e91,%esi,%eax
  mov    %esi,(%r9)
  add    $0x346dc0,%eax
  ror    $0x4,%eax
  cmp    $0x68db8,%eax
  ja     L233
  lea    D22(%rip),%rdi
  mov    %r9,0x60(%rsp)
  mov    %r10,0x58(%rsp)
  mov    %rdx,0x40(%rsp)
  call   <printf@plt>
  mov    0x40(%rsp),%rdx
  mov    0x58(%rsp),%r10
  mov    0x60(%rsp),%r9
  jmp    L233
L523:
  mov    (%r9),%eax
  lea    0x1(%rax),%esi
  imul   $0x3afb7e91,%esi,%eax
  mov    %esi,(%r9)
  add    $0x346dc0,%eax
  ror    $0x4,%eax
  cmp    $0x68db8,%eax
  ja     L132
  lea    D22(%rip),%rdi
  mov    %r9,0x60(%rsp)
  mov    %ecx,0x58(%rsp)
  mov    %r11,0x40(%rsp)
  mov    %rdx,(%rsp)
  call   <printf@plt>
  mov    (%rsp),%rdx
  mov    0x40(%rsp),%r11
  mov    0x58(%rsp),%ecx
  mov    0x60(%rsp),%r9
  jmp    L132
L254:
  mov    (%r9),%eax
  lea    0x1(%rax),%esi
  imul   $0x3afb7e91,%esi,%eax
  mov    %esi,(%r9)
  add    $0x346dc0,%eax
  ror    $0x4,%eax
  cmp    $0x68db8,%eax
  ja     L92
  lea    D22(%rip),%rdi
  mov    %r9,0x58(%rsp)
  mov    %ecx,0x40(%rsp)
  mov    %r11,0x8(%rsp)
  mov    %rdx,(%rsp)
  call   <printf@plt>
  mov    (%rsp),%rdx
  mov    0x8(%rsp),%r11
  mov    0x40(%rsp),%ecx
  mov    0x58(%rsp),%r9
  jmp    L92
L127:
  mov    (%r9),%eax
  lea    0x1(%rax),%esi
  imul   $0x3afb7e91,%esi,%eax
  mov    %esi,(%r9)
  add    $0x346dc0,%eax
  ror    $0x4,%eax
  cmp    $0x68db8,%eax
  ja     L265
  lea    D22(%rip),%rdi
  mov    %r9,0x58(%rsp)
  mov    %ecx,0x40(%rsp)
  mov    %r10,0x18(%rsp)
  mov    %r11,0x8(%rsp)
  mov    %rdx,(%rsp)
  call   <printf@plt>
  mov    (%rsp),%rdx
  mov    0x8(%rsp),%r11
  mov    0x18(%rsp),%r10
  mov    0x40(%rsp),%ecx
  mov    0x58(%rsp),%r9
  jmp    L265
L438:
  mov    (%r9),%eax
  lea    0x1(%rax),%esi
  imul   $0x3afb7e91,%esi,%eax
  mov    %esi,(%r9)
  add    $0x346dc0,%eax
  ror    $0x4,%eax
  cmp    $0x68db8,%eax
  ja     L484
  add    $0x88,%rsp
  lea    D22(%rip),%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1050 <printf@plt>
```

tool_calls: name: read_data
arguments: data_label: D22
type_guessed: string

tool: D22: %9d %s


assistant: ```c
void permute_norepeat(const char digits[], char taken[], char buf[], int len, int cur, int *printcount) {
  if (len == cur) {
    int count = ++(*printcount);
    if (count % 10000 == 0) {
      printf("%9d %s\n", count, buf);
    }
    return;
  }
  int i = 0;
  for (; i < len; ++i) {
    if (*printcount > 1000000) {
      return;
    }
    if (taken[i]) {
      continue;
    }
    buf[cur] = digits[i];
    taken[i] = 1;
    permute_norepeat(digits, taken, buf, len, cur + 1, printcount);
    taken[i] = 0;
  }
}
```