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

```asm
<get_input_line>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %rcx,-0x30(%rbp)
  mov    %r8d,-0x34(%rbp)
  mov    %r9d,-0x38(%rbp)
  movl   $0x0,-0xc(%rbp)
  mov    -0x18(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <message@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L108
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdx
  mov    %ecx,%esi
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <mvaddstr@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0x8(%rbp),%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  add    $0x1,%eax
  mov    %eax,%esi
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <move@plt>
  mov    $0x0,%eax
  call   <refresh@plt>
  jmp    L108
L154:
  cmpl   $0x1f,-0x4(%rbp)
  jle    L222
  cmpl   $0x7e,-0x4(%rbp)
  jg     L222
  cmpl   $0x1b,-0xc(%rbp)
  jg     L222
  cmpl   $0x20,-0x4(%rbp)
  jne    L68
  cmpl   $0x0,-0xc(%rbp)
  jle    L222
L68:
  mov    -0xc(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0xc(%rbp)
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    -0x4(%rbp),%edx
  mov    %dl,(%rax)
  cmpl   $0x0,-0x38(%rbp)
  je     L222
  mov    -0x4(%rbp),%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <addch@plt>
L222:
  cmpl   $0x8,-0x4(%rbp)
  jne    L117
  cmpl   $0x0,-0xc(%rbp)
  jle    L117
  cmpl   $0x0,-0x38(%rbp)
  je     L87
  mov    -0xc(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  mov    $0x20,%edx
  mov    %eax,%esi
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <mvaddch@plt>
  mov    -0xc(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%esi
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <move@plt>
L87:
  subl   $0x1,-0xc(%rbp)
L117:
  mov    $0x0,%eax
  call   <refresh@plt>
L108:
  mov    $0x0,%eax
  call   <rgetchar@plt>
  mov    %eax,-0x4(%rbp)
  cmpl   $0xd,-0x4(%rbp)
  je     L162
  cmpl   $0xa,-0x4(%rbp)
  je     L162
  cmpl   $0x1b,-0x4(%rbp)
  jne    L154
L162:
  mov    $0x0,%eax
  call   <check_message@plt>
  cmpl   $0x0,-0x34(%rbp)
  je     L84
  mov    -0xc(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0xc(%rbp)
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movb   $0x20,(%rax)
  jmp    L186
L185:
  subl   $0x1,-0xc(%rbp)
L84:
  cmpl   $0x0,-0xc(%rbp)
  jle    L186
  mov    -0xc(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L185
L186:
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  cmpl   $0x1b,-0x4(%rbp)
  je     L151
  cmpl   $0x0,-0xc(%rbp)
  je     L151
  cmpl   $0x1,-0xc(%rbp)
  jne    L145
  cmpl   $0x0,-0x34(%rbp)
  je     L145
L151:
  cmpq   $0x0,-0x30(%rbp)
  je     L180
  mov    -0x30(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <message@plt>
L180:
  mov    $0x0,%eax
  jmp    L96
L145:
  mov    -0xc(%rbp),%eax
L96:
  leave
  ret
```

assistant: ```c
int get_input_line(prompt, insert, buf, if_cancelled, add_blank, do_echo)
char *prompt, *buf, *insert;
char *if_cancelled;
int add_blank;
int do_echo;
{
  int ch;
  int i = 0, n;
  message(prompt, 0);
  n = strlen(prompt);
  if (insert[0]) {
    mvaddstr(0, n + 1, insert);
    (void)strcpy(buf, insert);
    i = strlen(insert);
    move(0, (n + i + 1));
    refresh();
  }
  while (((ch = rgetchar()) != '\r') && (ch != '\n') && (ch != '\033')) {
    if ((ch >= ' ') && (ch <= '~') && (i < 30 - 2)) {
      if ((ch != ' ') || (i > 0)) {
        buf[i++] = ch;
        if (do_echo) {
          addch(ch);
        }
      }
    }
    if ((ch == '\b') && (i > 0)) {
      if (do_echo) {
        mvaddch(0, i + n, ' ');
        move(1 - 1, i + n);
      }
      i--;
    }
    refresh();
  }
  check_message();
  if (add_blank) {
    buf[i++] = ' ';
  } else {
    while ((i > 0) && (buf[i - 1] == ' ')) {
      i--;
    }
  }
  buf[i] = 0;
  if ((ch == '\033') || (i == 0) || ((i == 1) && add_blank)) {
    if (if_cancelled) {
      message(if_cancelled, 0);
    }
    return (0);
  }
  return (i);
}
```