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

```asm
<test_split>:
  endbr64
  push   %r15
  lea    D31(%rip),%rsi
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x68,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  xor    %eax,%eax
  lea    0x10(%rsp),%rbp
  lea    0xc(%rsp),%r12
  mov    %rbp,%rdi
  call   <str_cpy@plt>
  mov    %r12,%rdx
  lea    D29(%rip),%rsi
  mov    %rbp,%rdi
  call   <str_split_big@plt>
  cmpl   $0x3,0xc(%rsp)
  mov    %rax,%r13
  je     L369
  mov    $0xde,%edi
  call   <fail_test@plt>
L369:
  mov    0x0(%r13),%rsi
  lea    D127(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L239
L130:
  mov    0x8(%r13),%rsi
  lea    D204(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L339
L119:
  lea    D189(%rip),%r15
  mov    0x10(%r13),%rsi
  mov    %r15,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L471
L242:
  mov    %r13,%rdi
  call   <mem_free@plt>
  mov    %r15,%rsi
  mov    %rbp,%rdi
  call   <str_cpy@plt>
  mov    %r12,%rdx
  lea    D108(%rip),%rsi
  mov    %rbp,%rdi
  call   <str_split_big@plt>
  cmpl   $0x1,0xc(%rsp)
  mov    %rax,%r13
  je     L377
  mov    $0xeb,%edi
  call   <fail_test@plt>
L377:
  mov    0x0(%r13),%rsi
  mov    %r15,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L378
L381:
  mov    %r13,%rdi
  lea    D152(%rip),%r13
  call   <mem_free@plt>
  lea    D116(%rip),%rsi
  mov    %rbp,%rdi
  call   <str_cpy@plt>
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <str_split_big@plt>
  cmpl   $0x2,0xc(%rsp)
  mov    %rax,%r14
  je     L354
  mov    $0xf4,%edi
  call   <fail_test@plt>
L354:
  lea    D19(%rip),%rbx
  mov    (%r14),%rsi
  mov    %rbx,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L414
L232:
  mov    0x8(%r14),%rsi
  lea    D95(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L302
L222:
  mov    %r14,%rdi
  call   <mem_free@plt>
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <str_cpy@plt>
  mov    %r12,%rdx
  lea    D186(%rip),%rsi
  mov    %rbp,%rdi
  call   <str_split_big@plt>
  cmpl   $0x2,0xc(%rsp)
  mov    %rax,%r14
  je     L97
  mov    $0xff,%edi
  call   <fail_test@plt>
L97:
  mov    (%r14),%rsi
  lea    D86(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L35
L290:
  mov    0x8(%r14),%rsi
  lea    D130(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L178
L82:
  mov    %r14,%rdi
  call   <mem_free@plt>
  lea    D240(%rip),%rsi
  mov    %rbp,%rdi
  call   <str_cpy@plt>
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <str_split_big@plt>
  cmpl   $0x2,0xc(%rsp)
  mov    %rax,%r14
  je     L128
  mov    $0x10a,%edi
  call   <fail_test@plt>
L128:
  mov    (%r14),%rsi
  lea    D134(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L365
L328:
  lea    D120(%rip),%rbx
  mov    0x8(%r14),%rsi
  mov    %rbx,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L160
L52:
  mov    %r14,%rdi
  call   <mem_free@plt>
  lea    D212(%rip),%rsi
  mov    %rbp,%rdi
  call   <str_cpy@plt>
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <str_split_big@plt>
  cmpl   $0x3,0xc(%rsp)
  mov    %rax,%r14
  je     L150
  mov    $0x115,%edi
  call   <fail_test@plt>
L150:
  mov    (%r14),%rsi
  lea    D246(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L116
L54:
  mov    0x8(%r14),%rsi
  lea    D76(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L99
L307:
  mov    0x10(%r14),%rsi
  mov    %rbx,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L184
L176:
  mov    %r14,%rdi
  call   <mem_free@plt>
  lea    D142(%rip),%rsi
  mov    %rbp,%rdi
  call   <str_cpy@plt>
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <str_split_big@plt>
  cmpl   $0x2,0xc(%rsp)
  mov    %rax,%r14
  je     L196
  mov    $0x122,%edi
  call   <fail_test@plt>
L196:
  mov    (%r14),%rsi
  lea    D177(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L462
L410:
  mov    0x8(%r14),%rsi
  mov    %rbx,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L113
L281:
  mov    %r14,%rdi
  lea    D128(%rip),%rbx
  call   <mem_free@plt>
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <str_cpy@plt>
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <str_split_big@plt>
  cmpl   $0x1,0xc(%rsp)
  mov    %rax,%r14
  je     L425
  mov    $0x12d,%edi
  call   <fail_test@plt>
L425:
  mov    (%r14),%rsi
  mov    %rbx,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L329
L64:
  mov    %r14,%rdi
  lea    D175(%rip),%rbx
  call   <mem_free@plt>
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <str_cpy@plt>
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <str_split_big@plt>
  cmpl   $0x1,0xc(%rsp)
  mov    %rax,%r14
  je     L94
  mov    $0x136,%edi
  call   <fail_test@plt>
L94:
  mov    (%r14),%rsi
  mov    %rbx,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L463
L265:
  mov    %r14,%rdi
  call   <mem_free@plt>
  mov    %rbp,%rdi
  lea    D208(%rip),%rsi
  call   <str_cpy@plt>
  mov    %rbp,%rdi
  mov    %r12,%rdx
  mov    %r13,%rsi
  call   <str_split_big@plt>
  cmpl   $0x2,0xc(%rsp)
  mov    %rax,%rbp
  je     L266
  mov    $0x13f,%edi
  call   <fail_test@plt>
L266:
  mov    0x0(%rbp),%rsi
  lea    D246(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L187
L267:
  mov    0x8(%rbp),%rsi
  mov    %r15,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L298
L371:
  mov    %rbp,%rdi
  call   <mem_free@plt>
  mov    0x58(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L147
  add    $0x68,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L463:
  mov    $0x138,%edi
  call   <fail_test@plt>
  jmp    L265
  nop
L298:
  mov    $0x143,%edi
  call   <fail_test@plt>
  jmp    L371
  nopl   0x0(%rax)
L187:
  mov    $0x141,%edi
  call   <fail_test@plt>
  jmp    L267
  nopl   0x0(%rax)
L329:
  mov    $0x12f,%edi
  call   <fail_test@plt>
  jmp    L64
  nop
L113:
  mov    $0x126,%edi
  call   <fail_test@plt>
  jmp    L281
  nop
L462:
  mov    $0x124,%edi
  call   <fail_test@plt>
  jmp    L410
  nop
L184:
  mov    $0x11b,%edi
  call   <fail_test@plt>
  jmp    L176
  nop
L99:
  mov    $0x119,%edi
  call   <fail_test@plt>
  jmp    L307
  nop
L116:
  mov    $0x117,%edi
  call   <fail_test@plt>
  jmp    L54
  nop
L160:
  mov    $0x10e,%edi
  call   <fail_test@plt>
  jmp    L52
  nop
L365:
  mov    $0x10c,%edi
  call   <fail_test@plt>
  jmp    L328
  nop
L178:
  mov    $0x103,%edi
  call   <fail_test@plt>
  jmp    L82
  nop
L35:
  mov    $0x101,%edi
  call   <fail_test@plt>
  jmp    L290
  nop
L302:
  mov    $0xf8,%edi
  call   <fail_test@plt>
  jmp    L222
  nop
L414:
  mov    $0xf6,%edi
  call   <fail_test@plt>
  jmp    L232
  nop
L378:
  mov    $0xed,%edi
  call   <fail_test@plt>
  jmp    L381
  nop
L471:
  mov    $0xe4,%edi
  call   <fail_test@plt>
  jmp    L242
  nop
L339:
  mov    $0xe2,%edi
  call   <fail_test@plt>
  jmp    L119
  nop
L239:
  mov    $0xe0,%edi
  call   <fail_test@plt>
  jmp    L130
L147:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D31
data_type: string
name: extract_symbolic_data
arguments: data_tag: D29
data_type: string
name: extract_symbolic_data
arguments: data_tag: D127
data_type: string
name: extract_symbolic_data
arguments: data_tag: D204
data_type: string
name: extract_symbolic_data
arguments: data_tag: D189
data_type: string
name: extract_symbolic_data
arguments: data_tag: D108
data_type: string
name: extract_symbolic_data
arguments: data_tag: D152
data_type: string
name: extract_symbolic_data
arguments: data_tag: D116
data_type: string
name: extract_symbolic_data
arguments: data_tag: D19
data_type: string
name: extract_symbolic_data
arguments: data_tag: D95
data_type: string
name: extract_symbolic_data
arguments: data_tag: D186
data_type: string
name: extract_symbolic_data
arguments: data_tag: D86
data_type: string
name: extract_symbolic_data
arguments: data_tag: D130
data_type: string
name: extract_symbolic_data
arguments: data_tag: D240
data_type: string
name: extract_symbolic_data
arguments: data_tag: D134
data_type: string
name: extract_symbolic_data
arguments: data_tag: D120
data_type: string
name: extract_symbolic_data
arguments: data_tag: D212
data_type: string
name: extract_symbolic_data
arguments: data_tag: D246
data_type: string
name: extract_symbolic_data
arguments: data_tag: D76
data_type: string
name: extract_symbolic_data
arguments: data_tag: D142
data_type: string
name: extract_symbolic_data
arguments: data_tag: D177
data_type: string
name: extract_symbolic_data
arguments: data_tag: D128
data_type: string
name: extract_symbolic_data
arguments: data_tag: D175
data_type: string
name: extract_symbolic_data
arguments: data_tag: D208
data_type: string

tool: D31: a`b`

tool: D29: `

