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

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  mov    $0x0,%r15d
  mov    $0x1,%r13d
  lea    D12(%rip),%r14
  jmp    L17
L72:
  add    $0x1,%r13d
  add    $0x3,%r15
  cmp    $0x4,%r13d
  je     L115
L17:
  mov    %rsp,%r12
  lea    (%r12,%r15,4),%rbp
  mov    $0x0,%ebx
L109:
  add    $0x1,%ebx
  mov    %ebx,%edx
  mov    %r13d,%esi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %rbp,%rsi
  lea    D0(%rip),%rdi
  call   <scanf@plt>
  add    $0x4,%rbp
  cmp    $0x3,%ebx
  jne    L109
  jmp    L72
L115:
  lea    D62(%rip),%rdi
  call   <puts@plt>
  lea    0x24(%r12),%r13
  mov    %r12,%rbx
  lea    D5(%rip),%rbp
L79:
  mov    (%rbx),%esi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    0x4(%rbx),%esi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    0x8(%rbx),%esi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  add    $0xc,%rbx
  cmp    %r13,%rbx
  jne    L79
  lea    D67(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%ebp
  lea    D32(%rip),%r14
  lea    D5(%rip),%r13
  jmp    L50
L113:
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L78
L21:
  mov    $0xa,%edi
  call   <putchar@plt>
  add    $0x1,%ebp
  add    $0xc,%r12
  cmp    $0x3,%ebp
  je     L42
L50:
  mov    $0x0,%ebx
L85:
  cmp    %ebx,%ebp
  je     L113
  mov    (%r12,%rbx,4),%esi
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L78:
  add    $0x1,%rbx
  cmp    $0x3,%rbx
  jne    L85
  jmp    L21
L42:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L31
  mov    $0x0,%eax
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L31:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_label: D12
data_type: string
name: retrieve_data
arguments: data_label: D0
data_type: string
name: retrieve_data
arguments: data_label: D62
data_type: string
name: retrieve_data
arguments: data_label: D5
data_type: string
name: retrieve_data
arguments: data_label: D67
data_type: string
name: retrieve_data
arguments: data_label: D32
data_type: string

tool: D12: Digite ELEMENTO da linha %d, coluna %d da matriz: 

tool: D0: %d

tool: D62: Matriz

tool: D5: %d	

tool: D67: 

Matriz menos a diagonal principal


tool: D32: -	

assistant: ```c
int main() {
  int lin, col, tab;
  int mat[3][3];
  for (lin = 0; lin < 3; lin++) {
    for (col = 0; col < 3; col++) {
      printf("Digite ELEMENTO da linha %d, coluna %d da matriz: ", lin + 1, col + 1);
      scanf("%d", &mat[lin][col]);
    }
  }
  printf("Matriz\n");
  for (lin = 0; lin < 3; lin++) {
    for (col = 0; col < 3; col++) {
      printf("%d\t", mat[lin][col]);
    }
    printf("\n");
  }
  printf("\n\nMatriz menos a diagonal principal\n\n");
  for (lin = 0; lin < 3; lin++) {
    for (col = 0; col < 3; col++) {
      if (lin != col)
        printf("%d\t", mat[lin][col]);
      else
        printf("-\t");
    }
    printf("\n");
  }
  return 0;
}
```