user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<permutationR>:
  endbr64
  push   %r15
  mov    %rdi,%r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x78,%rsp
  movzbl (%rsi),%eax
  test   %al,%al
  je     L202
  mov    %rsi,%r14
  lea    0x1(%rsi),%rsi
  mov    %eax,%ecx
  lea    0x9(%r14),%rdi
  mov    %rsi,0x68(%rsp)
  mov    %r14,%rsi
  mov    %rdi,0x28(%rsp)
  mov    %r14,0x48(%rsp)
  mov    %r15,%r14
  mov    %rsi,%r15
L80:
  mov    0x48(%rsp),%rsi
  mov    %cl,(%rsi)
  mov    %al,(%r15)
  movzbl 0x1(%r15),%eax
  test   %al,%al
  je     L208
  mov    0x68(%rsp),%rsi
  lea    0x2(%r15),%rdi
  mov    %eax,%ecx
  mov    %rdi,0x60(%rsp)
  mov    %r15,%rdi
  mov    %r14,%r15
  mov    %rsi,0x50(%rsp)
  mov    %rdi,%r14
L183:
  mov    0x50(%rsp),%rdi
  mov    %cl,(%rdi)
  mov    %al,0x1(%r14)
  movzbl 0x2(%r14),%eax
  test   %al,%al
  je     L246
  mov    0x60(%rsp),%rdi
  lea    0x3(%r14),%rsi
  mov    %eax,%ecx
  mov    %rsi,0x58(%rsp)
  mov    %r14,%rsi
  mov    %r15,%r14
  mov    %rdi,0x38(%rsp)
  mov    %rsi,%r15
L83:
  mov    0x38(%rsp),%rdi
  mov    %cl,(%rdi)
  mov    %al,0x2(%r15)
  movzbl 0x3(%r15),%eax
  test   %al,%al
  je     L235
  lea    0x4(%r15),%rsi
  mov    %eax,%ecx
  mov    %r15,%r13
  mov    %rsi,0x40(%rsp)
  mov    0x58(%rsp),%rsi
  mov    %rsi,0x10(%rsp)
L18:
  mov    0x10(%rsp),%rdi
  mov    %cl,(%rdi)
  mov    %al,0x3(%r13)
  movzbl 0x4(%r13),%eax
  test   %al,%al
  je     L81
  lea    0x5(%r13),%rdi
  mov    0x40(%rsp),%r15
  mov    %eax,%ecx
  mov    %rdi,0x30(%rsp)
L231:
  mov    %cl,(%r15)
  mov    %al,0x4(%r13)
  movzbl 0x5(%r13),%eax
  test   %al,%al
  je     L129
  lea    0x6(%r13),%rsi
  lea    0x7(%r13),%rdi
  mov    %r15,0x20(%rsp)
  mov    %eax,%ecx
  mov    %rsi,0x8(%rsp)
  mov    0x30(%rsp),%rbx
  mov    %rdi,0x18(%rsp)
L87:
  mov    %cl,(%rbx)
  mov    %al,0x5(%r13)
  movzbl 0x6(%r13),%eax
  test   %al,%al
  je     L1
  mov    0x8(%rsp),%r12
  mov    %rbx,(%rsp)
  mov    %eax,%ecx
  lea    0x8(%r13),%rbp
  mov    %r14,%rbx
L199:
  mov    %cl,(%r12)
  mov    0x18(%rsp),%r15
  mov    %al,0x6(%r13)
  movzbl 0x7(%r13),%eax
  mov    %eax,%edx
  test   %al,%al
  je     L204
L97:
  mov    %dl,(%r15)
  mov    %rbp,%r14
  mov    %al,0x7(%r13)
  movzbl 0x8(%r13),%eax
  mov    %eax,%edx
  test   %al,%al
  je     L70
L179:
  mov    %dl,(%r14)
  mov    0x28(%rsp),%rsi
  mov    %rbx,%rdi
  add    $0x1,%r14
  mov    %al,0x8(%r13)
  call   <permutationR>
  movzbl 0x8(%r13),%eax
  movzbl -0x1(%r14),%edx
  mov    %al,-0x1(%r14)
  mov    %dl,0x8(%r13)
  movzbl (%r14),%eax
  test   %al,%al
  jne    L179
  movzbl 0x7(%r13),%eax
