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

```asm
<calculate_E_discriminative_contributions_multi>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %rdi,-0x78(%rbp)
  mov    %rsi,-0x80(%rbp)
  mov    %rdx,-0x88(%rbp)
  mov    %rcx,-0x90(%rbp)
  mov    %r8,-0x98(%rbp)
  mov    %r9,-0xa0(%rbp)
  cmpl   $0x1,0xc0(%rbp)
  jne    L14
  mov    -0x78(%rbp),%rax
  mov    %rax,-0x60(%rbp)
  mov    -0x98(%rbp),%rax
  mov    %rax,-0x58(%rbp)
  mov    0x20(%rbp),%rax
  mov    %rax,-0x50(%rbp)
  mov    0x40(%rbp),%rax
  mov    %rax,-0x48(%rbp)
  mov    0x70(%rbp),%eax
  mov    %eax,-0x68(%rbp)
L14:
  cmpl   $0x2,0xc0(%rbp)
  jne    L361
  mov    -0x80(%rbp),%rax
  mov    %rax,-0x60(%rbp)
  mov    -0xa0(%rbp),%rax
  mov    %rax,-0x58(%rbp)
  mov    0x28(%rbp),%rax
  mov    %rax,-0x50(%rbp)
  mov    0x48(%rbp),%rax
  mov    %rax,-0x48(%rbp)
  mov    0x78(%rbp),%eax
  mov    %eax,-0x68(%rbp)
L361:
  cmpl   $0x1,0xc0(%rbp)
  jne    L344
  mov    -0x88(%rbp),%rax
  mov    %rax,-0x60(%rbp)
  mov    0x10(%rbp),%rax
  mov    %rax,-0x58(%rbp)
  mov    0x30(%rbp),%rax
  mov    %rax,-0x50(%rbp)
  mov    0x50(%rbp),%rax
  mov    %rax,-0x48(%rbp)
  mov    0x80(%rbp),%eax
  mov    %eax,-0x68(%rbp)
L344:
  cmpl   $0x1,0xc0(%rbp)
  jne    L286
  mov    -0x90(%rbp),%rax
  mov    %rax,-0x60(%rbp)
  mov    0x18(%rbp),%rax
  mov    %rax,-0x58(%rbp)
  mov    0x38(%rbp),%rax
  mov    %rax,-0x50(%rbp)
  mov    0x58(%rbp),%rax
  mov    %rax,-0x48(%rbp)
  mov    0x88(%rbp),%eax
  mov    %eax,-0x68(%rbp)
L286:
  movl   $0x1,-0x70(%rbp)
  jmp    L207
L91:
  movl   $0x0,-0x6c(%rbp)
  jmp    L119
L10:
  mov    -0x68(%rbp),%edx
  mov    -0x6c(%rbp),%ecx
  mov    -0x70(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <get_mtx_index@plt>
  mov    %eax,-0x64(%rbp)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rax,%rdx
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rcx
  mov    -0x60(%rbp),%rax
  add    %rcx,%rax
  fldt   (%rdx)
  fstpt  (%rax)
  addl   $0x1,-0x6c(%rbp)
L119:
  mov    -0x6c(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L10
  addl   $0x1,-0x70(%rbp)
L207:
  mov    0x68(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x70(%rbp)
  jl     L91
  movl   $0x1,-0x70(%rbp)
  jmp    L293
L56:
  fldz
  fstpt  -0x30(%rbp)
  movl   $0x0,-0x6c(%rbp)
  jmp    L225
L12:
  mov    -0x68(%rbp),%edx
  mov    -0x6c(%rbp),%ecx
  mov    -0x70(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <get_mtx_index@plt>
  mov    %eax,-0x64(%rbp)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fldt   -0x30(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x30(%rbp)
  addl   $0x1,-0x6c(%rbp)
L225:
  mov    -0x6c(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L12
  fldz
  fldt   -0x30(%rbp)
  fcomip %st(1),%st
  fstp   %st(0)
  jbe    L350
  movl   $0x0,-0x6c(%rbp)
  jmp    L141
L59:
  mov    -0x68(%rbp),%edx
  mov    -0x6c(%rbp),%ecx
  mov    -0x70(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <get_mtx_index@plt>
  mov    %eax,-0x64(%rbp)
  addl   $0x1,-0x6c(%rbp)
L141:
  mov    -0x6c(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L59
L350:
  fldz
  fstpt  -0x30(%rbp)
  movl   $0x0,-0x6c(%rbp)
  jmp    L24
L55:
  mov    -0x68(%rbp),%edx
  mov    -0x6c(%rbp),%ecx
  mov    -0x70(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <get_mtx_index@plt>
  mov    %eax,-0x64(%rbp)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fldt   -0x30(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x30(%rbp)
  addl   $0x1,-0x6c(%rbp)
L24:
  mov    -0x6c(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L55
  fldz
  fldt   -0x30(%rbp)
  fcomip %st(1),%st
  fstp   %st(0)
  jbe    L405
  movl   $0x0,-0x6c(%rbp)
  jmp    L262
L368:
  mov    -0x68(%rbp),%edx
  mov    -0x6c(%rbp),%ecx
  mov    -0x70(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <get_mtx_index@plt>
  mov    %eax,-0x64(%rbp)
  addl   $0x1,-0x6c(%rbp)
L262:
  mov    -0x6c(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L368
L405:
  addl   $0x1,-0x70(%rbp)
L293:
  mov    0x68(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x70(%rbp)
  jl     L56
  fld1
  fstpt  -0x20(%rbp)
  movl   $0x1,-0x70(%rbp)
  jmp    L333
L203:
  movl   $0x0,-0x6c(%rbp)
  jmp    L414
L288:
  mov    -0x68(%rbp),%edx
  mov    -0x6c(%rbp),%ecx
  mov    -0x70(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <get_mtx_index@plt>
  mov    %eax,-0x64(%rbp)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fstpt  -0x10(%rbp)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fld1
  fsubp  %st,%st(1)
  fxch   %st(1)
  fcomip %st(1),%st
  fstp   %st(0)
  jbe    L232
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fld1
  fsubp  %st,%st(1)
  fstpt  -0x10(%rbp)
L232:
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fldz
  fucomip %st(1),%st
  jp     L402
  fldz
  fucomip %st(1),%st
  fstp   %st(0)
  je     L63
  jmp    L114
L402:
  fstp   %st(0)
L114:
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fsubrp %st,%st(1)
  fldt   -0x10(%rbp)
  fdivrp %st,%st(1)
  fldt   -0x20(%rbp)
  fxch   %st(1)
  fcomip %st(1),%st
  fstp   %st(0)
  jbe    L63
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fsubrp %st,%st(1)
  fldt   -0x10(%rbp)
  fdivrp %st,%st(1)
  fstpt  -0x20(%rbp)
L63:
  addl   $0x1,-0x6c(%rbp)
L414:
  mov    -0x6c(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L288
  addl   $0x1,-0x70(%rbp)
L333:
  mov    0x68(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x70(%rbp)
  jl     L203
  fldt   0x2b2d(%rip)        # 4030 <DIVIDER_SCALER.0>
  fldt   -0x20(%rbp)
  fmulp  %st,%st(1)
  fstpt  -0x20(%rbp)
  movl   $0x1,-0x70(%rbp)
  jmp    L281
L413:
  movl   $0x0,-0x6c(%rbp)
  jmp    L378
L192:
  mov    -0x68(%rbp),%edx
  mov    -0x6c(%rbp),%ecx
  mov    -0x70(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <get_mtx_index@plt>
  mov    %eax,-0x64(%rbp)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fsubrp %st,%st(1)
  mov    -0x70(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    0x90(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fldt   -0x20(%rbp)
  fmulp  %st,%st(1)
  fdivrp %st,%st(1)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  faddp  %st,%st(1)
  fstpt  (%rax)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fldz
  fcomip %st(1),%st
  fstp   %st(0)
  jbe    L245
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  fldz
  fstpt  (%rax)
L245:
  addl   $0x1,-0x6c(%rbp)
L378:
  mov    -0x6c(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L192
  addl   $0x1,-0x70(%rbp)
L281:
  mov    0x68(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x70(%rbp)
  jl     L413
  movl   $0x1,-0x70(%rbp)
  jmp    L382
L338:
  fldz
  fstpt  -0x40(%rbp)
  movl   $0x0,-0x6c(%rbp)
  jmp    L31
L240:
  mov    -0x68(%rbp),%edx
  mov    -0x6c(%rbp),%ecx
  mov    -0x70(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <get_mtx_index@plt>
  mov    %eax,-0x64(%rbp)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fldt   -0x40(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x40(%rbp)
  addl   $0x1,-0x6c(%rbp)
L31:
  mov    -0x6c(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L240
  fldt   -0x40(%rbp)
  fldz
  fucomip %st(1),%st
  fstp   %st(0)
  jp     L234
  fldt   -0x40(%rbp)
  fldz
  fucomip %st(1),%st
  fstp   %st(0)
  je     L401
L234:
  movl   $0x0,-0x6c(%rbp)
  jmp    L9
L2:
  mov    -0x68(%rbp),%edx
  mov    -0x6c(%rbp),%ecx
  mov    -0x70(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <get_mtx_index@plt>
  mov    %eax,-0x64(%rbp)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  fldt   -0x40(%rbp)
  fdivrp %st,%st(1)
  fstpt  (%rax)
  addl   $0x1,-0x6c(%rbp)
L9:
  mov    -0x6c(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L2
L401:
  addl   $0x1,-0x70(%rbp)
L382:
  mov    0x68(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x70(%rbp)
  jl     L338
  nop
  nop
  leave
  ret
```

