user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<SHA512_finish>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x38(%rbp),%rax
  and    $0x7f,%eax
  shr    $0x3,%rax
  mov    %eax,-0x10(%rbp)
  mov    -0x38(%rbp),%rax
  and    $0x7,%eax
  shl    $0x3,%eax
  mov    %eax,-0xc(%rbp)
  movl   $0x0,-0x14(%rbp)
  jmp    L108
L52:
  mov    -0x14(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  shl    $0x18,%rax
  mov    %rax,%rdx
  mov    -0x14(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x8(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  shl    $0x8,%rax
  and    $0xff0000,%eax
  or     %rax,%rdx
  mov    -0x14(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x8(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  shr    $0x8,%rax
  and    $0xff00,%eax
  or     %rax,%rdx
  mov    -0x14(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x8(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  shr    $0x18,%rax
  or     %rdx,%rax
  shl    $0x20,%rax
  mov    %rax,%rcx
  mov    -0x14(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  shl    $0x18,%rax
  mov    %rax,%rdx
  mov    -0x14(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rsi
  mov    -0x8(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%rax
  shl    $0x8,%rax
  and    $0xff0000,%eax
  or     %rax,%rdx
  mov    -0x14(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rsi
  mov    -0x8(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%rax
  shr    $0x8,%rax
  and    $0xff00,%eax
  or     %rax,%rdx
  mov    -0x14(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rsi
  mov    -0x8(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%rax
  shr    $0x18,%rax
  or     %rax,%rdx
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rsi
  mov    -0x30(%rbp),%rax
  add    %rsi,%rax
  or     %rcx,%rdx
  mov    %rdx,(%rax)
  addl   $0x1,-0x14(%rbp)
L108:
  mov    -0x14(%rbp),%eax
  cmp    -0x10(%rbp),%eax
  jle    L52
  cmpl   $0x0,-0xc(%rbp)
  jne    L11
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movabs $0x8000000000000000,%rdi
  mov    %rdi,(%rax)
  jmp    L98
L11:
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    $0x40,%eax
  sub    -0xc(%rbp),%eax
  mov    $0xffffffffffffffff,%rsi
  mov    %eax,%ecx
  shl    %cl,%rsi
  mov    %rsi,%rax
  mov    %rdx,%rsi
  and    %rax,%rsi
  mov    -0xc(%rbp),%eax
  movabs $0x8000000000000000,%rdx
  mov    %eax,%ecx
  shr    %cl,%rdx
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  or     %rsi,%rdx
  mov    %rdx,(%rax)
L98:
  addl   $0x1,-0x10(%rbp)
  cmpl   $0xe,-0x10(%rbp)
  jle    L116
  mov    -0x10(%rbp),%eax
  mov    %eax,-0x14(%rbp)
  jmp    L118
L84:
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movq   $0x0,(%rax)
  addl   $0x1,-0x14(%rbp)
L118:
  cmpl   $0xf,-0x14(%rbp)
  jle    L84
  movl   $0x10,-0x14(%rbp)
  jmp    L115
L75:
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x10(%rax),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  ror    $0x13,%rax
  mov    %rax,%rdx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x10(%rax),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  rol    $0x3,%rax
  xor    %rax,%rdx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x10(%rax),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  shr    $0x6,%rax
  xor    %rax,%rdx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x38(%rax),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  add    %rax,%rdx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x78(%rax),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  ror    %rax
  mov    %rax,%rcx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x78(%rax),%rsi
  mov    -0x30(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%rax
  ror    $0x8,%rax
  xor    %rax,%rcx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x78(%rax),%rsi
  mov    -0x30(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%rax
  shr    $0x7,%rax
  xor    %rcx,%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x80(%rax),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rsi
  mov    -0x30(%rbp),%rax
  add    %rsi,%rax
  add    %rcx,%rdx
  mov    %rdx,(%rax)
  addl   $0x1,-0x14(%rbp)
L115:
  cmpl   $0x4f,-0x14(%rbp)
  jle    L75
  mov    -0x30(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <SHA512_transform@plt>
  movl   $0x0,-0x10(%rbp)
L116:
  mov    -0x10(%rbp),%eax
  mov    %eax,-0x14(%rbp)
  jmp    L128
L1:
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movq   $0x0,(%rax)
  addl   $0x1,-0x14(%rbp)
L128:
  cmpl   $0xd,-0x14(%rbp)
  jle    L1
  mov    -0x30(%rbp),%rax
  add    $0x70,%rax
  mov    -0x38(%rbp),%rdx
  shr    $0x3d,%rdx
  mov    %rdx,(%rax)
  mov    -0x30(%rbp),%rax
  add    $0x78,%rax
  mov    -0x38(%rbp),%rdx
  shl    $0x3,%rdx
  mov    %rdx,(%rax)
  movl   $0x10,-0x14(%rbp)
  jmp    L91
L69:
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x10(%rax),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  ror    $0x13,%rax
  mov    %rax,%rdx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x10(%rax),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  rol    $0x3,%rax
  xor    %rax,%rdx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x10(%rax),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  shr    $0x6,%rax
  xor    %rax,%rdx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x38(%rax),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  add    %rax,%rdx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x78(%rax),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  ror    %rax
  mov    %rax,%rcx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x78(%rax),%rsi
  mov    -0x30(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%rax
  ror    $0x8,%rax
  xor    %rax,%rcx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x78(%rax),%rsi
  mov    -0x30(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%rax
  shr    $0x7,%rax
  xor    %rcx,%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x80(%rax),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rsi
  mov    -0x30(%rbp),%rax
  add    %rsi,%rax
  add    %rcx,%rdx
  mov    %rdx,(%rax)
  addl   $0x1,-0x14(%rbp)
L91:
  cmpl   $0x4f,-0x14(%rbp)
  jle    L69
  mov    -0x30(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <SHA512_transform@plt>
  nop
  leave
  ret
```

assistant: ```c
void SHA512_finish(unsigned long long H[], unsigned long long W[], unsigned long long FileLen) {
  unsigned long *Buf = (unsigned long *)W;
  int t;
  int Witi = (FileLen % 128) / 8;
  int amari = (FileLen % 8) * 8;
  for (t = 0; t <= Witi; t++)
    W[t] = (unsigned long long)(Buf[t * 2] << 24 | Buf[t * 2] << 8 & 0xFF0000 | Buf[t * 2] >> 8 & 0xFF00 | Buf[t * 2] >> 24) << 32 | (unsigned long long)(Buf[t * 2 + 1] << 24 | Buf[t * 2 + 1] << 8 & 0xFF0000 | Buf[t * 2 + 1] >> 8 & 0xFF00 | Buf[t * 2 + 1] >> 24);
  if (amari == 0)
    W[Witi] = 0x8000000000000000ULL;
  else
    W[Witi] = W[Witi] & 0xFFFFFFFFFFFFFFFFULL << (64 - amari) | 0x8000000000000000ULL >> amari;
  Witi++;
  if (Witi >= 15) {
    for (t = Witi; t < 16; t++)
      W[t] = 0;
    for (t = 16; t < 80; t++)
      W[t] = ((((W[t - 2]) >> (19)) | ((W[t - 2]) << (64 - 19))) ^ (((W[t - 2]) >> (61)) | ((W[t - 2]) << (64 - 61))) ^ ((W[t - 2]) >> (6))) + W[t - 7] + ((((W[t - 15]) >> (1)) | ((W[t - 15]) << (64 - 1))) ^ (((W[t - 15]) >> (8)) | ((W[t - 15]) << (64 - 8))) ^ ((W[t - 15]) >> (7))) + W[t - 16];
    SHA512_transform(H, W);
    Witi = 0;
  }
  for (t = Witi; t < 14; t++)
    W[t] = 0;
  W[14] = FileLen >> 61;
  W[15] = FileLen << 3;
  for (t = 16; t < 80; t++)
    W[t] = ((((W[t - 2]) >> (19)) | ((W[t - 2]) << (64 - 19))) ^ (((W[t - 2]) >> (61)) | ((W[t - 2]) << (64 - 61))) ^ ((W[t - 2]) >> (6))) + W[t - 7] + ((((W[t - 15]) >> (1)) | ((W[t - 15]) << (64 - 1))) ^ (((W[t - 15]) >> (8)) | ((W[t - 15]) << (64 - 8))) ^ ((W[t - 15]) >> (7))) + W[t - 16];
  SHA512_transform(H, W);
}
```