user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<ieee1888_datapool_parse_CSV_line>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %rcx,-0x40(%rbp)
  movl   $0x0,-0x14(%rbp)
  movl   $0x0,-0x10(%rbp)
  movl   $0x0,-0xc(%rbp)
  movl   $0x0,-0x8(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x4(%rbp)
  movl   $0x0,-0x18(%rbp)
  jmp    L140
L190:
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L37
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2c,%al
  jne    L2
  addl   $0x1,-0x14(%rbp)
  jmp    L96
L2:
  cmpl   $0x2,-0x14(%rbp)
  je     L66
  cmpl   $0x2,-0x14(%rbp)
  jg     L74
  cmpl   $0x0,-0x14(%rbp)
  je     L9
  cmpl   $0x1,-0x14(%rbp)
  je     L141
  jmp    L74
L9:
  cmpl   $0xfe,-0x10(%rbp)
  jg     L47
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x10(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x10(%rbp)
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  movzbl (%rcx),%eax
  mov    %al,(%rdx)
  jmp    L96
L47:
  lea    D4(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L42
L141:
  cmpl   $0x30,-0xc(%rbp)
  jg     L158
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0xc(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0xc(%rbp)
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rax,%rdx
  movzbl (%rcx),%eax
  mov    %al,(%rdx)
  jmp    L96
L158:
  lea    D11(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L42
L66:
  cmpl   $0x26,-0x8(%rbp)
  jg     L104
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  movslq %eax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rax,%rdx
  movzbl (%rcx),%eax
  mov    %al,(%rdx)
  jmp    L96
L104:
  lea    D32(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L42
L74:
  mov    -0x4(%rbp),%eax
  mov    %eax,-0x18(%rbp)
L96:
  addl   $0x1,-0x18(%rbp)
L140:
  mov    -0x18(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L190
  jmp    L205
L37:
  nop
L205:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  cmpl   $0x2,-0x14(%rbp)
  je     L106
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L42
L106:
  mov    $0x1,%eax
L42:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D4
type: string
name: disassemble_data
arguments: data_tag: D11
type: string
name: disassemble_data
arguments: data_tag: D32
type: string
name: disassemble_data
arguments: data_tag: D25
type: string

tool: D4: the lendth of id section is too long...


tool: D11: the lendth of time section is too long...


tool: D32: the lendth of value section is too long...


tool: D25: Error while parsing a line of datapool CSV ...


assistant: ```c
int ieee1888_datapool_parse_CSV_line(const char *line, char *row_id, char *row_time, char *row_value) {
  int i;
  int column = 0;
  int row_id_index = 0;
  int row_time_index = 0;
  int row_value_index = 0;
  int len = strlen(line);
  for (i = 0; i < len; i++) {
    if (line[i] == '\n') {
      break;
    }
    if (line[i] == ',') {
      column++;
      continue;
    }
    switch (column) {
    case 0:
      if (row_id_index < 256 - 1) {
        row_id[row_id_index++] = line[i];
      } else {
        printf("the lendth of id section is too long...\n");
        return 0;
      }
      break;
    case 1:
      if (row_time_index < 50 - 1) {
        row_time[row_time_index++] = line[i];
      } else {
        printf("the lendth of time section is too long...\n");
        return 0;
      }
      break;
    case 2:
      if (row_value_index < 40 - 1) {
        row_value[row_value_index++] = line[i];
      } else {
        printf("the lendth of value section is too long...\n");
        return 0;
      }
      break;
    default:
      i = len;
    }
  }
  row_id[row_id_index] = '\0';
  row_time[row_time_index] = '\0';
  row_value[row_value_index] = '\0';
  if (column != 2) {
    printf("Error while parsing a line of datapool CSV ...\n");
    return 0;
  }
  return 1;
}
```