user: 这段汇编代码用C语言表示是什么样的？

```asm
<median>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x48(%rbp)
  mov    %esi,-0x4c(%rbp)
  mov    -0x48(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x48(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x20(%rbp)
  movl   $0x1,-0x2c(%rbp)
  jmp    L19
L97:
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  cmp    %rax,-0x28(%rbp)
  jle    L124
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x28(%rbp)
L124:
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  cmp    %rax,-0x20(%rbp)
  jge    L67
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x20(%rbp)
L67:
  addl   $0x1,-0x2c(%rbp)
L19:
  mov    -0x2c(%rbp),%eax
  cmp    -0x4c(%rbp),%eax
  jb     L97
L61:
  movl   $0x0,-0x38(%rbp)
  movl   $0x0,-0x34(%rbp)
  movl   $0x0,-0x30(%rbp)
  mov    -0x28(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%rdx
  shr    $0x3f,%rdx
  add    %rdx,%rax
  sar    %rax
  mov    %rax,-0x8(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  movl   $0x0,-0x2c(%rbp)
  jmp    L176
L40:
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  cmp    %rax,-0x8(%rbp)
  jle    L30
  addl   $0x1,-0x38(%rbp)
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  cmp    %rax,-0x18(%rbp)
  jge    L134
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x18(%rbp)
  jmp    L134
L30:
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  cmp    %rax,-0x8(%rbp)
  jge    L96
  addl   $0x1,-0x34(%rbp)
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  cmp    %rax,-0x10(%rbp)
  jle    L134
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L134
L96:
  addl   $0x1,-0x30(%rbp)
L134:
  addl   $0x1,-0x2c(%rbp)
L176:
  mov    -0x2c(%rbp),%eax
  cmp    -0x4c(%rbp),%eax
  jb     L40
  mov    -0x4c(%rbp),%eax
  add    $0x1,%eax
  shr    %eax
  cmp    %eax,-0x38(%rbp)
  ja     L115
  mov    -0x4c(%rbp),%eax
  add    $0x1,%eax
  shr    %eax
  cmp    %eax,-0x34(%rbp)
  jbe    L111
L115:
  mov    -0x38(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jbe    L24
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  jmp    L61
L24:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  jmp    L61
L111:
  mov    -0x4c(%rbp),%eax
  add    $0x1,%eax
  shr    %eax
  cmp    %eax,-0x38(%rbp)
  jb     L73
  mov    -0x18(%rbp),%rax
  jmp    L107
L73:
  mov    -0x38(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %eax,%edx
  mov    -0x4c(%rbp),%eax
  add    $0x1,%eax
  shr    %eax
  cmp    %eax,%edx
  jb     L5
  mov    -0x8(%rbp),%rax
  jmp    L107
L5:
  mov    -0x10(%rbp),%rax
L107:
  pop    %rbp
  ret
```

assistant: ```c
long long median(long long array[], unsigned int count) {
  long long min;
  long long max;
  long long guess;
  long long maxltguess;
  long long mingtguess;
  unsigned int less;
  unsigned int greater;
  unsigned int equal;
  unsigned int i;
  min = array[0];
  max = array[0];
  for (i = 1; i < count; i++) {
    if (array[i] < min) {
      min = array[i];
    }
    if (array[i] > max) {
      max = array[i];
    }
  }
  while (1) {
    less = 0;
    greater = 0;
    equal = 0;
    guess = (min + max) / 2;
    maxltguess = min;
    mingtguess = max;
    for (i = 0; i < count; i++) {
      if (array[i] < guess) {
        less++;
        if (array[i] > maxltguess) {
          maxltguess = array[i];
        }
      } else if (array[i] > guess) {
        greater++;
        if (array[i] < mingtguess) {
          mingtguess = array[i];
        }
      } else {
        equal++;
      }
    }
    if (less <= (count + 1) / 2 && greater <= (count + 1) / 2) {
      break;
    } else if (less > greater) {
      max = maxltguess;
    } else {
      min = mingtguess;
    }
  }
  if (less >= (count + 1) / 2) {
    return (maxltguess);
  } else if (less + equal >= (count + 1) / 2) {
    return (guess);
  } else {
    return (mingtguess);
  }
}
```