L209:
  movzbl (%r15),%edx
  mov    %al,(%r15)
  add    $0x1,%r15
  mov    %dl,0x7(%r13)
  movzbl (%r15),%eax
  test   %al,%al
  jne    L97
  movzbl 0x6(%r13),%eax
L84:
  movzbl (%r12),%ecx
  mov    %al,(%r12)
  add    $0x1,%r12
  mov    %cl,0x6(%r13)
  movzbl (%r12),%eax
  test   %al,%al
  jne    L199
  mov    %rbx,%r14
  movzbl 0x5(%r13),%eax
  mov    (%rsp),%rbx
L222:
  movzbl (%rbx),%ecx
  mov    %al,(%rbx)
  add    $0x1,%rbx
  mov    %cl,0x5(%r13)
  movzbl (%rbx),%eax
  test   %al,%al
  jne    L87
  mov    0x20(%rsp),%r15
  movzbl 0x4(%r13),%eax
L189:
  movzbl (%r15),%ecx
  mov    %al,(%r15)
  add    $0x1,%r15
  mov    %cl,0x4(%r13)
  movzbl (%r15),%eax
  test   %al,%al
  jne    L231
  movzbl 0x3(%r13),%eax
L51:
  mov    0x10(%rsp),%rsi
  movzbl (%rsi),%ecx
  mov    %al,(%rsi)
  add    $0x1,%rsi
  mov    %rsi,0x10(%rsp)
  mov    %cl,0x3(%r13)
  movzbl (%rsi),%eax
  test   %al,%al
  jne    L18
  movzbl 0x2(%r13),%eax
  mov    %r13,%r15
L75:
  mov    0x38(%rsp),%rsi
  movzbl (%rsi),%ecx
  mov    %al,(%rsi)
  add    $0x1,%rsi
  mov    %rsi,0x38(%rsp)
  mov    %cl,0x2(%r15)
  movzbl (%rsi),%eax
  test   %al,%al
  jne    L83
  mov    %r15,%rax
  mov    %r14,%r15
  mov    %rax,%r14
  movzbl 0x1(%rax),%eax
L73:
  mov    0x50(%rsp),%rdi
  movzbl (%rdi),%ecx
  mov    %al,(%rdi)
  add    $0x1,%rdi
  mov    %rdi,0x50(%rsp)
  mov    %cl,0x1(%r14)
  movzbl (%rdi),%eax
  test   %al,%al
  jne    L183
  mov    %r14,%rax
  mov    %r15,%r14
  mov    %rax,%r15
  movzbl (%rax),%eax
L39:
  mov    0x48(%rsp),%rdi
  movzbl (%rdi),%ecx
  mov    %al,(%rdi)
  add    $0x1,%rdi
  mov    %rdi,0x48(%rsp)
  mov    %cl,(%r15)
  movzbl (%rdi),%eax
  test   %al,%al
  jne    L80
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L70:
  mov    %rbx,%rdi
  call   <puts@plt>
  movzbl 0x7(%r13),%eax
  jmp    L209
  nopw   0x0(%rax,%rax,1)
L204:
  mov    %rbx,%rdi
  call   <puts@plt>
  movzbl 0x6(%r13),%eax
  jmp    L84
  nopw   0x0(%rax,%rax,1)
L1:
  mov    %r14,%rdi
  call   <puts@plt>
  movzbl 0x5(%r13),%eax
  jmp    L222
L129:
  mov    %r14,%rdi
  call   <puts@plt>
  movzbl 0x4(%r13),%eax
  jmp    L189
L81:
  mov    %r14,%rdi
  call   <puts@plt>
  movzbl 0x3(%r13),%eax
  jmp    L51
L235:
  mov    %r14,%rdi
  call   <puts@plt>
  movzbl 0x2(%r15),%eax
  jmp    L75
L246:
  mov    %r15,%rdi
  call   <puts@plt>
  movzbl 0x1(%r14),%eax
  jmp    L73
L208:
  mov    %r14,%rdi
  call   <puts@plt>
  movzbl (%r15),%eax
  jmp    L39
L202:
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1050 <puts@plt>
```

assistant: ```c
void permutationR(char *string, char *first) {
  if (*first == '\0') {
    puts(string);
  } else {
    for (char *ch = first; *ch != '\0'; ++ch) {
      char tmpChar = *ch;
      *ch = *first;
      *first = tmpChar;
      permutationR(string, first + 1);
      tmpChar = *ch;
      *ch = *first;
      *first = tmpChar;
    }
  }
}
```