user: 这段汇编代码用C语言表示是什么样的？

```asm
<_sconfig_parse_line>:
  endbr64
  push   %r15
  mov    %rdx,%r15
  push   %r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  test   %esi,%esi
  jle    L251
  mov    %esi,%r12d
  mov    %rcx,%r14
  mov    %rdi,%rbp
  xor    %ebx,%ebx
  jmp    L89
  nopl   (%rax)
L192:
  movsbl 0x0(%rbp),%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L218
  add    $0x1,%ebx
  add    $0x1,%rbp
  cmp    %ebx,%r12d
  je     L124
L89:
  movsbl 0x0(%rbp),%edi
  cmp    $0x3d,%dil
  je     L40
  cmp    $0x5f,%dil
  je     L40
  call   <isdigit@plt>
  test   %rax,%rax
  je     L192
L40:
  add    $0x8,%rsp
  mov    $0xffffffff,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L218:
  cmpb   $0x23,0x0(%rbp)
  je     L124
  mov    %rbp,(%r15)
  cmp    %r12d,%ebx
  jge    L40
  movslq %ebx,%r15
  xor    %ebp,%ebp
  add    %r13,%r15
  jmp    L157
  nopl   0x0(%rax)
L113:
  movsbl (%r15),%edi
  call   <islower@plt>
  test   %rax,%rax
  jne    L160
  movsbl (%r15),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  jne    L165
  cmpb   $0x5f,(%r15)
  jne    L40
  nopw   0x0(%rax,%rax,1)
L165:
  add    $0x1,%ebx
  add    $0x1,%r15
  cmp    %ebx,%r12d
  je     L40
L157:
  movsbl (%r15),%edi
  cmp    $0x3d,%dil
  je     L104
  call   <isupper@plt>
  test   %rax,%rax
  je     L113
L160:
  mov    $0x1,%ebp
  jmp    L165
  nop
L104:
  cmp    %ebx,%r12d
  je     L40
  test   %ebp,%ebp
  je     L40
  lea    0x1(%rbx),%r15d
  movslq %ebx,%rbx
  movslq %r15d,%rbp
  movb   $0x0,0x0(%r13,%rbx,1)
  add    %r13,%rbp
  mov    %rbp,(%r14)
  cmp    %r15d,%r12d
  je     L186
  jle    L49
  mov    $0xffffffff,%ebx
  nopw   0x0(%rax,%rax,1)
L264:
  movsbl 0x0(%rbp),%edi
  cmp    $0x23,%dil
  jne    L293
  cmp    %rbp,(%r14)
  je     L293
  movsbl -0x1(%rbp),%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L243
  movsbl 0x0(%rbp),%edi
L293:
  call   <isspace@plt>
  test   %rax,%rax
  cmove  %r15d,%ebx
  add    $0x1,%r15d
  add    $0x1,%rbp
  cmp    %r15d,%r12d
  jne    L264
L243:
  mov    (%r14),%rbp
  cmp    $0xffffffff,%ebx
  je     L49
  movsbl 0x0(%rbp),%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L40
  movslq %ebx,%rbx
  mov    $0x2,%eax
  movb   $0x0,0x1(%r13,%rbx,1)
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L49:
  movb   $0x0,0x0(%rbp)
L186:
  add    $0x8,%rsp
  mov    $0x1,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L251:
  je     L124
  cmpb   $0x23,(%rdi)
  jne    L35
L124:
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L35:
  mov    %rdi,(%r15)
  jmp    L40
```

assistant: ```c
int _sconfig_parse_line(char *buffer, int len, char **name, char **value) {
  int i;
  for (i = 0; i < len; ++i) {
    if (buffer[i] == '=' || buffer[i] == '_' || isdigit(buffer[i]))
      return -1;
    if (!isspace(buffer[i]))
      break;
  }
  if (i == len || buffer[i] == '#')
    return 0;
  *name = buffer + i;
  int has_alpha = 0;
  for (; i < len; ++i) {
    if (buffer[i] == '=')
      break;
    else if (isupper(buffer[i]) || islower(buffer[i])) {
      has_alpha = 1;
      continue;
    } else if (isdigit(buffer[i]) || buffer[i] == '_')
      continue;
    else
      return -1;
  }
  if (i == len || !has_alpha)
    return -1;
  buffer[i++] = '\0';
  if (i == len) {
    *value = buffer + i;
    return 1;
  }
  *value = buffer + i;
  int last_char = -1;
  for (; i < len; ++i) {
    if (buffer[i] == '#' && buffer + i != *value && isspace(buffer[i - 1]))
      break;
    else if (!isspace(buffer[i]))
      last_char = i;
  }
  if (last_char == -1) {
    **value = '\0';
    return 1;
  }
  if (isspace(**value))
    return -1;
  buffer[last_char + 1] = '\0';
  return 2;
}
```