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

```asm
<bn_mul_comba4>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %rdx,-0x48(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x38(%rbp),%rax
  mov    -0x28(%rbp),%rdx
  mov    %rdx,(%rax)
  movq   $0x0,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  add    $0x8,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    -0x20(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  add    $0x8,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  add    $0x10,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x10(%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  add    $0x18,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  add    $0x10,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  add    $0x8,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x18(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  add    $0x8,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  add    $0x10,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  add    $0x18,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x20(%rax),%rdx
  mov    -0x20(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  add    $0x18,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  add    $0x10,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x28(%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  mov    -0x48(%rbp),%rdx
  add    $0x18,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x30(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rax,(%rdx)
  mov    -0x38(%rbp),%rax
  lea    0x38(%rax),%rdx
  mov    -0x20(%rbp),%rax
  mov    %rax,(%rdx)
  nop
  pop    %rbp
  ret
```

assistant: ```c
void bn_mul_comba4(unsigned long *r, unsigned long *a, unsigned long *b) {
  unsigned long t1, t2;
  unsigned long c1, c2, c3;
  c1 = 0;
  c2 = 0;
  c3 = 0;
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[0]), "m"(b[0]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[0] = c1;
  c1 = 0;
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[0]), "m"(b[1]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[1]), "m"(b[0]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[1] = c2;
  c2 = 0;
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[2]), "m"(b[0]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[1]), "m"(b[1]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[0]), "m"(b[2]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[2] = c3;
  c3 = 0;
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[0]), "m"(b[3]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[1]), "m"(b[2]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[2]), "m"(b[1]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[3]), "m"(b[0]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[3] = c1;
  c1 = 0;
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[3]), "m"(b[1]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[2]), "m"(b[2]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[1]), "m"(b[3]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[4] = c2;
  c2 = 0;
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[2]), "m"(b[3]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[3]), "m"(b[2]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[5] = c3;
  c3 = 0;
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"(a[3]), "m"(b[3]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[6] = c1;
  r[7] = c2;
}
```