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

```asm
<getstr>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  test   %rdi,%rdi
  je     L105
  mov    %rdi,D80(%rip)
L105:
  cmpq   $0x0,D80(%rip)
  setne  %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    D80(%rip),%rax
  movzbl (%rax),%edi
  test   %dil,%dil
  je     L187
L24:
  movsbl %dil,%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L51
  mov    D80(%rip),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,D64(%rip)
  movzbl 0x1(%rax),%edi
  test   %dil,%dil
  jne    L24
L187:
  mov    D64(%rip),%rax
  movzbl (%rax),%edi
L282:
  test   %dil,%dil
  je     L215
  lea    D64(%rip),%rbp
  mov    $0x0,%ebx
L176:
  movsbl %dil,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L120
  mov    D64(%rip),%rax
  movzbl (%rax),%edx
  cmp    $0x2c,%dl
  je     L120
  mov    %dl,0x0(%rbp)
  add    $0x1,%rax
  mov    %rax,D183(%rip)
  add    $0x1,%ebx
  cmp    $0xff,%ebx
  setle  %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    D183(%rip),%rax
  movzbl (%rax),%edi
  add    $0x1,%rbp
  test   %dil,%dil
  jne    L176
  jmp    L120
L51:
  mov    D183(%rip),%rdx
  movzbl (%rdx),%edi
  cmp    $0x22,%dil
  je     L138
  cmp    $0x7b,%dil
  jne    L109
  lea    0x1(%rdx),%rax
  mov    %rax,D183(%rip)
  movzbl 0x1(%rdx),%edx
  test   %dl,%dl
  je     L150
  cmp    $0x7d,%dl
  je     L150
  mov    $0x1,%ebp
  lea    D183(%rip),%r12
L27:
  mov    %dl,0x0(%rbp,%r12,1)
  add    $0x1,%rax
  mov    %rax,D134(%rip)
  mov    %ebp,%ebx
  cmp    $0xff,%ebp
  setle  %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    D134(%rip),%rax
  movzbl (%rax),%edx
  add    $0x1,%rbp
  test   %dl,%dl
  je     L120
  cmp    $0x7d,%dl
  jne    L27
  jmp    L120
L138:
  lea    0x1(%rdx),%rax
  mov    %rax,D134(%rip)
  movzbl 0x1(%rdx),%edi
  test   %dil,%dil
  je     L315
  cmp    $0x22,%dil
  je     L315
  mov    $0x1,%ebp
  lea    D183(%rip),%r12
  jmp    L198
L69:
  mov    %al,0x0(%rbp,%r12,1)
  addq   $0x1,D134(%rip)
  mov    %ebp,%ebx
  cmp    $0xff,%ebp
  setle  %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    D134(%rip),%rax
  movzbl (%rax),%edi
  add    $0x1,%rbp
  test   %dil,%dil
  je     L120
  cmp    $0x22,%dil
  je     L120
L198:
  movsbl %dil,%edi
  call   <isspace@plt>
  mov    %rax,%rdx
  mov    $0x5f,%eax
  test   %rdx,%rdx
  jne    L69
  mov    D134(%rip),%rax
  movzbl (%rax),%eax
  jmp    L69
L109:
  cmp    $0x3b,%dil
  jne    L282
  mov    $0x0,%ebx
L120:
  movslq %ebx,%rbx
  lea    D64(%rip),%rax
  movb   $0x0,(%rax,%rbx,1)
  mov    D134(%rip),%rax
  cmpb   $0x0,(%rax)
  je     L80
  add    $0x1,%rax
  mov    %rax,D134(%rip)
L80:
  movzbl D64(%rip),%edx
  test   %dl,%dl
  je     L123
  mov    $0x1,%eax
  mov    $0x0,%ecx
  lea    D64(%rip),%r8
  jmp    L303
L315:
  mov    $0x0,%ebx
  jmp    L120
L150:
  mov    $0x0,%ebx
  jmp    L120
L215:
  mov    $0x0,%ebx
  jmp    L120
L304:
  movzbl (%r8,%rax,1),%edx
  cmp    $0xff,%eax
  setle  %dil
  test   %dl,%dl
  setne  %sil
  add    $0x1,%rax
  test   %sil,%dil
  je     L211
L303:
  lea    -0x3b(%rdx),%esi
  cmp    $0x1,%sil
  jbe    L304
  movslq %ecx,%rsi
  mov    %dl,(%r8,%rsi,1)
  add    $0x1,%ecx
  jmp    L304
L211:
  test   %ecx,%ecx
  je     L123
  movslq %ecx,%rcx
  lea    D64(%rip),%rax
  movb   $0x0,(%rax,%rcx,1)
L123:
  lea    D64(%rip),%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

assistant: ```c
char *getstr(char *s) {
  static char *s1;
  static char buf[256];
  int i, j;
  if (s)
    s1 = s;
  assert(s1 != NULL);
  i = 0;
  for (; *s1 && isspace(*s1); s1++)
    ;
  if (*s1 == '"') {
    for (s1++; *s1 && *s1 != '"';) {
      buf[i] = isspace(*s1) ? '_' : *s1;
      s1++;
      i++;
      assert(i < 256);
    }
  } else if (*s1 == '{') {
    for (s1++; *s1 && *s1 != '}';) {
      buf[i] = *s1;
      s1++;
      i++;
      assert(i < 256);
    }
  } else {
    if (*s1 != ';') {
      for (; *s1 && !isspace(*s1) && *s1 != ',';) {
        buf[i] = *s1;
        s1++;
        i++;
        assert(i < 256);
      }
    }
  }
  buf[i] = '\0';
  if (*s1)
    s1++;
  i = 0;
  j = 0;
  while (buf[j] && j < 256) {
    if (buf[j] != ';' && buf[j] != '<') {
      buf[i] = buf[j];
      i++;
    }
    j++;
  }
  if (i)
    buf[i] = '\0';
  return buf;
}
```