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

```asm
<test_split>:
  endbr64
  push   %rbx
  sub    $0x60,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  xor    %eax,%eax
  lea    0x10(%rsp),%rbx
  lea    D146(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_cpy@plt>
  lea    0xc(%rsp),%rdx
  lea    D143(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_split_big@plt>
  mov    %rax,%rbx
  cmpl   $0x3,0xc(%rsp)
  jne    L556
L394:
  mov    (%rbx),%rsi
  lea    D138(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L184
L344:
  mov    0x8(%rbx),%rsi
  lea    D41(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L395
L497:
  mov    0x10(%rbx),%rsi
  lea    D299(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L503
L57:
  mov    %rbx,%rdi
  call   <mem_free@plt>
  lea    0x10(%rsp),%rbx
  lea    D299(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_cpy@plt>
  lea    0xc(%rsp),%rdx
  lea    D45(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_split_big@plt>
  mov    %rax,%rbx
  cmpl   $0x1,0xc(%rsp)
  jne    L356
L249:
  mov    (%rbx),%rsi
  lea    D299(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L199
L458:
  mov    %rbx,%rdi
  call   <mem_free@plt>
  lea    0x10(%rsp),%rbx
  lea    D269(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_cpy@plt>
  lea    0xc(%rsp),%rdx
  lea    D360(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_split_big@plt>
  mov    %rax,%rbx
  cmpl   $0x2,0xc(%rsp)
  jne    L581
L374:
  mov    (%rbx),%rsi
  lea    D224(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L244
L457:
  mov    0x8(%rbx),%rsi
  lea    D88(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L371
L442:
  mov    %rbx,%rdi
  call   <mem_free@plt>
  lea    0x10(%rsp),%rbx
  lea    D224(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_cpy@plt>
  lea    0xc(%rsp),%rdx
  lea    D281(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_split_big@plt>
  mov    %rax,%rbx
  cmpl   $0x2,0xc(%rsp)
  jne    L240
L332:
  mov    (%rbx),%rsi
  lea    D180(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L299
L478:
  mov    0x8(%rbx),%rsi
  lea    D271(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L223
L174:
  mov    %rbx,%rdi
  call   <mem_free@plt>
  lea    0x10(%rsp),%rbx
  lea    D9(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_cpy@plt>
  lea    0xc(%rsp),%rdx
  lea    D360(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_split_big@plt>
  mov    %rax,%rbx
  cmpl   $0x2,0xc(%rsp)
  jne    L40
L8:
  mov    (%rbx),%rsi
  lea    D364(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L450
L268:
  mov    0x8(%rbx),%rsi
  lea    D97(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L531
L307:
  mov    %rbx,%rdi
  call   <mem_free@plt>
  lea    0x10(%rsp),%rbx
  lea    D35(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_cpy@plt>
  lea    0xc(%rsp),%rdx
  lea    D360(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_split_big@plt>
  mov    %rax,%rbx
  cmpl   $0x3,0xc(%rsp)
  jne    L559
L232:
  mov    (%rbx),%rsi
  lea    D82(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L306
L482:
  mov    0x8(%rbx),%rsi
  lea    D353(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L369
L228:
  mov    0x10(%rbx),%rsi
  lea    D97(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L252
L340:
  mov    %rbx,%rdi
  call   <mem_free@plt>
  lea    0x10(%rsp),%rbx
  lea    D287(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_cpy@plt>
  lea    0xc(%rsp),%rdx
  lea    D360(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_split_big@plt>
  mov    %rax,%rbx
  cmpl   $0x2,0xc(%rsp)
  jne    L565
L241:
  mov    (%rbx),%rsi
  lea    D206(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L574
L123:
  mov    0x8(%rbx),%rsi
  lea    D97(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L459
L83:
  mov    %rbx,%rdi
  call   <mem_free@plt>
  lea    0x10(%rsp),%rbx
  lea    D367(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_cpy@plt>
  lea    0xc(%rsp),%rdx
  lea    D360(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_split_big@plt>
  mov    %rax,%rbx
  cmpl   $0x1,0xc(%rsp)
  jne    L134
L545:
  mov    (%rbx),%rsi
  lea    D367(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L89
L66:
  mov    %rbx,%rdi
  call   <mem_free@plt>
  lea    0x10(%rsp),%rbx
  lea    D188(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_cpy@plt>
  lea    0xc(%rsp),%rdx
  lea    D360(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_split_big@plt>
  mov    %rax,%rbx
  cmpl   $0x1,0xc(%rsp)
  jne    L146
L509:
  mov    (%rbx),%rsi
  lea    D188(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L580
L320:
  mov    %rbx,%rdi
  call   <mem_free@plt>
  lea    0x10(%rsp),%rbx
  lea    D329(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_cpy@plt>
  lea    0xc(%rsp),%rdx
  lea    D360(%rip),%rsi
  mov    %rbx,%rdi
  call   <str_split_big@plt>
  mov    %rax,%rbx
  cmpl   $0x2,0xc(%rsp)
  jne    L401
L103:
  mov    (%rbx),%rsi
  lea    D82(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L456
L97:
  mov    0x8(%rbx),%rsi
  lea    D299(%rip),%rdi
  call   <str_cmp@plt>
  test   %rax,%rax
  jne    L250
L539:
  mov    %rbx,%rdi
  call   <mem_free@plt>
  mov    0x58(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L17
  add    $0x60,%rsp
  pop    %rbx
  ret
L556:
  mov    $0xde,%edi
  call   <fail_test@plt>
  jmp    L394
L184:
  mov    $0xe0,%edi
  call   <fail_test@plt>
  jmp    L344
L395:
  mov    $0xe2,%edi
  call   <fail_test@plt>
  jmp    L497
L503:
  mov    $0xe4,%edi
  call   <fail_test@plt>
  jmp    L57
L356:
  mov    $0xeb,%edi
  call   <fail_test@plt>
  jmp    L249
L199:
  mov    $0xed,%edi
  call   <fail_test@plt>
  jmp    L458
L581:
  mov    $0xf4,%edi
  call   <fail_test@plt>
  jmp    L374
L244:
  mov    $0xf6,%edi
  call   <fail_test@plt>
  jmp    L457
L371:
  mov    $0xf8,%edi
  call   <fail_test@plt>
  jmp    L442
L240:
  mov    $0xff,%edi
  call   <fail_test@plt>
  jmp    L332
L299:
  mov    $0x101,%edi
  call   <fail_test@plt>
  jmp    L478
L223:
  mov    $0x103,%edi
  call   <fail_test@plt>
  jmp    L174
L40:
  mov    $0x10a,%edi
  call   <fail_test@plt>
  jmp    L8
L450:
  mov    $0x10c,%edi
  call   <fail_test@plt>
  jmp    L268
L531:
  mov    $0x10e,%edi
  call   <fail_test@plt>
  jmp    L307
L559:
  mov    $0x115,%edi
  call   <fail_test@plt>
  jmp    L232
L306:
  mov    $0x117,%edi
  call   <fail_test@plt>
  jmp    L482
L369:
  mov    $0x119,%edi
  call   <fail_test@plt>
  jmp    L228
L252:
  mov    $0x11b,%edi
  call   <fail_test@plt>
  jmp    L340
L565:
  mov    $0x122,%edi
  call   <fail_test@plt>
  jmp    L241
L574:
  mov    $0x124,%edi
  call   <fail_test@plt>
  jmp    L123
L459:
  mov    $0x126,%edi
  call   <fail_test@plt>
  jmp    L83
L134:
  mov    $0x12d,%edi
  call   <fail_test@plt>
  jmp    L545
L89:
  mov    $0x12f,%edi
  call   <fail_test@plt>
  jmp    L66
L146:
  mov    $0x136,%edi
  call   <fail_test@plt>
  jmp    L509
L580:
  mov    $0x138,%edi
  call   <fail_test@plt>
  jmp    L320
L401:
  mov    $0x13f,%edi
  call   <fail_test@plt>
  jmp    L103
L456:
  mov    $0x141,%edi
  call   <fail_test@plt>
  jmp    L97
L250:
  mov    $0x143,%edi
  call   <fail_test@plt>
  jmp    L539
L17:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: tag: D146
data_type: string
name: disassemble_data
arguments: tag: D143
data_type: string
name: disassemble_data
arguments: tag: D138
data_type: string
name: disassemble_data
arguments: tag: D41
data_type: string
name: disassemble_data
arguments: tag: D299
data_type: string
name: disassemble_data
arguments: tag: D45
data_type: string
name: disassemble_data
arguments: tag: D269
data_type: string
name: disassemble_data
arguments: tag: D360
data_type: string
name: disassemble_data
arguments: tag: D224
data_type: string
name: disassemble_data
arguments: tag: D88
data_type: string
name: disassemble_data
arguments: tag: D281
data_type: string
name: disassemble_data
arguments: tag: D180
data_type: string
name: disassemble_data
arguments: tag: D271
data_type: string
name: disassemble_data
arguments: tag: D9
data_type: string
name: disassemble_data
arguments: tag: D364
data_type: string
name: disassemble_data
arguments: tag: D97
data_type: string
name: disassemble_data
arguments: tag: D35
data_type: string
name: disassemble_data
arguments: tag: D82
data_type: string
name: disassemble_data
arguments: tag: D353
data_type: string
name: disassemble_data
arguments: tag: D287
data_type: string
name: disassemble_data
arguments: tag: D206
data_type: string
name: disassemble_data
arguments: tag: D367
data_type: string
name: disassemble_data
arguments: tag: D188
data_type: string
name: disassemble_data
arguments: tag: D329
data_type: string

tool: D146: a`b`

tool: D143: `

tool: D138: a

tool: D41: b

tool: 

tool: D45: =

tool: D269: c:string,a:int

tool: D360: ,

tool: D224: c:string

tool: D88: a:int

tool: D281:  :	

tool: D180: c

tool: D271: string

tool: D9: hello world,123430

tool: D364: hello world

tool: D97: 123430

tool: D35: hello\\,world,123430

tool: D82: hello\\

tool: D353: world

tool: D287: hello\,world,123430

tool: D206: hello\,world

tool: D367: hello\

tool: D188: hello\,

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