user: 请将以下的汇编代码转换成C语言代码：

```asm
<mc64ud_>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x8,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %rdx,-0x68(%rbp)
  mov    %rcx,-0x70(%rbp)
  mov    %r8,-0x78(%rbp)
  mov    %r9,-0x80(%rbp)
  subq   $0x4,0x50(%rbp)
  subq   $0x4,0x48(%rbp)
  subq   $0x4,0x40(%rbp)
  subq   $0x4,0x38(%rbp)
  subq   $0x4,0x20(%rbp)
  subq   $0x4,0x18(%rbp)
  subq   $0x4,0x10(%rbp)
  subq   $0x4,-0x80(%rbp)
  subq   $0x4,-0x70(%rbp)
  mov    -0x58(%rbp),%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  jne    L235
  mov    -0x68(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x28(%rbp)
  movl   $0x1,-0x50(%rbp)
  jmp    L32
L253:
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x48(%rbp),%rax
  add    %rdx,%rax
  movl   $0x0,(%rax)
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x40(%rbp),%rax
  add    %rdx,%rax
  movl   $0x0,(%rax)
  addl   $0x1,-0x50(%rbp)
L32:
  mov    -0x50(%rbp),%eax
  cmp    -0x28(%rbp),%eax
  jle    L253
  mov    -0x68(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x68(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x34(%rbp)
  jmp    L54
L235:
  mov    -0x60(%rbp),%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  jne    L245
  mov    -0x68(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x28(%rbp)
  movl   $0x1,-0x50(%rbp)
  jmp    L72
L350:
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x40(%rbp),%rax
  add    %rdx,%rax
  movl   $0x0,(%rax)
  addl   $0x1,-0x50(%rbp)
L72:
  mov    -0x50(%rbp),%eax
  cmp    -0x28(%rbp),%eax
  jle    L350
L245:
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x68(%rbp),%rax
  mov    (%rax),%edx
  mov    0x30(%rbp),%rax
  mov    (%rax),%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x34(%rbp)
L54:
  mov    0x28(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  movl   $0x0,-0x3c(%rbp)
  mov    -0x58(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x1(%rax),%edx
  mov    -0x68(%rbp),%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x68(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x24(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x30(%rbp)
  jmp    L132
L30:
  mov    -0x20(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x30(%rbp),%eax
  sub    -0x24(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x38(%rbp),%rax
  add    %rdx,%rax
  movl   $0xffffffff,(%rax)
  mov    -0x30(%rbp),%eax
  mov    %eax,-0x18(%rbp)
  movl   $0x1,-0x48(%rbp)
  jmp    L325
L15:
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    0x10(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jge    L290
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    0x40(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    0x10(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x10(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  mov    %eax,-0x44(%rbp)
  jmp    L2
L207:
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L14
  addl   $0x1,-0x44(%rbp)
L2:
  mov    -0x44(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  jle    L207
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x4c(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    0x40(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  jmp    L212
L290:
  nop
L212:
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    0x50(%rbp),%rax
  add    %rcx,%rax
  sub    $0x1,%edx
  mov    %edx,(%rax)
  mov    -0x30(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  movl   $0x1,-0x40(%rbp)
  jmp    L285
L133:
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x50(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  js     L338
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    0x10(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x10(%rbp),%eax
  sub    -0x14(%rbp),%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x10(%rbp),%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x14(%rbp),%eax
  mov    %eax,-0x44(%rbp)
  jmp    L301
L74:
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x1c(%rbp)
  je     L240
  mov    -0x4c(%rbp),%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x48(%rbp),%rax
  add    %rax,%rdx
  mov    -0x1c(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x38(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x10(%rbp),%eax
  sub    -0x44(%rbp),%eax
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    0x50(%rbp),%rax
  add    %rcx,%rax
  sub    $0x1,%edx
  mov    %edx,(%rax)
  jmp    L251
L240:
  nop
  addl   $0x1,-0x44(%rbp)
L301:
  mov    -0x44(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  jle    L74
  jmp    L344
L338:
  nop
L344:
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0xffffffff,-0x4(%rbp)
  jne    L205
  addl   $0x1,-0x3c(%rbp)
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4c(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x3c(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jle    L340
  mov    -0x30(%rbp),%eax
  mov    %eax,-0x2c(%rbp)
  jmp    L153
L205:
  mov    -0x4(%rbp),%eax
  mov    %eax,-0x4c(%rbp)
  addl   $0x1,-0x40(%rbp)
L285:
  mov    -0x40(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  jle    L133
  nop
L251:
  addl   $0x1,-0x48(%rbp)
L325:
  mov    -0x48(%rbp),%eax
  cmp    -0x18(%rbp),%eax
  jle    L15
  jmp    L313
L14:
  nop
L313:
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4c(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  mov    -0x44(%rbp),%eax
  sub    %ecx,%eax
  mov    %eax,%edx
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    0x40(%rbp),%rax
  add    %rcx,%rax
  add    $0x1,%edx
  mov    %edx,(%rax)
  mov    0x28(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    0x28(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x30(%rbp),%eax
  mov    %eax,-0x18(%rbp)
  movl   $0x1,-0x48(%rbp)
  jmp    L249
L8:
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x4c(%rbp)
  cmpl   $0xffffffff,-0x4c(%rbp)
  je     L97
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    0x10(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  add    %eax,%edx
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    0x50(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  sub    $0x2,%eax
  mov    %eax,-0x44(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4c(%rbp),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x48(%rbp)
L249:
  mov    -0x48(%rbp),%eax
  cmp    -0x18(%rbp),%eax
  jle    L8
  jmp    L71
L97:
  nop
L71:
  mov    0x28(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x38(%rbp)
  jne    L166
  mov    -0x30(%rbp),%eax
  mov    %eax,-0x2c(%rbp)
  jmp    L153
L340:
  nop
  jmp    L61
L166:
  nop
L61:
  addl   $0x1,-0x30(%rbp)
L132:
  mov    -0x30(%rbp),%eax
  cmp    -0x28(%rbp),%eax
  jle    L30
  mov    -0x68(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x2c(%rbp)
L153:
  mov    -0x68(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x2c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x30(%rbp)
  jmp    L277
L261:
  addl   $0x1,-0x3c(%rbp)
  mov    -0x30(%rbp),%eax
  sub    -0x24(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x18(%rbp),%rax
  add    %rdx,%rax
  mov    -0x3c(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    0x18(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x30(%rbp)
L277:
  mov    -0x30(%rbp),%eax
  cmp    -0x28(%rbp),%eax
  jle    L261
  mov    $0x0,%eax
  leave
  ret
```

