user: 请从给定的汇编指令推导出C源代码：

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xc0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    $0x14,%esi
  mov    $0x1,%edi
  call   <vector@plt>
  mov    %rax,-0xa0(%rbp)
  mov    $0x14,%esi
  mov    $0x1,%edi
  call   <vector@plt>
  mov    %rax,-0x98(%rbp)
  mov    $0x14,%esi
  mov    $0x1,%edi
  call   <vector@plt>
  mov    %rax,-0x90(%rbp)
  mov    $0x14,%ecx
  mov    $0x1,%edx
  mov    $0x14,%esi
  mov    $0x1,%edi
  call   <matrix@plt>
  mov    %rax,-0x88(%rbp)
  mov    $0x14,%ecx
  mov    $0x1,%edx
  mov    $0x14,%esi
  mov    $0x1,%edi
  call   <matrix@plt>
  mov    %rax,-0x80(%rbp)
  mov    $0x14,%ecx
  mov    $0x1,%edx
  mov    $0x14,%esi
  mov    $0x1,%edi
  call   <matrix@plt>
  mov    %rax,-0x78(%rbp)
  mov    $0x14,%ecx
  mov    $0x1,%edx
  mov    $0x14,%esi
  mov    $0x1,%edi
  call   <matrix@plt>
  mov    %rax,-0x70(%rbp)
  lea    D97(%rip),%rax
  mov    %rax,%rsi
  lea    D147(%rip),%rax
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x68(%rbp)
  cmpq   $0x0,-0x68(%rbp)
  jne    L284
  lea    D17(%rip),%rax
  mov    %rax,%rdi
  call   <nrerror@plt>
  jmp    L284
