user: 下面的汇编指令对应的C源代码是什么:

```asm
<fparam>:
  endbr64
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  mov    %edx,%ebp
  push   %rbx
  mov    %rdi,%rbx
  mov    $0x40,%edi
  call   <malloc@plt>
  movzbl (%rbx),%edx
  mov    %rax,%r8
  cmp    $0x20,%dl
  je     L301
  cmp    $0x9,%dl
  jne    L136
L301:
  mov    $0x1,%ecx
  nopl   0x0(%rax,%rax,1)
L259:
  movzbl (%rbx,%rcx,1),%edx
  movslq %ecx,%rsi
  mov    %rcx,%rax
  lea    0x1(%rcx),%rcx
  cmp    $0x20,%dl
  je     L259
  cmp    $0x9,%dl
  je     L259
  cmp    $0x3f,%esi
  jg     L290
L195:
  cmp    %esi,%ebp
  jle    L94
  lea    0x1(%rsi),%eax
  lea    -0x1(%r8),%rdi
  cltq
  sub    %rsi,%rdi
  jmp    L43
  nop
L113:
  movzbl (%rbx,%rax,1),%edx
  mov    %eax,%ecx
  cmp    $0x3f,%eax
  jg     L176
  lea    0x1(%rax),%rsi
  cmp    %eax,%ebp
  jle    L176
  cmp    $0x20,%dl
  je     L176
  mov    %rsi,%rax
L43:
  mov    %dl,(%rdi,%rax,1)
  test   %dl,%dl
  jne    L113
  pop    %rbx
  mov    %r8,%rax
  pop    %rbp
  movb   $0x0,(%r12)
  pop    %r12
  ret
  nop
L176:
  cmp    $0x9,%dl
  sete   %sil
  cmp    $0x20,%dl
  sete   %dl
  or     %esi,%edx
  test   %dl,%dl
  je     L17
  lea    0x1(%rcx),%edx
  movslq %edx,%rdx
  nopl   (%rax)
L80:
  movzbl (%rbx,%rdx,1),%ecx
  mov    %edx,%esi
  mov    %rdx,%rax
  add    $0x1,%rdx
  cmp    $0x20,%cl
  je     L80
  cmp    $0x9,%cl
  je     L80
L290:
  cmp    %esi,%ebp
  jle    L94
  movslq %esi,%rax
  mov    %ebp,%r9d
  mov    %r12,%rcx
  lea    0x1(%rbx,%rax,1),%rdi
  sub    %esi,%r9d
  sub    %rdi,%rcx
  lea    -0x1(%r9),%edx
  cmp    $0xe,%rcx
  jbe    L131
  cmp    $0x6,%edx
  jbe    L131
  cmp    $0xe,%edx
  jbe    L11
  mov    %r9d,%ecx
  lea    (%rbx,%rax,1),%rdx
  xor    %eax,%eax
  shr    $0x4,%ecx
  shl    $0x4,%rcx
  nopl   0x0(%rax,%rax,1)
L250:
  movdqu (%rdx,%rax,1),%xmm0
  movups %xmm0,(%r12,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rcx
  jne    L250
  mov    %r9d,%ecx
  and    $0xfffffff0,%ecx
  mov    %ecx,%edi
  add    %ecx,%esi
  cmp    %r9d,%ecx
  je     L322
  mov    %r9d,%r10d
  sub    %ecx,%r10d
  lea    -0x1(%r10),%eax
  cmp    $0x6,%eax
  jbe    L116
L38:
  mov    (%rdx,%rcx,1),%rax
  mov    %rax,(%r12,%rcx,1)
  mov    %r10d,%eax
  and    $0xfffffff8,%eax
  add    %eax,%esi
  add    %eax,%edi
  cmp    %eax,%r10d
  je     L322
L116:
  movslq %esi,%rax
  movzbl (%rbx,%rax,1),%edx
  movslq %edi,%rax
  mov    %dl,(%r12,%rax,1)
  lea    0x1(%rsi),%eax
  lea    0x1(%rdi),%edx
  cmp    %eax,%ebp
  jle    L322
  cltq
  movslq %edx,%rdx
  movzbl (%rbx,%rax,1),%eax
  mov    %al,(%r12,%rdx,1)
  lea    0x2(%rsi),%eax
  lea    0x2(%rdi),%edx
  cmp    %eax,%ebp
  jle    L322
  cltq
  movslq %edx,%rdx
  movzbl (%rbx,%rax,1),%eax
  mov    %al,(%r12,%rdx,1)
  lea    0x3(%rsi),%eax
  lea    0x3(%rdi),%edx
  cmp    %eax,%ebp
  jle    L322
  cltq
  movslq %edx,%rdx
  movzbl (%rbx,%rax,1),%eax
  mov    %al,(%r12,%rdx,1)
  lea    0x4(%rsi),%eax
  lea    0x4(%rdi),%edx
  cmp    %eax,%ebp
  jle    L322
  cltq
  movslq %edx,%rdx
  movzbl (%rbx,%rax,1),%eax
  mov    %al,(%r12,%rdx,1)
  lea    0x5(%rsi),%eax
  lea    0x5(%rdi),%edx
  cmp    %eax,%ebp
  jle    L322
  cltq
  movslq %edx,%rdx
  add    $0x6,%esi
  add    $0x6,%edi
  movzbl (%rbx,%rax,1),%eax
  mov    %al,(%r12,%rdx,1)
  cmp    %esi,%ebp
  jle    L322
  movslq %esi,%rsi
  movslq %edi,%rdi
  movzbl (%rbx,%rsi,1),%eax
  mov    %al,(%r12,%rdi,1)
L322:
  movslq %r9d,%r9
  movslq %ebp,%rax
  add    %r9,%r12
L94:
  movb   $0x0,(%r12)
  movb   $0x0,(%r8,%rax,1)
  mov    %r8,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L136:
  xor    %eax,%eax
  xor    %esi,%esi
  jmp    L195
L11:
  mov    %r9d,%r10d
  xor    %ecx,%ecx
  lea    (%rbx,%rax,1),%rdx
  xor    %edi,%edi
  jmp    L38
  nopl   0x0(%rax)
L131:
  mov    %r12,%rcx
  sub    %rax,%rcx
  cs nopw 0x0(%rax,%rax,1)
L328:
  movzbl (%rbx,%rax,1),%edx
  mov    %dl,(%rcx,%rax,1)
  add    $0x1,%rax
  cmp    %eax,%ebp
  jg     L328
  jmp    L322
L17:
  mov    %ecx,%esi
  jmp    L290
```

assistant: ```c
char *fparam(const char *str, char *args, int strleng) {
  int i = 0;
  int alen = strleng;
  char *b = (char *)malloc(64);
  int k = 0;
  for (; str[i] == ' ' || str[i] == '\t'; i++)
    ;
  for (; i < 64 && str[i] != ' ' && i < alen; i++, k++) {
    b[k] = str[i];
    if (str[i] == '\0') {
      *args = '\0';
      return b;
    }
  }
  int j = 0;
  for (; str[i] == ' ' || str[i] == '\t'; i++)
    ;
  for (; i < alen; i++, j++)
    args[j] = str[i];
  args[j] = 0;
  b[i] = 0;
  return b;
}
```