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

```asm
<getword>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%r13
  mov    %esi,%r14d
L0:
  mov    $0x0,%eax
  call   <getch@plt>
  mov    %rax,%rbx
  mov    %eax,%ebp
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L0
  mov    %r13,%r12
  mov    D38(%rip),%rax
  cmp    %ebx,(%rax)
  je     L119
  lea    0x1(%r13),%r12
  mov    %bl,0x0(%r13)
L119:
  mov    %ebp,%edi
  call   <isalpha@plt>
  test   %eax,%eax
  jne    L7
  cmp    $0x22,%ebp
  je     L47
  cmp    $0x5c,%ebp
  je     L178
  cmp    $0x23,%ebp
  je     L281
  cmp    $0x5f,%ebp
  je     L281
  movb   $0x0,(%r12)
  jmp    L37
L47:
  mov    $0x0,%eax
  call   <getch@plt>
  mov    %eax,%ebp
  cmp    $0x22,%eax
  je     L7
  mov    D38(%rip),%rdx
  cmp    %eax,(%rdx)
  jne    L47
  jmp    L7
L178:
  mov    $0x0,%eax
  call   <getch@plt>
  mov    %eax,%ebp
  cmp    $0x5c,%eax
  je     L50
  cmp    $0x2a,%eax
  jne    L7
L30:
  mov    $0x0,%eax
  call   <getch@plt>
  mov    %eax,%ebp
  mov    D38(%rip),%rdx
  cmp    %eax,(%rdx)
  je     L7
  cmp    $0x2a,%eax
  jne    L30
  mov    $0x0,%eax
  call   <getch@plt>
  mov    %eax,%ebp
  cmp    $0x5c,%eax
  je     L7
  jmp    L30
L50:
  mov    $0x0,%eax
  call   <getch@plt>
  mov    %eax,%ebp
  cmp    $0xa,%eax
  je     L7
  mov    D38(%rip),%rdx
  cmp    %eax,(%rdx)
  jne    L50
  jmp    L7
L281:
  mov    %bl,(%r12)
  lea    0x1(%r12),%r12
L7:
  lea    -0x2(%r14),%eax
  lea    0x1(%r12,%rax,1),%rbx
  cmp    $0x1,%r14d
  jg     L349
  jmp    L386
L172:
  mov    $0x0,%eax
  call   <getch@plt>
  cmp    $0x22,%eax
  je     L386
  mov    D38(%rip),%rdx
  cmp    %eax,(%rdx)
  jne    L172
  jmp    L386
L320:
  mov    $0x0,%eax
  call   <getch@plt>
  mov    %eax,%ebp
  cmp    $0x5c,%eax
  je     L310
  cmp    $0x2a,%eax
  je     L175
L196:
  add    $0x1,%r12
  cmp    %rbx,%r12
  je     L198
L349:
  mov    $0x0,%eax
  call   <getch@plt>
  mov    %al,(%r12)
  movsbl %al,%edi
  call   <isalnum@plt>
  test   %eax,%eax
  jne    L196
  cmp    $0x22,%ebp
  je     L172
  cmp    $0x5c,%ebp
  je     L320
  cmp    $0x23,%ebp
  je     L196
  cmp    $0x5f,%ebp
  je     L196
  movsbl (%r12),%edi
  call   <ungetch@plt>
L386:
  movb   $0x0,(%r12)
  movsbl 0x0(%r13),%ebp
L37:
  mov    %ebp,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L310:
  mov    $0x0,%eax
  call   <getch@plt>
  cmp    $0xa,%eax
  je     L386
  mov    D38(%rip),%rdx
  cmp    %eax,(%rdx)
  jne    L310
  jmp    L386
L190:
  movb   $0x0,(%r12)
L175:
  mov    $0x0,%eax
  call   <getch@plt>
  mov    %eax,%ebp
  mov    D38(%rip),%rdx
  cmp    %eax,(%rdx)
  je     L196
  cmp    $0x2a,%eax
  jne    L190
  mov    $0x0,%eax
  call   <getch@plt>
  mov    %eax,%ebp
  cmp    $0x5c,%eax
  jne    L190
  movb   $0x0,(%r12)
  jmp    L196
L198:
  mov    %rbx,%r12
  jmp    L386
```

assistant: ```c
int getword(char *word, int lim) {
  int c = 0;
  char *w = word;
  while (isspace(c = getch()))
    ;
  if (c != EOF)
    *w++ = c;
  if (!isalpha(c)) {
    if (c == '"')
      while (((c = getch()) != '"') && (c != EOF))
        ;
    else if (c == '\\') {
      if ((c = getch()) == '\\') {
        while (((c = getch()) != '\n') && (c != EOF))
          ;
      } else if (c == '*') {
        while ((c = getch()) != EOF)
          if ((c == '*') && ((c = getch()) == '\\'))
            break;
          else
            continue;
      }
    } else if ((c == '#') || (c == '_'))
      *w++ = c;
    else {
      *w = '\0';
      return c;
    }
  }
  for (; --lim > 0; w++)
    if (!isalnum(*w = getch())) {
      if (c == '"') {
        while (((c = getch()) != '"') && (c != EOF))
          ;
        *w = '\0';
        break;
      } else if (c == '\\') {
        if ((c = getch()) == '\\') {
          while (((c = getch()) != '\n') && (c != EOF))
            ;
          *w = '\0';
          break;
        } else if (c == '*') {
          while ((c = getch()) != EOF)
            if ((c == '*') && ((c = getch()) == '\\')) {
              *w = '\0';
              break;
            } else {
              *w = '\0';
              continue;
            }
        }
      } else if ((c == '#') || (c == '_')) {
        continue;
      } else {
        ungetch(*w);
        break;
      }
    }
  *w = '\0';
  return word[0];
}
```