L153:
  mov    -0x68(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  mov    -0x68(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  lea    -0xbc(%rbp),%rcx
  lea    -0xb8(%rbp),%rdx
  mov    -0x68(%rbp),%rax
  lea    D31(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    -0x68(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  movl   $0x1,-0xb0(%rbp)
  jmp    L223
L33:
  movl   $0x1,-0xac(%rbp)
  jmp    L210
L214:
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rax,%rdx
  mov    -0x68(%rbp),%rax
  lea    D6(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  addl   $0x1,-0xac(%rbp)
L210:
  mov    -0xb8(%rbp),%eax
  cmp    %eax,-0xac(%rbp)
  jle    L214
  addl   $0x1,-0xb0(%rbp)
L223:
  mov    -0xb8(%rbp),%eax
  cmp    %eax,-0xb0(%rbp)
  jle    L33
  mov    -0x68(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  movl   $0x1,-0xac(%rbp)
  jmp    L30
L0:
  movl   $0x1,-0xb0(%rbp)
  jmp    L88
L6:
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rax,%rdx
  mov    -0x68(%rbp),%rax
  lea    D6(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  addl   $0x1,-0xb0(%rbp)
L88:
  mov    -0xb8(%rbp),%eax
  cmp    %eax,-0xb0(%rbp)
  jle    L6
  addl   $0x1,-0xac(%rbp)
L30:
  mov    -0xbc(%rbp),%eax
  cmp    %eax,-0xac(%rbp)
  jle    L0
  movl   $0x1,-0xb0(%rbp)
  jmp    L87
L163:
  movl   $0x1,-0xac(%rbp)
  jmp    L26
L174:
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rax,%rdx
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x78(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    -0xac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0xac(%rbp)
L26:
  mov    -0xb8(%rbp),%eax
  cmp    %eax,-0xac(%rbp)
  jle    L174
  addl   $0x1,-0xb0(%rbp)
L87:
  mov    -0xb8(%rbp),%eax
  cmp    %eax,-0xb0(%rbp)
  jle    L163
  mov    -0xb8(%rbp),%edx
  mov    -0xb8(%rbp),%esi
  mov    -0x70(%rbp),%rdi
  mov    -0xa0(%rbp),%rcx
  mov    -0x78(%rbp),%rax
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <svdcmp@plt>
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0xa8(%rbp)
  movl   $0x1,-0xb0(%rbp)
  jmp    L324
L1:
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  comiss -0xa8(%rbp),%xmm0
  jbe    L75
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0xa8(%rbp)
L75:
  addl   $0x1,-0xb0(%rbp)
L324:
  mov    -0xb8(%rbp),%eax
  cmp    %eax,-0xb0(%rbp)
  jle    L1
  pxor   %xmm1,%xmm1
  cvtss2sd -0xa8(%rbp),%xmm1
  movsd  D19(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0xa4(%rbp)
  movl   $0x1,-0xb0(%rbp)
  jmp    L51
L331:
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  movss  -0xa4(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jbe    L119
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
L119:
  addl   $0x1,-0xb0(%rbp)
L51:
  mov    -0xb8(%rbp),%eax
  cmp    %eax,-0xb0(%rbp)
  jle    L331
  movl   $0x1,-0xac(%rbp)
  jmp    L228
L279:
  mov    -0xac(%rbp),%eax
  mov    %eax,%esi
  lea    D136(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x1,-0xb0(%rbp)
  jmp    L211
L65:
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rax,%rdx
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x90(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0xb0(%rbp)
L211:
  mov    -0xb8(%rbp),%eax
  cmp    %eax,-0xb0(%rbp)
  jle    L65
  mov    -0xb8(%rbp),%edi
  mov    -0xb8(%rbp),%ecx
  mov    -0x90(%rbp),%r8
  mov    -0x70(%rbp),%rdx
  mov    -0xa0(%rbp),%rsi
  mov    -0x78(%rbp),%rax
  sub    $0x8,%rsp
  push   -0x98(%rbp)
  mov    %r8,%r9
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <svbksb@plt>
  add    $0x10,%rsp
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x1,-0xb0(%rbp)
  jmp    L114
L261:
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm0,%xmm3
  movq   %xmm3,%rax
  movq   %rax,%xmm0
  lea    D144(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0xb0(%rbp)
L114:
  mov    -0xb8(%rbp),%eax
  cmp    %eax,-0xb0(%rbp)
  jle    L261
  lea    D70(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x1,-0xb0(%rbp)
  jmp    L68
L156:
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd %xmm0,%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  lea    D144(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0xb0(%rbp)
L68:
  mov    -0xb8(%rbp),%eax
  cmp    %eax,-0xb0(%rbp)
  jle    L156
  lea    D108(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x1,-0xb0(%rbp)
  jmp    L32
L312:
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  movl   $0x1,-0xb4(%rbp)
  jmp    L167
L34:
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xb4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    -0xb4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0xb4(%rbp)
L167:
  mov    -0xb8(%rbp),%eax
  cmp    %eax,-0xb4(%rbp)
  jle    L34
  addl   $0x1,-0xb0(%rbp)
L32:
  mov    -0xb8(%rbp),%eax
  cmp    %eax,-0xb0(%rbp)
  jle    L312
  movl   $0x1,-0xb0(%rbp)
  jmp    L48
L208:
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  pxor   %xmm5,%xmm5
  cvtss2sd %xmm0,%xmm5
  movq   %xmm5,%rax
  movq   %rax,%xmm0
  lea    D144(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0xb0(%rbp)
L48:
  mov    -0xb8(%rbp),%eax
  cmp    %eax,-0xb0(%rbp)
  jle    L208
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0xac(%rbp)
L228:
  mov    -0xbc(%rbp),%eax
  cmp    %eax,-0xac(%rbp)
  jle    L279
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D73(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
L284:
  mov    -0x68(%rbp),%rax
  mov    %rax,%rdi
  call   <feof@plt>
  test   %eax,%eax
  je     L153
  mov    -0x68(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    -0x70(%rbp),%rax
  mov    $0x14,%r8d
  mov    $0x1,%ecx
  mov    $0x14,%edx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <free_matrix@plt>
  mov    -0x78(%rbp),%rax
  mov    $0x14,%r8d
  mov    $0x1,%ecx
  mov    $0x14,%edx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <free_matrix@plt>
  mov    -0x80(%rbp),%rax
  mov    $0x14,%r8d
  mov    $0x1,%ecx
  mov    $0x14,%edx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <free_matrix@plt>
  mov    -0x88(%rbp),%rax
  mov    $0x14,%r8d
  mov    $0x1,%ecx
  mov    $0x14,%edx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <free_matrix@plt>
  mov    -0x90(%rbp),%rax
  mov    $0x14,%edx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <free_vector@plt>
  mov    -0x98(%rbp),%rax
  mov    $0x14,%edx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <free_vector@plt>
  mov    -0xa0(%rbp),%rax
  mov    $0x14,%edx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <free_vector@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L244
  call   <__stack_chk_fail@plt>
L244:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D97
type: string
name: parse_data
arguments: data_label: D147
type: string
name: parse_data
arguments: data_label: D17
type: string
name: parse_data
arguments: data_label: D31
type: string
name: parse_data
arguments: data_label: D6
type: string
name: parse_data
arguments: data_label: D19
type: byte[8]
name: parse_data
arguments: data_label: D136
type: string
name: parse_data
arguments: data_label: D66
type: string
name: parse_data
arguments: data_label: D144
type: string
name: parse_data
arguments: data_label: D70
type: string
name: parse_data
arguments: data_label: D108
type: string
name: parse_data
arguments: data_label: D22
type: string
name: parse_data
arguments: data_label: D73
type: string

tool: D97: r

tool: D147: matrx1.dat

tool: D17: Data file matrx1.dat not found


tool: D31: %d %d 

tool: D6: %f 

tool: {"D19": [0x8d,0xed,0xb5,0xa0,0xf7,0xc6,0xb0,0x3e]}

tool: D136: 
Vector number %2d


tool: D66:  solution vector is:

tool: D144: %12.6f

tool: D70: 
 original right-hand side vector:

tool: D108: 
 (matrix)*(sol'n vector):

tool: D22: ***********************************

tool: D73: press RETURN for next problem

assistant: ```c
int main(void) {
  int j, k, l, m, n;
  float wmax, wmin, *w, *x, *c;
  float **a, **b, **u, **v;
  char dummy[80];
  FILE *fp;
  w = vector(1, 20);
  x = vector(1, 20);
  c = vector(1, 20);
  a = matrix(1, 20, 1, 20);
  b = matrix(1, 20, 1, 20);
  u = matrix(1, 20, 1, 20);
  v = matrix(1, 20, 1, 20);
  if ((fp = fopen("matrx1.dat", "r")) == NULL)
    nrerror("Data file matrx1.dat not found\n");
  while (!feof(fp)) {
    fgets(dummy, 80, fp);
    fgets(dummy, 80, fp);
    fscanf(fp, "%d %d ", &n, &m);
    fgets(dummy, 80, fp);
    for (k = 1; k <= n; k++)
      for (l = 1; l <= n; l++)
        fscanf(fp, "%f ", &a[k][l]);
    fgets(dummy, 80, fp);
    for (l = 1; l <= m; l++)
      for (k = 1; k <= n; k++)
        fscanf(fp, "%f ", &b[k][l]);
    for (k = 1; k <= n; k++)
      for (l = 1; l <= n; l++)
        u[k][l] = a[k][l];
    svdcmp(u, n, n, w, v);
    wmax = 0.0;
    for (k = 1; k <= n; k++)
      if (w[k] > wmax)
        wmax = w[k];
    wmin = wmax * (1.0e-6);
    for (k = 1; k <= n; k++)
      if (w[k] < wmin)
        w[k] = 0.0;
    for (l = 1; l <= m; l++) {
      printf("\nVector number %2d\n", l);
      for (k = 1; k <= n; k++)
        c[k] = b[k][l];
      svbksb(u, w, v, n, n, c, x);
      printf(" solution vector is:\n");
      for (k = 1; k <= n; k++)
        printf("%12.6f", x[k]);
      printf("\n original right-hand side vector:\n");
      for (k = 1; k <= n; k++)
        printf("%12.6f", c[k]);
      printf("\n (matrix)*(sol'n vector):\n");
      for (k = 1; k <= n; k++) {
        c[k] = 0.0;
        for (j = 1; j <= n; j++)
          c[k] += a[k][j] * x[j];
      }
      for (k = 1; k <= n; k++)
        printf("%12.6f", c[k]);
      printf("\n");
    }
    printf("***********************************\n");
    printf("press RETURN for next problem\n");
    (void)getchar();
  }
  fclose(fp);
  free_matrix(v, 1, 20, 1, 20);
  free_matrix(u, 1, 20, 1, 20);
  free_matrix(b, 1, 20, 1, 20);
  free_matrix(a, 1, 20, 1, 20);
  free_vector(c, 1, 20);
  free_vector(x, 1, 20);
  free_vector(w, 1, 20);
  return 0;
}
```