assistant: ```c
int mc64ud_(int *id, int *mod, int *n, int *irn, int *lirn, int *ip, int *lenc, int *fc, int *iperm, int *num, int *numx, int *pr, int *arp, int *cv, int *out) {
  int i__1, i__2, i__3, i__4;
  int i__, j, k, j1, ii, kk, id0, id1, in1, in2, nfc, num0, num1, num2, jord, last;
  --out;
  --cv;
  --arp;
  --pr;
  --iperm;
  --fc;
  --lenc;
  --ip;
  --irn;
  if (*id == 1) {
    i__1 = *n;
    for (i__ = 1; i__ <= i__1; ++i__) {
      cv[i__] = 0;
      arp[i__] = 0;
    }
    num1 = *n;
    num2 = *n;
  } else {
    if (*mod == 1) {
      i__1 = *n;
      for (i__ = 1; i__ <= i__1; ++i__) {
        arp[i__] = 0;
      }
    }
    num1 = *numx;
    num2 = *n - *numx;
  }
  num0 = *num;
  nfc = 0;
  id0 = (*id - 1) * *n;
  i__1 = *n;
  for (jord = num0 + 1; jord <= i__1; ++jord) {
    id1 = id0 + jord;
    j = fc[jord - num0];
    pr[j] = -1;
    i__2 = jord;
    for (k = 1; k <= i__2; ++k) {
      if (arp[j] >= lenc[j]) {
        goto L30;
      }
      in1 = ip[j] + arp[j];
      in2 = ip[j] + lenc[j] - 1;
      i__3 = in2;
      for (ii = in1; ii <= i__3; ++ii) {
        i__ = irn[ii];
        if (iperm[i__] == 0) {
          goto L80;
        }
      }
      arp[j] = lenc[j];
    L30:
      out[j] = lenc[j] - 1;
      i__3 = jord;
      for (kk = 1; kk <= i__3; ++kk) {
        in1 = out[j];
        if (in1 < 0) {
          goto L50;
        }
        in2 = ip[j] + lenc[j] - 1;
        in1 = in2 - in1;
        i__4 = in2;
        for (ii = in1; ii <= i__4; ++ii) {
          i__ = irn[ii];
          if (cv[i__] == id1) {
            goto L40;
          }
          j1 = j;
          j = iperm[i__];
          cv[i__] = id1;
          pr[j] = j1;
          out[j1] = in2 - ii - 1;
          goto L70;
        L40:;
        }
      L50:
        j1 = pr[j];
        if (j1 == -1) {
          ++nfc;
          fc[nfc] = j;
          if (nfc > num2) {
            last = jord;
            goto L101;
          }
          goto L100;
        }
        j = j1;
      }
    L70:;
    }
  L80:
    iperm[i__] = j;
    arp[j] = ii - ip[j] + 1;
    ++(*num);
    i__2 = jord;
    for (k = 1; k <= i__2; ++k) {
      j = pr[j];
      if (j == -1) {
        goto L95;
      }
      ii = ip[j] + lenc[j] - out[j] - 2;
      i__ = irn[ii];
      iperm[i__] = j;
    }
  L95:
    if (*num == num1) {
      last = jord;
      goto L101;
    }
  L100:;
  }
  last = *n;
L101:
  i__1 = *n;
  for (jord = last + 1; jord <= i__1; ++jord) {
    ++nfc;
    fc[nfc] = fc[jord - num0];
  }
  return 0;
}
```