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

```asm
<mulm>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r12
  push   %rbx
  sub    $0x70,%rsp
  mov    %rdi,-0x78(%rbp)
  mov    %rsi,-0x80(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  lea    -0x40(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <qclear@plt>
  mov    -0x80(%rbp),%rax
  movzwl (%rax),%eax
  mov    %ax,-0x40(%rbp)
  mov    -0x80(%rbp),%rax
  movzwl 0x2(%rax),%eax
  mov    %ax,-0x3e(%rbp)
  movw   $0x0,-0x24(%rbp)
  movw   $0x0,-0x22(%rbp)
  lea    -0x40(%rbp),%rax
  add    $0x1e,%rax
  mov    %rax,-0x58(%rbp)
  movl   $0xe,-0x64(%rbp)
  jmp    L37
L67:
  cmpl   $0xe,-0x64(%rbp)
  jne    L72
  movl   $0xd,-0x60(%rbp)
  movl   $0x4,-0x5c(%rbp)
  jmp    L78
L72:
  mov    -0x64(%rbp),%eax
  mov    %eax,-0x60(%rbp)
  movl   $0x3,-0x5c(%rbp)
L78:
  mov    -0x5c(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x80(%rbp),%rax
  lea    (%rdx,%rax,1),%r12
  mov    -0x60(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x78(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x68(%rbp)
  jmp    L58
L92:
  movzwl (%rbx),%eax
  test   %ax,%ax
  je     L15
  movzwl (%r12),%eax
  test   %ax,%ax
  jne    L90
L15:
  sub    $0x2,%rbx
  add    $0x2,%r12
  jmp    L13
L90:
  mov    %rbx,%rax
  lea    -0x2(%rax),%rbx
  movzwl (%rax),%eax
  movzwl %ax,%edx
  mov    %r12,%rax
  lea    0x2(%rax),%r12
  movzwl (%rax),%eax
  movzwl %ax,%eax
  imul   %rdx,%rax
  mov    %rax,-0x50(%rbp)
  mov    -0x58(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%edx
  mov    -0x50(%rbp),%rax
  movzwl %ax,%eax
  add    %rdx,%rax
  mov    %rax,-0x48(%rbp)
  mov    -0x48(%rbp),%rax
  and    $0x10000,%eax
  test   %rax,%rax
  je     L109
  movw   $0x1,-0x6a(%rbp)
  jmp    L57
L109:
  movw   $0x0,-0x6a(%rbp)
L57:
  mov    -0x58(%rbp),%rax
  lea    -0x2(%rax),%rdx
  mov    %rdx,-0x58(%rbp)
  mov    -0x48(%rbp),%rdx
  mov    %dx,(%rax)
  mov    -0x58(%rbp),%rax
  movzwl (%rax),%eax
  movzwl %ax,%edx
  mov    -0x50(%rbp),%rax
  shr    $0x10,%rax
  movzwl %ax,%eax
  add    %rax,%rdx
  movzwl -0x6a(%rbp),%eax
  add    %rdx,%rax
  mov    %rax,-0x48(%rbp)
  mov    -0x58(%rbp),%rax
  lea    -0x2(%rax),%rdx
  mov    %rdx,-0x58(%rbp)
  mov    -0x48(%rbp),%rdx
  mov    %dx,(%rax)
  mov    -0x48(%rbp),%rax
  and    $0x10000,%eax
  test   %rax,%rax
  je     L86
  mov    -0x58(%rbp),%rax
  movzwl (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x58(%rbp),%rax
  mov    %dx,(%rax)
L86:
  addq   $0x4,-0x58(%rbp)
L13:
  subl   $0x1,-0x68(%rbp)
L58:
  mov    -0x68(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jge    L92
  subq   $0x2,-0x58(%rbp)
  subl   $0x1,-0x64(%rbp)
L37:
  cmpl   $0x2,-0x64(%rbp)
  jg     L67
  lea    -0x40(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <mdnorm@plt>
  mov    -0x80(%rbp),%rdx
  lea    -0x40(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <qmov@plt>
  mov    $0x0,%eax
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L63
  call   <__stack_chk_fail@plt>
L63:
  add    $0x70,%rsp
  pop    %rbx
  pop    %r12
  pop    %rbp
  ret
```

assistant: ```c
int mulm(b, ac3)
unsigned short b[], ac3[];
{
  register unsigned short *p, *q;
  unsigned short act[14 + 2];
  unsigned short carry, *r;
  unsigned long lp, a;
  int i, k, m, o;
  qclear(act);
  act[0] = ac3[0];
  act[1] = ac3[1];
  act[14] = 0;
  act[14 + 1] = 0;
  r = &act[14 + 1];
  for (k = 14; k >= 3; k--) {
    if (k == 14) {
      m = 14 - 1;
      o = 4;
    } else {
      m = k;
      o = 3;
    }
    q = &ac3[o];
    p = &b[m];
    for (i = m; i >= o; i--) {
      if ((*p == 0) || (*q == 0)) {
        --p;
        ++q;
        continue;
      }
      lp = (unsigned long)(*p--) * (unsigned long)(*q++);
      a = (unsigned long)(*r) + (lp & 0xffff);
      if (a & 0x10000)
        carry = 1;
      else
        carry = 0;
      *r-- = a;
      a = (unsigned long)(*r) + ((lp >> 16) & 0xffff) + carry;
      *r-- = a;
      if (a & 0x10000)
        *r += 1;
      r += 2;
    }
    --r;
  }
  mdnorm(act);
  qmov(act, ac3);
  return 0;
}
```