user: 请将以下的汇编代码转换成C语言代码:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x4e0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x1a0(%rbp),%rdx
  mov    $0x0,%eax
  mov    $0x32,%ecx
  mov    %rdx,%rdi
  rep stos %rax,%es:(%rdi)
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D51(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D128(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D112(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x4d8(%rbp),%rdx
  lea    -0x4dc(%rbp),%rax
  mov    %rax,%rsi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    D137(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x4d0(%rbp),%rdx
  lea    -0x4d4(%rbp),%rax
  mov    %rax,%rsi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0x4d8(%rbp),%edx
  mov    -0x4d4(%rbp),%eax
  cmp    %eax,%edx
  je     L186
  lea    D122(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%edi
  call   <exit@plt>
L186:
  lea    D157(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x4cc(%rbp)
  jmp    L266
L27:
  movl   $0x0,-0x4c8(%rbp)
  jmp    L31
L2:
  lea    -0x4c0(%rbp),%rcx
  mov    -0x4c8(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x4cc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rsi,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  mov    %rax,%rsi
  lea    D172(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  addl   $0x1,-0x4c8(%rbp)
L31:
  mov    -0x4d8(%rbp),%eax
  cmp    %eax,-0x4c8(%rbp)
  jl     L2
  addl   $0x1,-0x4cc(%rbp)
L266:
  mov    -0x4dc(%rbp),%eax
  cmp    %eax,-0x4cc(%rbp)
  jl     L27
  lea    D154(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x4cc(%rbp)
  jmp    L198
L236:
  movl   $0x0,-0x4c8(%rbp)
  jmp    L7
L21:
  lea    -0x330(%rbp),%rcx
  mov    -0x4cc(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x4c8(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rsi,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  mov    %rax,%rsi
  lea    D172(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  addl   $0x1,-0x4c8(%rbp)
L7:
  mov    -0x4d4(%rbp),%eax
  cmp    %eax,-0x4c8(%rbp)
  jl     L21
  addl   $0x1,-0x4cc(%rbp)
L198:
  mov    -0x4d0(%rbp),%eax
  cmp    %eax,-0x4cc(%rbp)
  jl     L236
  movl   $0x0,-0x4cc(%rbp)
  jmp    L244
L170:
  movl   $0x0,-0x4c8(%rbp)
  jmp    L185
L165:
  movl   $0x0,-0x4c4(%rbp)
  jmp    L211
L258:
  mov    -0x4c8(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x4cc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x1a0(%rbp,%rax,4),%esi
  mov    -0x4c4(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x4cc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x4c0(%rbp,%rax,4),%ecx
  mov    -0x4c8(%rbp),%eax
  movslq %eax,%rdi
  mov    -0x4c4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rdi,%rax
  mov    -0x330(%rbp,%rax,4),%eax
  imul   %ecx,%eax
  lea    (%rsi,%rax,1),%ecx
  mov    -0x4c8(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x4cc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rsi,%rax
  mov    %ecx,-0x1a0(%rbp,%rax,4)
  addl   $0x1,-0x4c4(%rbp)
L211:
  mov    -0x4d8(%rbp),%eax
  cmp    %eax,-0x4c4(%rbp)
  jl     L258
  addl   $0x1,-0x4c8(%rbp)
L185:
  mov    -0x4d0(%rbp),%eax
  cmp    %eax,-0x4c8(%rbp)
  jl     L165
  addl   $0x1,-0x4cc(%rbp)
L244:
  mov    -0x4dc(%rbp),%eax
  cmp    %eax,-0x4cc(%rbp)
  jl     L170
  lea    D145(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x4cc(%rbp)
  jmp    L226
L124:
  movl   $0x0,-0x4c8(%rbp)
  jmp    L116
L163:
  mov    -0x4c8(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x4cc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x4c0(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D82(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x4c8(%rbp)
L116:
  mov    -0x4d8(%rbp),%eax
  cmp    %eax,-0x4c8(%rbp)
  jl     L163
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x4cc(%rbp)
L226:
  mov    -0x4dc(%rbp),%eax
  cmp    %eax,-0x4cc(%rbp)
  jl     L124
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D33(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x4cc(%rbp)
  jmp    L277
L41:
  movl   $0x0,-0x4c8(%rbp)
  jmp    L63
L85:
  mov    -0x4c8(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x4cc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x330(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D82(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x4c8(%rbp)
L63:
  mov    -0x4d0(%rbp),%eax
  cmp    %eax,-0x4c8(%rbp)
  jl     L85
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x4cc(%rbp)
L277:
  mov    -0x4d4(%rbp),%eax
  cmp    %eax,-0x4cc(%rbp)
  jl     L41
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x4cc(%rbp)
  jmp    L248
L77:
  movl   $0x0,-0x4c8(%rbp)
  jmp    L175
L81:
  mov    -0x4c8(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x4cc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x1a0(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D82(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x4c8(%rbp)
L175:
  mov    -0x4d0(%rbp),%eax
  cmp    %eax,-0x4c8(%rbp)
  jl     L81
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x4cc(%rbp)
L248:
  mov    -0x4dc(%rbp),%eax
  cmp    %eax,-0x4cc(%rbp)
  jl     L77
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L137
  call   <__stack_chk_fail@plt>
L137:
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D65
type: string
name: read_data
arguments: tag: D51
type: string
name: read_data
arguments: tag: D128
type: string
name: read_data
arguments: tag: D112
type: string
name: read_data
arguments: tag: D28
type: string
name: read_data
arguments: tag: D137
type: string
name: read_data
arguments: tag: D122
type: string
name: read_data
arguments: tag: D157
type: string
name: read_data
arguments: tag: D172
type: string
name: read_data
arguments: tag: D154
type: string
name: read_data
arguments: tag: D145
type: string
name: read_data
arguments: tag: D82
type: string
name: read_data
arguments: tag: D33
type: string
name: read_data
arguments: tag: D67
type: string

tool: D65: 
*********************************************************

tool: D51: 
*	PROGRAM TO IMPLEMENT MATRIX MULIPLICATION	*

tool: D128: *********************************************************

tool: D112: 
Enter the order of Matrix1

tool: D28: %d%d

tool: D137: 
Enter the order of Matrix2

tool: D122: 
Matrix Multiplication not possible

tool: D157: 
Enter the elements of Matrix 1 in row major order

tool: D172: %d

tool: D154: 
Enter the elements of Matrix 2 in column major order

tool: D145: 
Matrix 1

tool: D82: %d	

tool: D33: 
Matrix 2

tool: D67: 
The Product matrix is is 

assistant: ```c
int main(void) {
  int iM, iN, iP, iQ, i, j, k, iaMat1[10][10], iaMat2[10][10];
  int iaProd[10][10] = {0};
  printf("\n*********************************************************");
  printf("\n*\tPROGRAM TO IMPLEMENT MATRIX MULIPLICATION\t*\n");
  printf("*********************************************************");
  printf("\nEnter the order of Matrix1\n");
  scanf("%d%d", &iM, &iN);
  printf("\nEnter the order of Matrix2\n");
  scanf("%d%d", &iP, &iQ);
  if (iN != iP) {
    printf("\nMatrix Multiplication not possible\n");
    exit(0);
  }
  printf("\nEnter the elements of Matrix 1 in row major order\n");
  for (i = 0; i < iM; i++)
    for (j = 0; j < iN; j++)
      scanf("%d", &iaMat1[i][j]);
  printf("\nEnter the elements of Matrix 2 in column major order\n");
  for (i = 0; i < iQ; i++)
    for (j = 0; j < iP; j++)
      scanf("%d", &iaMat2[j][i]);
  for (i = 0; i < iM; i++) {
    for (j = 0; j < iQ; j++) {
      for (k = 0; k < iN; k++) {
        iaProd[i][j] += iaMat1[i][k] * iaMat2[k][j];
      }
    }
  }
  printf("\nMatrix 1\n");
  for (i = 0; i < iM; i++) {
    for (j = 0; j < iN; j++) {
      printf("%d\t", iaMat1[i][j]);
    }
    printf("\n");
  }
  printf("\n");
  printf("\nMatrix 2\n");
  for (i = 0; i < iP; i++) {
    for (j = 0; j < iQ; j++) {
      printf("%d\t", iaMat2[i][j]);
    }
    printf("\n");
  }
  printf("\n");
  printf("\nThe Product matrix is is \n");
  for (i = 0; i < iM; i++) {
    for (j = 0; j < iQ; j++) {
      printf("%d\t", iaProd[i][j]);
    }
    printf("\n");
  }
  printf("\n");
  return 0;
}
```