user: 请将以下的汇编代码转换成C语言代码：

```asm
<test_split>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x50(%rbp),%rax
  lea    D208(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <str_cpy@plt>
  lea    -0x5c(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  lea    D296(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <str_split_big@plt>
  mov    %rax,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cmp    $0x3,%eax
  je     L77
  mov    $0xde,%edi
  call   <fail_test@plt>
L77:
  mov    -0x58(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D222(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L111
  mov    $0xe0,%edi
  call   <fail_test@plt>
L111:
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D320(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L277
  mov    $0xe2,%edi
  call   <fail_test@plt>
L277:
  mov    -0x58(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D185(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L165
  mov    $0xe4,%edi
  call   <fail_test@plt>
L165:
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <mem_free@plt>
  lea    -0x50(%rbp),%rax
  lea    D185(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <str_cpy@plt>
  lea    -0x5c(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  lea    D308(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <str_split_big@plt>
  mov    %rax,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cmp    $0x1,%eax
  je     L140
  mov    $0xeb,%edi
  call   <fail_test@plt>
L140:
  mov    -0x58(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D185(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L175
  mov    $0xed,%edi
  call   <fail_test@plt>
L175:
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <mem_free@plt>
  lea    -0x50(%rbp),%rax
  lea    D219(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <str_cpy@plt>
  lea    -0x5c(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  lea    D33(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <str_split_big@plt>
  mov    %rax,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cmp    $0x2,%eax
  je     L241
  mov    $0xf4,%edi
  call   <fail_test@plt>
L241:
  mov    -0x58(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D261(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L188
  mov    $0xf6,%edi
  call   <fail_test@plt>
L188:
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D129(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L293
  mov    $0xf8,%edi
  call   <fail_test@plt>
L293:
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <mem_free@plt>
  lea    -0x50(%rbp),%rax
  lea    D261(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <str_cpy@plt>
  lea    -0x5c(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  lea    D362(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <str_split_big@plt>
  mov    %rax,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cmp    $0x2,%eax
  je     L25
  mov    $0xff,%edi
  call   <fail_test@plt>
L25:
  mov    -0x58(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L120
  mov    $0x101,%edi
  call   <fail_test@plt>
L120:
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D72(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L198
  mov    $0x103,%edi
  call   <fail_test@plt>
L198:
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <mem_free@plt>
  lea    -0x50(%rbp),%rax
  lea    D228(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <str_cpy@plt>
  lea    -0x5c(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  lea    D33(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <str_split_big@plt>
  mov    %rax,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cmp    $0x2,%eax
  je     L124
  mov    $0x10a,%edi
  call   <fail_test@plt>
L124:
  mov    -0x58(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D368(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L226
  mov    $0x10c,%edi
  call   <fail_test@plt>
L226:
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D195(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L127
  mov    $0x10e,%edi
  call   <fail_test@plt>
L127:
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <mem_free@plt>
  lea    -0x50(%rbp),%rax
  lea    D356(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <str_cpy@plt>
  lea    -0x5c(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  lea    D33(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <str_split_big@plt>
  mov    %rax,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cmp    $0x3,%eax
  je     L36
  mov    $0x115,%edi
  call   <fail_test@plt>
L36:
  mov    -0x58(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D52(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L89
  mov    $0x117,%edi
  call   <fail_test@plt>
L89:
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D260(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L43
  mov    $0x119,%edi
  call   <fail_test@plt>
L43:
  mov    -0x58(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D195(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L27
  mov    $0x11b,%edi
  call   <fail_test@plt>
L27:
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <mem_free@plt>
  lea    -0x50(%rbp),%rax
  lea    D297(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <str_cpy@plt>
  lea    -0x5c(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  lea    D33(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <str_split_big@plt>
  mov    %rax,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cmp    $0x2,%eax
  je     L280
  mov    $0x122,%edi
  call   <fail_test@plt>
L280:
  mov    -0x58(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D97(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L150
  mov    $0x124,%edi
  call   <fail_test@plt>
L150:
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D195(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L109
  mov    $0x126,%edi
  call   <fail_test@plt>
L109:
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <mem_free@plt>
  lea    -0x50(%rbp),%rax
  lea    D8(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <str_cpy@plt>
  lea    -0x5c(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  lea    D33(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <str_split_big@plt>
  mov    %rax,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cmp    $0x1,%eax
  je     L101
  mov    $0x12d,%edi
  call   <fail_test@plt>
L101:
  mov    -0x58(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D8(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L182
  mov    $0x12f,%edi
  call   <fail_test@plt>
L182:
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <mem_free@plt>
  lea    -0x50(%rbp),%rax
  lea    D203(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <str_cpy@plt>
  lea    -0x5c(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  lea    D33(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <str_split_big@plt>
  mov    %rax,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cmp    $0x1,%eax
  je     L47
  mov    $0x136,%edi
  call   <fail_test@plt>
L47:
  mov    -0x58(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D203(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L215
  mov    $0x138,%edi
  call   <fail_test@plt>
L215:
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <mem_free@plt>
  lea    -0x50(%rbp),%rax
  lea    D314(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <str_cpy@plt>
  lea    -0x5c(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  lea    D33(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <str_split_big@plt>
  mov    %rax,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cmp    $0x2,%eax
  je     L250
  mov    $0x13f,%edi
  call   <fail_test@plt>
L250:
  mov    -0x58(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D52(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L163
  mov    $0x141,%edi
  call   <fail_test@plt>
L163:
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D185(%rip),%rax
  mov    %rax,%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  je     L282
  mov    $0x143,%edi
  call   <fail_test@plt>
L282:
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <mem_free@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L68
  call   <__stack_chk_fail@plt>
L68:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D208
data_type: string
name: disassemble_data
arguments: data_tag: D296
data_type: string
name: disassemble_data
arguments: data_tag: D222
data_type: string
name: disassemble_data
arguments: data_tag: D320
data_type: string
name: disassemble_data
arguments: data_tag: D185
data_type: string
name: disassemble_data
arguments: data_tag: D308
data_type: string
name: disassemble_data
arguments: data_tag: D219
data_type: string
name: disassemble_data
arguments: data_tag: D33
data_type: string
name: disassemble_data
arguments: data_tag: D261
data_type: string
name: disassemble_data
arguments: data_tag: D129
data_type: string
name: disassemble_data
arguments: data_tag: D362
data_type: string
name: disassemble_data
arguments: data_tag: D3
data_type: string
name: disassemble_data
arguments: data_tag: D72
data_type: string
name: disassemble_data
arguments: data_tag: D228
data_type: string
name: disassemble_data
arguments: data_tag: D368
data_type: string
name: disassemble_data
arguments: data_tag: D195
data_type: string
name: disassemble_data
arguments: data_tag: D356
data_type: string
name: disassemble_data
arguments: data_tag: D52
data_type: string
name: disassemble_data
arguments: data_tag: D260
data_type: string
name: disassemble_data
arguments: data_tag: D297
data_type: string
name: disassemble_data
arguments: data_tag: D97
data_type: string
name: disassemble_data
arguments: data_tag: D8
data_type: string
name: disassemble_data
arguments: data_tag: D203
data_type: string
name: disassemble_data
arguments: data_tag: D314
data_type: string

tool: D208: a`b`

tool: D296: `

tool: D222: a

tool: D320: b

tool: 

tool: D308: =

tool: D219: c:string,a:int

tool: D33: ,

tool: D261: c:string

tool: D129: a:int

tool: D362:  :	

tool: D3: c

tool: D72: string

tool: D228: hello world,123430

tool: D368: hello world

tool: D195: 123430

tool: D356: hello\\,world,123430

tool: D52: hello\\

tool: D260: world

tool: D297: hello\,world,123430

tool: D97: hello\,world

tool: D8: hello\

tool: D203: hello\,

tool: D314: 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);
}
```