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

```asm
<swapem64>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  movl   $0xff,-0x40(%rbp)
  mov    -0x40(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x3c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x38(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x34(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x30(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x2c(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,-0x24(%rbp)
  movl   $0x0,-0x44(%rbp)
  jmp    L17
L2:
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  and    -0x40(%rbp),%eax
  shl    $0x18,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  and    -0x3c(%rbp),%eax
  sar    $0x8,%eax
  and    -0x40(%rbp),%eax
  shl    $0x10,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  and    -0x38(%rbp),%eax
  sar    $0x10,%eax
  and    -0x40(%rbp),%eax
  shl    $0x8,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  and    -0x34(%rbp),%eax
  sar    $0x18,%eax
  and    -0x40(%rbp),%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  and    -0x30(%rbp),%eax
  mov    $0x20,%edx
  mov    %edx,%ecx
  sar    %cl,%eax
  and    -0x40(%rbp),%eax
  mov    $0x38,%edx
  mov    %edx,%ecx
  shl    %cl,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  and    -0x2c(%rbp),%eax
  mov    $0x28,%edx
  mov    %edx,%ecx
  sar    %cl,%eax
  and    -0x40(%rbp),%eax
  mov    $0x30,%edx
  mov    %edx,%ecx
  shl    %cl,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  and    -0x28(%rbp),%eax
  mov    $0x30,%edx
  mov    %edx,%ecx
  sar    %cl,%eax
  and    -0x40(%rbp),%eax
  mov    $0x28,%edx
  mov    %edx,%ecx
  shl    %cl,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  and    -0x24(%rbp),%eax
  mov    $0x38,%edx
  mov    %edx,%ecx
  sar    %cl,%eax
  and    -0x40(%rbp),%eax
  mov    $0x20,%edx
  mov    %edx,%ecx
  shl    %cl,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x20(%rbp),%eax
  or     -0x1c(%rbp),%eax
  or     -0x18(%rbp),%eax
  or     -0x14(%rbp),%eax
  or     -0x10(%rbp),%eax
  or     -0xc(%rbp),%eax
  or     -0x8(%rbp),%eax
  mov    -0x44(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x58(%rbp),%rdx
  add    %rcx,%rdx
  or     -0x4(%rbp),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x44(%rbp)
L17:
  mov    -0x60(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x44(%rbp)
  jl     L2
  nop
  nop
  pop    %rbp
  ret
```

assistant: ```c
void swapem64(INJ, NUM) int INJ[1000];
int *NUM;
{
  int t1, t2, t3, t4, t5, t6, t7, t8;
  int c1, c2, c3, c4, c5, c6, c7, c8;
  int k, i;
  c1 = 0xff;
  c2 = c1 << 8;
  c3 = c2 << 8;
  c4 = c3 << 8;
  c5 = c4 << 8;
  c6 = c5 << 8;
  c7 = c6 << 8;
  c8 = c7 << 8;
  for (i = 0; i < *NUM; i++) {
    t1 = ((INJ[i] & c1) & c1) << 24;
    t2 = (((INJ[i] & c2) >> 8) & c1) << 16;
    t3 = (((INJ[i] & c3) >> 16) & c1) << 8;
    t4 = (((INJ[i] & c4) >> 24) & c1);
    t5 = (((INJ[i] & c5) >> 32) & c1) << 56;
    t6 = (((INJ[i] & c6) >> 40) & c1) << 48;
    t7 = (((INJ[i] & c7) >> 48) & c1) << 40;
    t8 = (((INJ[i] & c8) >> 56) & c1) << 32;
    INJ[i] = t1 | t2 | t3 | t4 | t5 | t6 | t7 | t8;
  }
}
```