user: 下面的汇编指令对应的C源代码是什么:

```asm
<inhib_save_fill>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  jmp    L103
L172:
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L131
  mov    -0x28(%rbp),%rax
  mov    0x10(%rax),%rax
  test   %rax,%rax
  jne    L131
  mov    -0x28(%rbp),%rax
  mov    0x18(%rax),%rax
  and    $0x1,%eax
  test   %rax,%rax
  jne    L131
  mov    -0x28(%rbp),%rax
  mov    0x20(%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,0x20(%rax)
  jmp    L21
L131:
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x27,%al
  jne    L99
  mov    -0x28(%rbp),%rax
  mov    0x10(%rax),%rax
  test   %rax,%rax
  jne    L99
  mov    -0x28(%rbp),%rax
  mov    0x20(%rax),%rax
  and    $0x1,%eax
  test   %rax,%rax
  jne    L99
  mov    -0x28(%rbp),%rax
  mov    0x18(%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,0x18(%rax)
  jmp    L21
L99:
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5c,%al
  jne    L85
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  test   %rax,%rax
  je     L142
  mov    -0x28(%rbp),%rax
  mov    0x10(%rax),%rax
  cmp    $0x1,%rax
  jne    L142
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  je     L142
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  je     L142
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x27,%al
  je     L142
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  lea    -0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5c,%al
  jne    L142
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x18(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x28(%rbp),%rax
  mov    0x8(%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,0x8(%rax)
  mov    -0x28(%rbp),%rax
  mov    0x8(%rax),%rax
  lea    -0x1(%rax),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  movzbl (%rcx),%eax
  mov    %al,(%rdx)
L142:
  mov    -0x28(%rbp),%rax
  mov    0x10(%rax),%rax
  test   %rax,%rax
  sete   %al
  movzbl %al,%edx
  mov    -0x28(%rbp),%rax
  mov    %rdx,0x10(%rax)
  jmp    L21
L85:
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x18(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x28(%rbp),%rax
  mov    0x8(%rax),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  movzbl (%rcx),%eax
  mov    %al,(%rdx)
  mov    -0x28(%rbp),%rax
  mov    0x8(%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,0x8(%rax)
  mov    -0x28(%rbp),%rax
  movq   $0x0,0x10(%rax)
L21:
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,(%rax)
L103:
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rbx
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <ft_strlen@plt>
  cmp    %rax,%rbx
  jb     L172
  mov    -0x28(%rbp),%rax
  mov    0x8(%rax),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
void inhib_save_fill(char *str, char *save, size_t (*var)[5]) {
  while ((*var)[0] < ft_strlen(str)) {
    if (str[(*var)[0]] == '"' && (*var)[2] == 0 && !((*var)[3] % 2))
      ++(*var)[4];
    else if (str[(*var)[0]] == '\'' && (*var)[2] == 0 && !((*var)[4] % 2))
      ++(*var)[3];
    else if (str[(*var)[0]] == '\\') {
      if ((*var)[0] > 0 && (*var)[2] == 1 && str[(*var)[0] + 1] != '/' && str[(*var)[0] + 1] != '"' && str[(*var)[0] + 1] != '\'' && str[(*var)[0] - 1] == '\\')
        save[++(*var)[1] - 1] = str[(*var)[0]];
      (*var)[2] = ((*var)[2] ? 0 : 1);
    } else {
      save[(*var)[1]] = str[(*var)[0]];
      ++(*var)[1];
      (*var)[2] = 0;
    }
    ++(*var)[0];
  }
  save[(*var)[1]] = '\0';
}
```