user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<extract_args>:
  endbr64
  push   %r15
  mov    %rdi,%r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %esi,%ebx
  sub    $0x38,%rsp
  mov    %rdx,0x10(%rsp)
  mov    %rcx,0x18(%rsp)
  mov    %r8,0x8(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  call   <strlen@plt>
  cmp    %eax,%ebx
  jge    L369
  mov    %eax,%r13d
  mov    %ebx,%eax
  xor    %ebp,%ebp
  mov    %r15,%rbx
  lea    0x24(%rsp),%r14
  lea    D19(%rip),%r12
  mov    %eax,%r15d
  jmp    L338
  xchg   %ax,%ax
L187:
  cmp    $0x1,%eax
  je     L361
  cmp    %r15d,%r13d
  jle    L369
L338:
  xor    %eax,%eax
  mov    %r14,%rcx
  mov    %r15d,%edx
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <find_char@plt>
  test   %eax,%eax
  jne    L187
  movslq %ebp,%rax
  mov    0x24(%rsp),%edx
  lea    (%rax,%rax,4),%rcx
  lea    (%rax,%rcx,2),%rax
  add    0x8(%rsp),%rax
  cmp    %edx,%r15d
  jge    L485
  mov    %edx,%r8d
  movslq %r15d,%rcx
  sub    %r15d,%r8d
  lea    0x1(%rbx,%rcx,1),%rsi
  lea    -0x1(%r8),%r9d
  cmp    $0x6,%r9d
  jbe    L530
  mov    %rax,%r9
  sub    %rsi,%r9
  cmp    $0x6,%r9
  jbe    L530
  lea    (%rbx,%rcx,1),%rsi
  mov    %r8d,%r9d
  mov    (%rsi),%rcx
  shr    $0x3,%r9d
  mov    %rcx,(%rax)
  cmp    $0x1,%r9d
  je     L524
  xor    %ecx,%ecx
L407:
  mov    0x8(%rsi,%rcx,8),%rdi
  mov    %rdi,0x8(%rax,%rcx,8)
  add    $0x1,%rcx
  lea    0x1(%rcx),%edi
  cmp    %r9d,%edi
  jb     L407
L524:
  mov    %r8d,%esi
  and    $0xfffffff8,%esi
  lea    (%r15,%rsi,1),%ecx
  cmp    %esi,%r8d
  je     L485
  movslq %ecx,%r8
  movslq %esi,%rsi
  movzbl (%rbx,%r8,1),%r8d
  mov    %r8b,(%rax,%rsi,1)
  lea    0x1(%rcx),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%r8
  sub    %r15d,%esi
  movzbl (%rbx,%r8,1),%r8d
  movslq %esi,%rsi
  mov    %r8b,(%rax,%rsi,1)
  lea    0x2(%rcx),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%r8
  sub    %r15d,%esi
  movzbl (%rbx,%r8,1),%r8d
  movslq %esi,%rsi
  mov    %r8b,(%rax,%rsi,1)
  lea    0x3(%rcx),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%r8
  sub    %r15d,%esi
  movzbl (%rbx,%r8,1),%r8d
  movslq %esi,%rsi
  mov    %r8b,(%rax,%rsi,1)
  lea    0x4(%rcx),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%r8
  sub    %r15d,%esi
  movzbl (%rbx,%r8,1),%r8d
  movslq %esi,%rsi
  mov    %r8b,(%rax,%rsi,1)
  lea    0x5(%rcx),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%r8
  sub    %r15d,%esi
  add    $0x6,%ecx
  movzbl (%rbx,%r8,1),%r8d
  movslq %esi,%rsi
  mov    %r8b,(%rax,%rsi,1)
  cmp    %ecx,%edx
  jle    L485
  movslq %ecx,%rsi
  sub    %r15d,%ecx
  movzbl (%rbx,%rsi,1),%esi
  movslq %ecx,%rcx
  mov    %sil,(%rax,%rcx,1)
L485:
  mov    %edx,%ecx
  add    $0x1,%ebp
  sub    %r15d,%ecx
  lea    0x1(%rdx),%r15d
  movslq %ecx,%rcx
  movb   $0x0,(%rax,%rcx,1)
  cmp    %r15d,%r13d
  jg     L338
L369:
  xor    %r9d,%r9d
L549:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L219
  add    $0x38,%rsp
  mov    %r9d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L361:
  mov    %eax,%r9d
  mov    %r15d,%eax
  movslq %ebp,%rdx
  mov    %rbx,%r15
  mov    %eax,%ebx
  mov    0x24(%rsp),%eax
  lea    (%rdx,%rdx,4),%rcx
  lea    (%rdx,%rcx,2),%rdx
  add    0x8(%rsp),%rdx
  cmp    %ebx,%eax
  jle    L592
  movslq %ebx,%rcx
  mov    %rdx,%r11
  mov    %eax,%r10d
  lea    0x1(%r15,%rcx,1),%rsi
  sub    %ebx,%r10d
  sub    %rsi,%r11
  cmp    $0x6,%r11
  jbe    L272
  lea    -0x1(%r10),%r11d
  cmp    $0x6,%r11d
  jbe    L272
  lea    (%r15,%rcx,1),%rsi
  mov    %r10d,%r11d
  mov    (%rsi),%rcx
  shr    $0x3,%r11d
  mov    %rcx,(%rdx)
  cmp    $0x1,%r11d
  je     L114
  xor    %ecx,%ecx
L387:
  mov    0x8(%rsi,%rcx,8),%rdi
  mov    %rdi,0x8(%rdx,%rcx,8)
  add    $0x1,%rcx
  lea    0x1(%rcx),%edi
  cmp    %edi,%r11d
  ja     L387
L114:
  mov    %r10d,%esi
  and    $0xfffffff8,%esi
  lea    (%rbx,%rsi,1),%ecx
  cmp    %esi,%r10d
  je     L592
  movslq %ecx,%r10
  movslq %esi,%rsi
  movzbl (%r15,%r10,1),%r10d
  mov    %r10b,(%rdx,%rsi,1)
  lea    0x1(%rcx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%r10
  sub    %ebx,%esi
  movzbl (%r15,%r10,1),%r10d
  movslq %esi,%rsi
  mov    %r10b,(%rdx,%rsi,1)
  lea    0x2(%rcx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%r10
  sub    %ebx,%esi
  movzbl (%r15,%r10,1),%r10d
  movslq %esi,%rsi
  mov    %r10b,(%rdx,%rsi,1)
  lea    0x3(%rcx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%r10
  sub    %ebx,%esi
  movzbl (%r15,%r10,1),%r10d
  movslq %esi,%rsi
  mov    %r10b,(%rdx,%rsi,1)
  lea    0x4(%rcx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%r10
  sub    %ebx,%esi
  movzbl (%r15,%r10,1),%r10d
  movslq %esi,%rsi
  mov    %r10b,(%rdx,%rsi,1)
  lea    0x5(%rcx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%r10
  sub    %ebx,%esi
  add    $0x6,%ecx
  movzbl (%r15,%r10,1),%r10d
  movslq %esi,%rsi
  mov    %r10b,(%rdx,%rsi,1)
  cmp    %ecx,%eax
  jle    L592
  movslq %ecx,%rsi
  sub    %ebx,%ecx
  movzbl (%r15,%rsi,1),%esi
  movslq %ecx,%rcx
  mov    %sil,(%rdx,%rcx,1)
L592:
  mov    %eax,%ecx
  mov    %r15,%rdi
  lea    D3(%rip),%rsi
  add    $0x1,%ebp
  sub    %ebx,%ecx
  mov    %r9d,0x8(%rsp)
  movslq %ecx,%rcx
  movb   $0x0,(%rdx,%rcx,1)
  lea    0x1(%rax),%edx
  mov    %r14,%rcx
  xor    %eax,%eax
  call   <find_char@plt>
  mov    0x24(%rsp),%eax
  mov    0x10(%rsp),%rdi
  mov    0x8(%rsp),%r9d
  add    $0x1,%eax
  mov    %eax,(%rdi)
  mov    0x18(%rsp),%rax
  mov    %ebp,(%rax)
  jmp    L549
  nopl   0x0(%rax,%rax,1)
L530:
  movzbl (%rbx,%rcx,1),%r8d
  mov    %r8b,(%rax)
  lea    0x1(%r15),%r8d
  cmp    %r8d,%edx
  jle    L485
  movzbl (%rsi),%esi
  mov    %sil,0x1(%rax)
  lea    0x2(%r15),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%rsi
  movzbl (%rbx,%rsi,1),%esi
  mov    %sil,0x2(%rax)
  lea    0x3(%r15),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%rsi
  movzbl (%rbx,%rsi,1),%esi
  mov    %sil,0x3(%rax)
  lea    0x4(%r15),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%rsi
  movzbl (%rbx,%rsi,1),%esi
  mov    %sil,0x4(%rax)
  lea    0x5(%r15),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%rsi
  movzbl (%rbx,%rsi,1),%esi
  mov    %sil,0x5(%rax)
  lea    0x6(%r15),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%rsi
  movzbl (%rbx,%rsi,1),%esi
  mov    %sil,0x6(%rax)
  lea    0x7(%r15),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%rsi
  movzbl (%rbx,%rsi,1),%esi
  mov    %sil,0x7(%rax)
  lea    0x8(%r15),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%rsi
  movzbl (%rbx,%rsi,1),%esi
  mov    %sil,0x8(%rax)
  lea    0x9(%r15),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%rsi
  movzbl (%rbx,%rsi,1),%esi
  mov    %sil,0x9(%rax)
  lea    0xa(%r15),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%rsi
  movzbl (%rbx,%rsi,1),%esi
  mov    %sil,0xa(%rax)
  lea    0xb(%r15),%esi
  cmp    %esi,%edx
  jle    L485
  movslq %esi,%rsi
  movzbl (%rbx,%rsi,1),%esi
  mov    %sil,0xb(%rax)
  lea    0xc(%r15),%esi
  cmp    %esi,%edx
  jle    L485
  mov    %rax,%r8
  movslq %esi,%rsi
  sub    %rcx,%r8
L194:
  movzbl (%rbx,%rsi,1),%ecx
  mov    %cl,(%r8,%rsi,1)
  add    $0x1,%rsi
  cmp    %esi,%edx
  jg     L194
  jmp    L485
L272:
  movzbl (%r15,%rcx,1),%r10d
  mov    %r10b,(%rdx)
  lea    0x1(%rbx),%r10d
  cmp    %eax,%r10d
  jge    L592
  movzbl (%rsi),%esi
  mov    %sil,0x1(%rdx)
  lea    0x2(%rbx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%rsi
  movzbl (%r15,%rsi,1),%esi
  mov    %sil,0x2(%rdx)
  lea    0x3(%rbx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%rsi
  movzbl (%r15,%rsi,1),%esi
  mov    %sil,0x3(%rdx)
  lea    0x4(%rbx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%rsi
  movzbl (%r15,%rsi,1),%esi
  mov    %sil,0x4(%rdx)
  lea    0x5(%rbx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%rsi
  movzbl (%r15,%rsi,1),%esi
  mov    %sil,0x5(%rdx)
  lea    0x6(%rbx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%rsi
  movzbl (%r15,%rsi,1),%esi
  mov    %sil,0x6(%rdx)
  lea    0x7(%rbx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%rsi
  movzbl (%r15,%rsi,1),%esi
  mov    %sil,0x7(%rdx)
  lea    0x8(%rbx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%rsi
  movzbl (%r15,%rsi,1),%esi
  mov    %sil,0x8(%rdx)
  lea    0x9(%rbx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%rsi
  movzbl (%r15,%rsi,1),%esi
  mov    %sil,0x9(%rdx)
  lea    0xa(%rbx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%rsi
  movzbl (%r15,%rsi,1),%esi
  mov    %sil,0xa(%rdx)
  lea    0xb(%rbx),%esi
  cmp    %esi,%eax
  jle    L592
  movslq %esi,%rsi
  movzbl (%r15,%rsi,1),%esi
  mov    %sil,0xb(%rdx)
  lea    0xc(%rbx),%esi
  cmp    %esi,%eax
  jle    L592
  mov    %rdx,%r10
  movslq %esi,%rsi
  sub    %rcx,%r10
L497:
  movzbl (%r15,%rsi,1),%ecx
  mov    %cl,(%r10,%rsi,1)
  add    $0x1,%rsi
  cmp    %esi,%eax
  jg     L497
  jmp    L592
L219:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_tag: D19
datatype: string
name: retrieve_data
arguments: data_tag: D3
datatype: string

tool: D19: ,)

tool: D3: =

assistant: ```c
int extract_args(s1, i0, ie, narg, args)
char args[20][10 + 1];
int *narg, *ie, i0;
char *s1;
{
  int k, i = i0, n = strlen(s1);
  int type, na = 0, i1;
  while (i < n) {
    type = find_char(s1, ",)", i, &i1);
    if (type == 0) {
      for (k = i; k < i1; k++)
        args[na][k - i] = s1[k];
      args[na][i1 - i] = 0;
      na++;
      i = i1 + 1;
    }
    if (type == 1) {
      for (k = i; k < i1; k++)
        args[na][k - i] = s1[k];
      args[na][i1 - i] = 0;
      na++;
      i = i1 + 1;
      find_char(s1, "=", i, &i1);
      *ie = i1 + 1;
      *narg = na;
      return 1;
    }
  }
  return (0);
}
```