user: 下面的汇编指令对应的C源代码是什么：

```asm
<main>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x1b0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x1a8(%rsp)
  xor    %eax,%eax
  lea    D48(%rip),%rdi
  call   <printf@plt>
  lea    0x8(%rsp),%rsi
  lea    D93(%rip),%rdi
  call   <scanf@plt>
  lea    D11(%rip),%rdi
  call   <puts@plt>
  cmpl   $0x0,0x8(%rsp)
  jle    L76
  lea    0x10(%rsp),%rbp
  mov    $0x0,%ebx
  lea    D93(%rip),%r12
L12:
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <scanf@plt>
  add    $0x1,%ebx
  add    $0x4,%rbp
  cmp    %ebx,0x8(%rsp)
  jg     L12
L76:
  lea    D7(%rip),%rdi
  call   <puts@plt>
  lea    D69(%rip),%rdi
  call   <puts@plt>
  lea    0xc(%rsp),%rsi
  lea    D93(%rip),%rdi
  call   <scanf@plt>
  mov    0xc(%rsp),%edi
  lea    -0x1(%rdi),%eax
  cmp    $0x1,%eax
  ja     L68
  mov    0x8(%rsp),%esi
  cmp    $0x1,%esi
  jle    L86
  lea    0x10(%rsp),%r9
  lea    -0x1(%rsi),%r11d
  mov    $0x0,%r8d
  jmp    L54
L11:
  movslq %ecx,%r10
  mov    0x4(%rdx),%ebx
  cmp    %ebx,0x10(%rsp,%r10,4)
  cmovg  %eax,%ecx
L74:
  add    $0x1,%eax
  add    $0x4,%rdx
  cmp    %esi,%eax
  je     L126
L48:
  cmp    $0x1,%edi
  je     L11
  movslq %ecx,%r10
  mov    0x4(%rdx),%ebx
  cmp    %ebx,0x10(%rsp,%r10,4)
  cmovl  %eax,%ecx
  jmp    L74
L126:
  movslq %ecx,%rax
  mov    0x10(%rsp,%rax,4),%eax
  mov    (%r9),%edx
  cmp    %edx,%eax
  je     L120
  add    %edx,%eax
  mov    %eax,(%r9)
  movslq %ecx,%rcx
  sub    0x10(%rsp,%rcx,4),%eax
  mov    %eax,0x10(%rsp,%rcx,4)
  sub    %eax,(%r9)
L120:
  add    $0x4,%r9
  cmp    %r11d,%r8d
  je     L86
L54:
  mov    %r8d,%ecx
  add    $0x1,%r8d
  cmp    %esi,%r8d
  jge    L126
  mov    %r9,%rdx
  mov    %r8d,%eax
  jmp    L48
L68:
  lea    D60(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L86:
  lea    D71(%rip),%rdi
  call   <puts@plt>
  cmpl   $0x0,0x8(%rsp)
  jle    L14
  mov    $0x0,%ebx
  lea    D74(%rip),%rbp
L133:
  mov    0x10(%rsp,%rbx,4),%esi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x1,%rbx
  cmp    %ebx,0x8(%rsp)
  jg     L133
L14:
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    0x1a8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L89
  mov    $0x0,%eax
  add    $0x1b0,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L89:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D48
type_infered: string
name: disassemble_data
arguments: label: D93
type_infered: string
name: disassemble_data
arguments: label: D11
type_infered: string
name: disassemble_data
arguments: label: D7
type_infered: string
name: disassemble_data
arguments: label: D69
type_infered: string
name: disassemble_data
arguments: label: D60
type_infered: string
name: disassemble_data
arguments: label: D71
type_infered: string
name: disassemble_data
arguments: label: D74
type_infered: string

tool: D48: Enter the number of elements in the array: 

tool: D93: %d

tool: D11: Enter the array elements:

tool: D7: Enter the order of sorting:

tool: D69: 1. Ascending order
2. Descending order

tool: D60: Invalid input!

tool: D71: Array after sorting:

tool: D74: %d	

assistant: ```c
int main(void) {
  int arr[100];
  int num;
  int min;
  int i;
  int j;
  int order;
  printf("Enter the number of elements in the array: ");
  scanf("%d", &num);
  printf("Enter the array elements:\n");
  for (i = 0; i < num; i++) {
    scanf("%d", &arr[i]);
  }
  printf("Enter the order of sorting:\n");
  printf("1. Ascending order\n2. Descending order\n");
  scanf("%d", &order);
  if ((order == 1) || (order == 2)) {
    for (i = 0; i < (num - 1); i++) {
      min = i;
      for (j = (i + 1); j < (num); j++) {
        if ((order == 1) && (arr[min] > arr[j])) {
          min = j;
        }
        if ((order == 2) && (arr[min] < arr[j])) {
          min = j;
        }
      }
      if (arr[min] != arr[i]) {
        arr[i] = arr[i] + arr[min];
        arr[min] = arr[i] - arr[min];
        arr[i] = arr[i] - arr[min];
        ;
      }
    }
  } else {
    printf("Invalid input!\n");
    exit(1);
  }
  printf("Array after sorting:\n");
  for (i = 0; i < num; i++) {
    printf("%d\t", arr[i]);
  }
  printf("\n");
  return 0;
}
```