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

```asm
<breakval>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbp
  movb   $0x0,(%rdi)
  test   %rdx,%rdx
  je     L210
  mov    %rsi,%r9
  mov    %rdx,%rax
  mov    %rcx,%r12
  cmp    $0x1,%r8
  mov    $0x0,%edx
  cmovbe %rdx,%r8
  sub    $0x1,%rsi
  je     L327
  mov    %rax,-0x18(%rsp)
  mov    %rdi,-0x20(%rsp)
  mov    $0x0,%edx
  mov    $0x0,%r13d
  lea    -0x4(%r9),%r14
  lea    -0x2(%r9),%r15
  lea    -0x3(%r9),%rbx
  mov    %rbx,-0x10(%rsp)
  mov    %r8,-0x8(%rsp)
  jmp    L37
L180:
  add    $0x1,%rax
L287:
  cmp    %rsi,%rdx
  jae    L335
  movzbl (%rax),%r9d
  test   %r9b,%r9b
  je     L79
L74:
  cmp    %rcx,%r8
  jbe    L335
  cmp    $0xd,%r9b
  je     L180
  cmp    $0xa,%r9b
  je     L279
  cmp    $0x5c,%r9b
  je     L337
  cmp    $0x20,%r9b
  je     L321
L233:
  mov    %r9b,(%rdi)
  add    $0x1,%rdi
  add    $0x1,%rax
  add    $0x1,%rdx
  add    $0x1,%rcx
  jmp    L287
L279:
  add    $0x1,%rax
  jmp    L287
L337:
  movzbl 0x1(%rax),%r9d
  cmp    $0xd,%r9b
  je     L67
  lea    0x1(%rax),%r11
  cmp    $0xa,%r9b
  je     L273
  cmp    %rdx,%r15
  jbe    L75
  movb   $0x5c,(%rdi)
  movzbl 0x1(%rax),%r9d
  mov    %r9b,0x1(%rdi)
  add    $0x2,%rdi
  add    $0x2,%rax
  add    $0x2,%rdx
  add    $0x2,%rcx
  jmp    L287
L67:
  lea    0x2(%rax),%r11
  cmpb   $0xa,0x2(%rax)
  je     L273
  mov    %r11,%rax
  jmp    L287
L273:
  lea    0x1(%r11),%rax
  jmp    L287
L321:
  cmp    %rdx,%r14
  jbe    L233
  movb   $0x20,(%rdi)
  add    $0x1,%rdi
  add    $0x1,%rax
  add    $0x1,%rdx
  add    $0x1,%rcx
  mov    %rax,-0x18(%rsp)
  mov    %rdi,-0x20(%rsp)
  mov    %rcx,%r10
  mov    %rdx,%rbx
  jmp    L287
L75:
  mov    %r11,%rax
  jmp    L287
L335:
  test   %r10,%r10
  je     L326
  cmpb   $0x0,(%rax)
  je     L50
  mov    -0x18(%rsp),%rax
  mov    -0x20(%rsp),%rdi
  mov    %rbx,%rdx
L326:
  movzbl (%rax),%ecx
  test   %cl,%cl
  je     L50
L196:
  cmpb   $0x0,0x1(%rax)
  je     L186
  cmp    %rdx,-0x10(%rsp)
  jbe    L50
  movb   $0x5c,(%rdi)
  movb   $0xd,0x1(%rdi)
  movb   $0xa,0x2(%rdi)
  add    $0x3,%rdi
  add    $0x3,%rdx
  mov    %rax,-0x18(%rsp)
  mov    %rdi,-0x20(%rsp)
  mov    -0x8(%rsp),%r12
  jmp    L50
L186:
  cmp    $0x5c,%cl
  je     L50
  mov    %cl,(%rdi)
  add    $0x1,%rdi
  add    $0x1,%rax
  add    $0x1,%rdx
  jmp    L50
L327:
  movb   $0x0,(%rdi)
L210:
  mov    %rbp,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L79:
  test   %r10,%r10
  je     L326
L50:
  cmp    %rsi,%rdx
  jae    L327
L37:
  movzbl (%rax),%r9d
  test   %r9b,%r9b
  je     L327
  mov    %rdx,%rbx
  mov    %r13,%r10
  mov    $0x0,%ecx
  lea    -0x1(%r12),%r8
  cmp    %rdx,%rsi
  ja     L74
  movzbl (%rax),%ecx
  jmp    L196
```

assistant: ```c
char *breakval(char buffer[], unsigned long buflen, const char *string, unsigned long pos1, unsigned long pos2) {
  unsigned long i, is;
  unsigned long pos, poss;
  unsigned long breakpos = pos1;
  char *pb = buffer, *pbs;
  const char *ps = string, *pss;
  char c;
  buffer[0] = '\0';
  if (!string)
    return (buffer);
  if (pos1 <= 1)
    pos1 = 0U;
  if (pos2 <= 1)
    pos2 = 0U;
  i = 0U;
  pbs = pb;
  pss = ps;
  while ((i < buflen - 1) && (*ps)) {
    pos = 0U;
    poss = pos;
    is = i;
    while ((i < buflen - 1) && (*ps) && (pos < breakpos - 1)) {
      if ((*ps) == '\r')
        ps++;
      else if ((*ps) == '\n')
        ps++;
      else if ((*ps) == '\\') {
        c = *ps;
        ps++;
        if ((*ps) == ('\r')) {
          ps++;
          c = (char)0;
        }
        if ((*ps) == ('\n')) {
          ps++;
          c = (char)0;
        }
        if ((c) && (i < buflen - 2)) {
          *pb = c;
          pb++;
          *pb = *ps;
          pb++;
          ps++;
          i += 2;
          pos += 2;
        }
      } else if (((*ps) == ' ') && (i < buflen - 4)) {
        if (i < buflen - 1) {
          *pb = *ps;
          pb++;
          ps++;
          i++;
          pos++;
        }
        pbs = pb;
        pss = ps;
        poss = pos;
        is = i;
      } else {
        *pb = *ps;
        pb++;
        ps++;
        i++;
        pos++;
      }
    }
    if ((poss != 0U) && (*ps)) {
      pb = pbs;
      ps = pss;
      pos = poss;
      i = is;
    }
    if (*ps) {
      if (ps[1]) {
        if (i < buflen - 3) {
          *pb = '\\';
          pb++;
          *pb = '\r';
          pb++;
          *pb = '\n';
          pb++;
          i += 3;
          pos = 0U;
          pbs = pb;
          pss = ps;
          poss = pos;
          is = i;
          breakpos = pos2;
        }
      } else {
        if (*ps != '\\') {
          *pb = *ps;
          pb++;
          ps++;
          i++;
          pos++;
        }
      }
    }
  }
  while ((i < buflen - 1) && (*ps)) {
    if ((*ps) == '\r')
      ps++;
    else if ((*ps) == '\n')
      ps++;
    else if ((*ps) == '\\') {
      c = *ps;
      ps++;
      if ((*ps) == ('\r')) {
        ps++;
        c = (char)0;
      }
      if ((*ps) == ('\n')) {
        ps++;
        c = (char)0;
      }
      if ((c) && (i < buflen - 2)) {
        *pb = c;
        pb++;
        *pb = *ps;
        pb++;
        ps++;
        i += 2;
        pos += 2;
      }
    } else {
      *pb = *ps;
      pb++;
      ps++;
      i++;
      pos++;
    }
  }
  *pb = '\0';
  pb++;
  return (buffer);
}
```