tool: D127: a

tool: D204: b

tool: 

tool: D108: =

tool: D152: ,

tool: D116: c:string,a:int

tool: D19: c:string

tool: D95: a:int

tool: D186:  :	

tool: D86: c

tool: D130: string

tool: D240: hello world,123430

tool: D134: hello world

tool: D120: 123430

tool: D212: hello\\,world,123430

tool: D246: hello\\

tool: D76: world

tool: D142: hello\,world,123430

tool: D177: hello\,world

tool: D128: hello\

tool: D175: hello\,

tool: D208: hello\\,

assistant: ```c
void test_split() {
  int cnt;
  char str[64];
  str_cpy(str, "a`b`");
  char **s = str_split_big(str, "`", &cnt);
  if (cnt != 3)
    fail_test(222);
  ;
  if (str_cmp("a", s[0]) != 0)
    fail_test(224);
  ;
  if (str_cmp("b", s[1]) != 0)
    fail_test(226);
  ;
  if (str_cmp("", s[2]) != 0)
    fail_test(228);
  ;
  mem_free(s);
  str_cpy(str, "");
  s = str_split_big(str, "=", &cnt);
  if (cnt != 1)
    fail_test(235);
  ;
  if (str_cmp("", s[0]) != 0)
    fail_test(237);
  ;
  mem_free(s);
  str_cpy(str, "c:string,a:int");
  s = str_split_big(str, ",", &cnt);
  if (cnt != 2)
    fail_test(244);
  ;
  if (str_cmp("c:string", s[0]) != 0)
    fail_test(246);
  ;
  if (str_cmp("a:int", s[1]) != 0)
    fail_test(248);
  ;
  mem_free(s);
  str_cpy(str, "c:string");
  s = str_split_big(str, " :\t", &cnt);
  if (cnt != 2)
    fail_test(255);
  ;
  if (str_cmp("c", s[0]) != 0)
    fail_test(257);
  ;
  if (str_cmp("string", s[1]) != 0)
    fail_test(259);
  ;
  mem_free(s);
  str_cpy(str, "hello world,123430");
  s = str_split_big(str, ",", &cnt);
  if (cnt != 2)
    fail_test(266);
  ;
  if (str_cmp("hello world", s[0]) != 0)
    fail_test(268);
  ;
  if (str_cmp("123430", s[1]) != 0)
    fail_test(270);
  ;
  mem_free(s);
  str_cpy(str, "hello\\\\,world,123430");
  s = str_split_big(str, ",", &cnt);
  if (cnt != 3)
    fail_test(277);
  ;
  if (str_cmp("hello\\\\", s[0]) != 0)
    fail_test(279);
  ;
  if (str_cmp("world", s[1]) != 0)
    fail_test(281);
  ;
  if (str_cmp("123430", s[2]) != 0)
    fail_test(283);
  ;
  mem_free(s);
  str_cpy(str, "hello\\,world,123430");
  s = str_split_big(str, ",", &cnt);
  if (cnt != 2)
    fail_test(290);
  ;
  if (str_cmp("hello\\,world", s[0]) != 0)
    fail_test(292);
  ;
  if (str_cmp("123430", s[1]) != 0)
    fail_test(294);
  ;
  mem_free(s);
  str_cpy(str, "hello\\");
  s = str_split_big(str, ",", &cnt);
  if (cnt != 1)
    fail_test(301);
  ;
  if (str_cmp("hello\\", s[0]) != 0)
    fail_test(303);
  ;
  mem_free(s);
  str_cpy(str, "hello\\,");
  s = str_split_big(str, ",", &cnt);
  if (cnt != 1)
    fail_test(310);
  ;
  if (str_cmp("hello\\,", s[0]) != 0)
    fail_test(312);
  ;
  mem_free(s);
  str_cpy(str, "hello\\\\,");
  s = str_split_big(str, ",", &cnt);
  if (cnt != 2)
    fail_test(319);
  ;
  if (str_cmp("hello\\\\", s[0]) != 0)
    fail_test(321);
  ;
  if (str_cmp("", s[1]) != 0)
    fail_test(323);
  ;
  mem_free(s);
}
```