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

```asm
<satsub64be>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  movq   $0x1,-0x10(%rbp)
  movzbl -0x10(%rbp),%eax
  test   %al,%al
  jne    L53
  mov    -0x28(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  or     %rdx,%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L93
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  sub    %rax,-0x8(%rbp)
  cmpq   $0x80,-0x8(%rbp)
  jle    L107
  mov    $0x80,%eax
  jmp    L15
L107:
  cmpq   $0xffffffffffffff80,-0x8(%rbp)
  jge    L75
  mov    $0xffffff80,%eax
  jmp    L15
L75:
  mov    -0x8(%rbp),%rax
  jmp    L15
L53:
  nop
  jmp    L134
L93:
  nop
L134:
  mov    -0x28(%rbp),%rax
  add    $0x7,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    -0x30(%rbp),%rdx
  add    $0x7,%rdx
  movzbl (%rdx),%edx
  movzbl %dl,%edx
  sub    %edx,%eax
  mov    %eax,-0x14(%rbp)
  movl   $0x0,-0x20(%rbp)
  mov    -0x14(%rbp),%eax
  sar    $0x8,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x14(%rbp),%eax
  and    $0x80,%eax
  test   %eax,%eax
  je     L151
  movl   $0x6,-0x18(%rbp)
  jmp    L44
L120:
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    -0x18(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x30(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rdx),%edx
  movzbl %dl,%edx
  sub    %edx,%eax
  add    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  not    %eax
  or     %eax,-0x20(%rbp)
  sarl   $0x8,-0x1c(%rbp)
  subl   $0x1,-0x18(%rbp)
L44:
  cmpl   $0x0,-0x18(%rbp)
  jns    L120
  jmp    L8
L151:
  movl   $0x6,-0x18(%rbp)
  jmp    L105
L146:
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    -0x18(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x30(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rdx),%edx
  movzbl %dl,%edx
  sub    %edx,%eax
  add    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  or     %eax,-0x20(%rbp)
  sarl   $0x8,-0x1c(%rbp)
  subl   $0x1,-0x18(%rbp)
L105:
  cmpl   $0x0,-0x18(%rbp)
  jns    L146
L8:
  shll   $0x8,-0x1c(%rbp)
  mov    -0x20(%rbp),%eax
  movzbl %al,%eax
  test   %eax,%eax
  je     L97
  mov    -0x1c(%rbp),%eax
  or     $0x80,%al
  jmp    L15
L97:
  mov    -0x14(%rbp),%eax
  movzbl %al,%edx
  mov    -0x1c(%rbp),%eax
  add    %edx,%eax
L15:
  pop    %rbp
  ret
```

assistant: ```c
int satsub64be(const unsigned char *v1, const unsigned char *v2) {
  int ret, sat, brw, i;
  if (sizeof(long) == 8)
    do {
      const union {
        long one;
        char little;
      } is_endian = {1};
      long l;
      if (is_endian.little)
        break;
      if (((size_t)v1 | (size_t)v2) & 0x7)
        break;
      l = *((long *)v1);
      l -= *((long *)v2);
      if (l > 128)
        return 128;
      else if (l < -128)
        return -128;
      else
        return (int)l;
    } while (0);
  ret = (int)v1[7] - (int)v2[7];
  sat = 0;
  brw = ret >> 8;
  if (ret & 0x80) {
    for (i = 6; i >= 0; i--) {
      brw += (int)v1[i] - (int)v2[i];
      sat |= ~brw;
      brw >>= 8;
    }
  } else {
    for (i = 6; i >= 0; i--) {
      brw += (int)v1[i] - (int)v2[i];
      sat |= brw;
      brw >>= 8;
    }
  }
  brw <<= 8;
  if (sat & 0xff)
    return brw | 0x80;
  else
    return brw + (ret & 0xFF);
}
```