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

```asm
<test_dobldobl_solution_strings>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %edi,%r12d
  lea    D15(%rip),%rdi
  push   %rbx
  mov    %esi,%ebx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x38(%rbp)
  xor    %eax,%eax
  call   <puts@plt>
  mov    %r12d,%esi
  lea    D3(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    -0x48(%rbp),%r12
  lea    D57(%rip),%rdi
  mov    %r12,%rsi
  call   <scanf@plt>
  xor    %ecx,%ecx
  lea    -0x44(%rbp),%rdx
  mov    %r12,%rsi
  mov    $0x46,%edi
  call   <_ada_use_solcon@plt>
  mov    -0x44(%rbp),%edx
  mov    -0x48(%rbp),%esi
  xor    %eax,%eax
  lea    D56(%rip),%rdi
  call   <printf@plt>
  movslq -0x44(%rbp),%rax
  mov    %rsp,%rsi
  mov    %rax,%rdx
  lea    0xf(,%rax,4),%rax
  mov    %rax,%rcx
  and    $0xfffffffffffff000,%rax
  sub    %rax,%rsi
  and    $0xfffffffffffffff0,%rcx
  cmp    %rsi,%rsp
  je     L116
L224:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rsi,%rsp
  jne    L224
L116:
  and    $0xfff,%ecx
  sub    %rcx,%rsp
  test   %rcx,%rcx
  jne    L182
L208:
  lea    0x1(%rdx),%eax
  mov    %rsp,%rsi
  mov    %rsp,%r14
  cltq
  add    $0xf,%rax
  mov    %rax,%rcx
  and    $0xfffffffffffff000,%rax
  sub    %rax,%rsi
  and    $0xfffffffffffffff0,%rcx
  cmp    %rsi,%rsp
  je     L163
L6:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rsi,%rsp
  jne    L6
L163:
  and    $0xfff,%ecx
  sub    %rcx,%rsp
  test   %rcx,%rcx
  jne    L95
L232:
  movd   -0x48(%rbp),%xmm0
  movd   %edx,%xmm7
  lea    -0x40(%rbp),%r12
  xor    %ecx,%ecx
  mov    %r14,%rdx
  mov    %r12,%rsi
  mov    $0x47,%edi
  mov    %rsp,%r13
  punpckldq %xmm7,%xmm0
  movq   %xmm0,-0x40(%rbp)
  call   <_ada_use_solcon@plt>
  movslq -0x44(%rbp),%rcx
  test   %ecx,%ecx
  jle    L229
  lea    -0x1(%rcx),%eax
  cmp    $0xe,%eax
  jbe    L89
  mov    %ecx,%esi
  movdqa D28(%rip),%xmm3
  mov    %r14,%rax
  mov    %rsp,%rdx
  shr    $0x4,%esi
  shl    $0x6,%rsi
  add    %r14,%rsi
  cs nopw 0x0(%rax,%rax,1)
L210:
  movdqu (%rax),%xmm0
  movdqu 0x10(%rax),%xmm5
  add    $0x40,%rax
  add    $0x10,%rdx
  movdqu -0x10(%rax),%xmm7
  movdqa %xmm0,%xmm1
  punpcklwd %xmm5,%xmm0
  punpckhwd %xmm5,%xmm1
  movdqa %xmm0,%xmm2
  punpckhwd %xmm1,%xmm2
  punpcklwd %xmm1,%xmm0
  movdqu -0x20(%rax),%xmm1
  punpcklwd %xmm2,%xmm0
  movdqa %xmm1,%xmm2
  punpcklwd %xmm7,%xmm1
  pand   %xmm3,%xmm0
  punpckhwd %xmm7,%xmm2
  movdqa %xmm1,%xmm4
  punpckhwd %xmm2,%xmm4
  punpcklwd %xmm2,%xmm1
  punpcklwd %xmm4,%xmm1
  pand   %xmm3,%xmm1
  packuswb %xmm1,%xmm0
  movups %xmm0,-0x10(%rdx)
  cmp    %rax,%rsi
  jne    L210
  mov    %ecx,%eax
  and    $0xfffffff0,%eax
  test   $0xf,%cl
  je     L229
L231:
  movslq %eax,%rsi
  lea    (%r14,%rsi,4),%rdx
  mov    (%rdx),%edi
  mov    %dil,0x0(%r13,%rsi,1)
  lea    0x1(%rax),%esi
  cmp    %esi,%ecx
  jle    L229
  mov    0x4(%rdx),%edi
  movslq %esi,%rsi
  mov    %dil,0x0(%r13,%rsi,1)
  lea    0x2(%rax),%esi
  cmp    %esi,%ecx
  jle    L229
  mov    0x8(%rdx),%edi
  movslq %esi,%rsi
  mov    %dil,0x0(%r13,%rsi,1)
  lea    0x3(%rax),%esi
  cmp    %esi,%ecx
  jle    L229
  mov    0xc(%rdx),%edi
  movslq %esi,%rsi
  mov    %dil,0x0(%r13,%rsi,1)
  lea    0x4(%rax),%esi
  cmp    %esi,%ecx
  jle    L229
  mov    0x10(%rdx),%edi
  movslq %esi,%rsi
  mov    %dil,0x0(%r13,%rsi,1)
  lea    0x5(%rax),%esi
  cmp    %esi,%ecx
  jle    L229
  mov    0x14(%rdx),%edi
  movslq %esi,%rsi
  mov    %dil,0x0(%r13,%rsi,1)
  lea    0x6(%rax),%esi
  cmp    %esi,%ecx
  jle    L229
  mov    0x18(%rdx),%edi
  movslq %esi,%rsi
  mov    %dil,0x0(%r13,%rsi,1)
  lea    0x7(%rax),%esi
  cmp    %esi,%ecx
  jle    L229
  mov    0x1c(%rdx),%edi
  movslq %esi,%rsi
  mov    %dil,0x0(%r13,%rsi,1)
  lea    0x8(%rax),%esi
  cmp    %esi,%ecx
  jle    L229
  mov    0x20(%rdx),%edi
  movslq %esi,%rsi
  mov    %dil,0x0(%r13,%rsi,1)
  lea    0x9(%rax),%esi
  cmp    %esi,%ecx
  jle    L229
  mov    0x24(%rdx),%edi
  movslq %esi,%rsi
  mov    %dil,0x0(%r13,%rsi,1)
  lea    0xa(%rax),%esi
  cmp    %esi,%ecx
  jle    L229
  mov    0x28(%rdx),%edi
  movslq %esi,%rsi
  mov    %dil,0x0(%r13,%rsi,1)
  lea    0xb(%rax),%esi
  cmp    %esi,%ecx
  jle    L229
  mov    0x2c(%rdx),%edi
  movslq %esi,%rsi
  mov    %dil,0x0(%r13,%rsi,1)
  lea    0xc(%rax),%esi
  cmp    %esi,%ecx
  jle    L229
  mov    0x30(%rdx),%edi
  movslq %esi,%rsi
  mov    %dil,0x0(%r13,%rsi,1)
  lea    0xd(%rax),%esi
  cmp    %esi,%ecx
  jle    L229
  mov    0x34(%rdx),%edi
  movslq %esi,%rsi
  add    $0xe,%eax
  mov    %dil,0x0(%r13,%rsi,1)
  cmp    %eax,%ecx
  jle    L229
  mov    0x38(%rdx),%edx
  cltq
  mov    %dl,0x0(%r13,%rax,1)
  nopl   0x0(%rax,%rax,1)
L229:
  mov    -0x48(%rbp),%esi
  mov    %r13,%rdx
  lea    D36(%rip),%rdi
  xor    %eax,%eax
  movb   $0x0,0x0(%r13,%rcx,1)
  xor    %r15d,%r15d
  call   <printf@plt>
  movd   -0x44(%rbp),%xmm6
  mov    %r15,%rcx
  mov    %r14,%rdx
  movd   %ebx,%xmm0
  mov    %r12,%rsi
  mov    $0x4e,%edi
  punpckldq %xmm6,%xmm0
  movq   %xmm0,-0x40(%rbp)
  call   <_ada_use_solcon@plt>
  mov    -0x48(%rbp),%esi
  lea    D50(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r15,%rcx
  mov    %r14,%rdx
  mov    %r12,%rsi
  mov    $0x29,%edi
  call   <_ada_use_solcon@plt>
  mov    -0x38(%rbp),%rax
  sub    %fs:0x28,%rax
  jne    L150
  lea    -0x28(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
  nopl   0x0(%rax)
L182:
  orq    $0x0,-0x8(%rsp,%rcx,1)
  jmp    L208
L89:
  xor    %eax,%eax
  jmp    L231
L95:
  orq    $0x0,-0x8(%rsp,%rcx,1)
  jmp    L232
L150:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: data_label: D15
datatype: string
name: read_data
arguments: data_label: D3
datatype: string
name: read_data
arguments: data_label: D57
datatype: string
name: read_data
arguments: data_label: D56
datatype: string
name: read_data
arguments: data_label: D28
datatype: byte[16]
name: read_data
arguments: data_label: D36
datatype: string
name: read_data
arguments: data_label: D50
datatype: string

tool: D15: 
Testing strings of solutions ... 


tool: D3: Give index of solution ( in [1,%d] ) : 

tool: D57: %d

tool: D56: -> number of characters in solution %d : %d


tool: {"D28": [0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00]}

tool: D36: the solution %d :
%s


tool: D50: the container after appending solution %d :


assistant: ```c
void test_dobldobl_solution_strings(int len, int nvar) {
  int k, n, fail;
  double *c;
  printf("\nTesting strings of solutions ... \n\n");
  printf("Give index of solution ( in [1,%d] ) : ", len);
  scanf("%d", &k);
  fail = _ada_use_solcon(70, &k, &n, c);
  printf("-> number of characters in solution %d : %d\n", k, n);
  {
    int i, a[2];
    int v[n];
    char s[n + 1];
    a[0] = k;
    a[1] = n;
    fail = _ada_use_solcon(71, a, v, c);
    for (i = 0; i < n; i++)
      s[i] = (char)v[i];
    s[n] = '\0';
    printf("the solution %d :\n%s\n", k, s);
    a[0] = nvar;
    a[1] = n;
    fail = _ada_use_solcon(78, a, v, c);
    printf("the container after appending solution %d :\n", k);
    fail = _ada_use_solcon(41, a, v, c);
  }
}
```