assistant: ```c
void calculate_E_discriminative_contributions_multi(long double *E, long double *E_2, long double *E_3, long double *E_4, long double *E_num, long double *E_num_2, long double *E_num_3, long double *E_num_4, long double *E_den, long double *E_den_2, long double *E_den_3, long double *E_den_4, long double *emissions, long double *emissions_2, long double *emissions_3, long double *emissions_4, long double *transitions, int nr_v, int a_size, int a_size_2, int a_size_3, int a_size_4, long double *emiss_prior_scalers, long double *emiss_prior_scalers_2, long double *emiss_prior_scalers_3, long double *emiss_prior_scalers_4, int rd, int nr_alphabets, int opt_alpha) {
  int v, w;
  int a;
  int x, y, y_2, y_3, y_4;
  long double rowsum, dist_tot;
  long double E_divider, E_divider_2, E_divider_3, E_divider_4, max_T_den;
  long double max_E_den, max_E_den_2, max_E_den_3, max_E_den_4;
  long double E_limiter, E_limiter_2, E_limiter_3, E_limiter_4, T_limiter;
  static long double DIVIDER_SCALER = 10.0;
  long double *E_cur, *E_cur_num, *E_cur_den, *emissions_cur;
  int a_size_cur;
  if (opt_alpha == 1) {
    E_cur = E;
    E_cur_num = E_num;
    E_cur_den = E_den;
    emissions_cur = emissions;
    a_size_cur = a_size;
  }
  if (opt_alpha == 2) {
    E_cur = E_2;
    E_cur_num = E_num_2;
    E_cur_den = E_den_2;
    emissions_cur = emissions_2;
    a_size_cur = a_size_2;
  }
  if (opt_alpha == 1) {
    E_cur = E_3;
    E_cur_num = E_num_3;
    E_cur_den = E_den_3;
    emissions_cur = emissions_3;
    a_size_cur = a_size_3;
  }
  if (opt_alpha == 1) {
    E_cur = E_4;
    E_cur_num = E_num_4;
    E_cur_den = E_den_4;
    emissions_cur = emissions_4;
    a_size_cur = a_size_4;
  }
  for (v = 1; v < nr_v - 1; v++) {
    for (a = 0; a < a_size_cur; a++) {
      y = get_mtx_index(v, a, a_size_cur);
      *(E_cur + y) = *(emissions_cur + y);
    }
  }
  for (v = 1; v < nr_v - 1; v++) {
    dist_tot = 0.0;
    for (a = 0; a < a_size_cur; a++) {
      y = get_mtx_index(v, a, a_size_cur);
      dist_tot += *(E_cur_den + y);
    }
    if (dist_tot > 0.0) {
      for (a = 0; a < a_size_cur; a++) {
        y = get_mtx_index(v, a, a_size_cur);
      }
    }
    dist_tot = 0.0;
    for (a = 0; a < a_size_cur; a++) {
      y = get_mtx_index(v, a, a_size_cur);
      dist_tot += *(E_cur_num + y);
    }
    if (dist_tot > 0.0) {
      for (a = 0; a < a_size_cur; a++) {
        y = get_mtx_index(v, a, a_size_cur);
      }
    }
  }
  E_divider = 1.0;
  for (v = 1; v < nr_v - 1; v++) {
    for (a = 0; a < a_size_cur; a++) {
      y = get_mtx_index(v, a, a_size_cur);
      E_limiter = *(E_cur + y);
      if (*(E_cur + y) > (1.0 - *(E_cur + y))) {
        E_limiter = 1.0 - *(E_cur + y);
      }
      if (*(E_cur + y) != 0.0 && (*(E_cur_den + y) - *(E_cur_num + y)) / E_limiter > E_divider) {
        E_divider = (*(E_cur_den + y) - *(E_cur_num + y)) / E_limiter;
      }
    }
  }
  E_divider = E_divider * DIVIDER_SCALER;
  for (v = 1; v < nr_v - 1; v++) {
    for (a = 0; a < a_size_cur; a++) {
      y = get_mtx_index(v, a, a_size_cur);
      *(E_cur + y) += (*(E_cur_num + y) - *(E_cur_den + y)) / (E_divider * *(emiss_prior_scalers + v));
      if (*(E_cur + y) < 0.0) {
        *(E_cur + y) = 0.0;
      }
    }
  }
  for (v = 1; v < nr_v - 1; v++) {
    rowsum = 0.0;
    for (a = 0; a < a_size_cur; a++) {
      y = get_mtx_index(v, a, a_size_cur);
      rowsum += *(emissions_cur + y);
    }
    if (rowsum != 0.0) {
      for (a = 0; a < a_size_cur; a++) {
        y = get_mtx_index(v, a, a_size_cur);
        *(emissions_cur + y) = *(emissions_cur + y) / rowsum;
      }
    }
  }
}
```