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

```asm
<ordenDescendente>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xfe0,%rsp
  mov    %rdi,-0xfd8(%rbp)
  mov    %esi,-0xfdc(%rbp)
  mov    %edx,-0xfe0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  cmpl   $0x0,-0xfdc(%rbp)
  jle    L108
  lea    D132(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpl   $0x4,-0xfe0(%rbp)
  ja     L11
  mov    -0xfe0(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D12(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D12(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D114(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L11
  lea    D72(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L11
  lea    D8(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L11
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L11
  lea    D34(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  nop
L11:
  lea    D140(%rip),%rax
  mov    %rax,%rsi
  lea    D122(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D59(%rip),%rax
  mov    %rax,%rsi
  lea    D122(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D133(%rip),%rax
  mov    %rax,%rsi
  lea    D122(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D66(%rip),%rax
  mov    %rax,%rsi
  lea    D122(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D18(%rip),%rax
  mov    %rax,%rsi
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0xfc0(%rbp)
  movl   $0x0,-0xfbc(%rbp)
  jmp    L1
L142:
  mov    -0xfbc(%rbp),%eax
  cltq
  movl   $0xffffffff,-0xfb0(%rbp,%rax,4)
  addl   $0x1,-0xfbc(%rbp)
L1:
  mov    -0xfbc(%rbp),%eax
  cmp    -0xfdc(%rbp),%eax
  jl     L142
  movl   $0x0,-0xfb8(%rbp)
  jmp    L37
L125:
  movl   $0x0,-0xfc4(%rbp)
  movl   $0x0,-0xfc0(%rbp)
  movl   $0x0,-0xfb4(%rbp)
  jmp    L109
L140:
  mov    -0xfb4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0xfd8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xfe0(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  cmp    %eax,-0xfc4(%rbp)
  jge    L71
  mov    -0xfb4(%rbp),%eax
  cltq
  mov    -0xfb0(%rbp,%rax,4),%eax
  cmp    $0xffffffff,%eax
  jne    L71
  mov    -0xfb4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rdx
  mov    -0xfd8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xfe0(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  mov    %eax,-0xfc4(%rbp)
  mov    -0xfb4(%rbp),%eax
  mov    %eax,-0xfc0(%rbp)
L71:
  addl   $0x1,-0xfb4(%rbp)
L109:
  mov    -0xfb4(%rbp),%eax
  cmp    -0xfdc(%rbp),%eax
  jl     L140
  mov    -0xfc0(%rbp),%eax
  cltq
  movl   $0x1,-0xfb0(%rbp,%rax,4)
  mov    -0xfc0(%rbp),%edx
  mov    -0xfd8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <imprimirFilaDeMatriz@plt>
  addl   $0x1,-0xfb8(%rbp)
L37:
  mov    -0xfb8(%rbp),%eax
  cmp    -0xfdc(%rbp),%eax
  jl     L125
  jmp    L34
L108:
  lea    D137(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L34:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L0
  call   <__stack_chk_fail@plt>
L0:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D132
type: string
name: unpack_data
arguments: data_tag: D114
type: string
name: unpack_data
arguments: data_tag: D72
type: string
name: unpack_data
arguments: data_tag: D8
type: string
name: unpack_data
arguments: data_tag: D86
type: string
name: unpack_data
arguments: data_tag: D34
type: string
name: unpack_data
arguments: data_tag: D140
type: string
name: unpack_data
arguments: data_tag: D122
type: string
name: unpack_data
arguments: data_tag: D59
type: string
name: unpack_data
arguments: data_tag: D133
type: string
name: unpack_data
arguments: data_tag: D66
type: string
name: unpack_data
arguments: data_tag: D18
type: string
name: unpack_data
arguments: data_tag: D158
type: string
name: unpack_data
arguments: data_tag: D137
type: string

tool: D132: Orden Ascendente Por 

tool: D114: ID: 

tool: D72: Edad:

tool: D8: Pacientes:

tool: D86: Horario:

tool: D34: Piso:

tool: D140: ID

tool: D122: %15s

tool: D59: Edad

tool: D133: Pacientes

tool: D66: Horario

tool: D18: Piso

tool: D158: %15s


tool: D137: Matriz Vacia

assistant: ```c
void ordenDescendente(int control[1000][5], int registros, int columna) {
  if (registros > 0) {
    printf("Orden Ascendente Por ");
    switch (columna) {
    case 0:
      printf("ID: \n");
      break;
    case 1:
      printf("Edad:\n");
      break;
    case 2:
      printf("Pacientes:\n");
      break;
    case 3:
      printf("Horario:\n");
      break;
    case 4:
      printf("Piso:\n");
      break;
    }
    printf("%15s", "ID");
    printf("%15s", "Edad");
    printf("%15s", "Pacientes");
    printf("%15s", "Horario");
    printf("%15s\n", "Piso");
    int maxValor;
    int minPosicion = 0;
    int posicionesVisitadas[1000];
    for (int i = 0; i < registros; i++) {
      posicionesVisitadas[i] = -1;
    }
    for (int c = 0; c < registros; c++) {
      maxValor = 0;
      minPosicion = 0;
      for (int i = 0; i < registros; i++) {
        if (control[i][columna] > maxValor && posicionesVisitadas[i] == -1) {
          maxValor = control[i][columna];
          minPosicion = i;
        }
      }
      posicionesVisitadas[minPosicion] = 1;
      imprimirFilaDeMatriz(control, minPosicion);
    }
  } else {
    printf("Matriz Vacia\n");
  }
}
```