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

```asm
<intToRoman>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %edi,-0x54(%rbp)
  mov    -0x54(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x10624dd3,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x6,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x54(%rbp),%edx
  movslq %edx,%rax
  imul   $0x10624dd3,%rax,%rax
  shr    $0x20,%rax
  sar    $0x6,%eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  imul   $0x3e8,%eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x54(%rbp),%edx
  movslq %edx,%rax
  imul   $0x51eb851f,%rax,%rax
  shr    $0x20,%rax
  sar    $0x5,%eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  imul   $0x64,%eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x54(%rbp),%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  add    %eax,%eax
  sub    %eax,%edx
  mov    %edx,-0x1c(%rbp)
  cmpl   $0x3,-0x24(%rbp)
  jle    L275
  cmpl   $0x4,-0x24(%rbp)
  je     L423
  cmpl   $0x9,-0x24(%rbp)
  je     L423
  mov    -0x24(%rbp),%eax
  sub    $0x4,%eax
  jmp    L228
L423:
  mov    $0x2,%eax
  jmp    L228
L275:
  mov    -0x24(%rbp),%eax
L228:
  mov    %eax,-0x18(%rbp)
  cmpl   $0x3,-0x20(%rbp)
  jle    L83
  cmpl   $0x4,-0x20(%rbp)
  je     L407
  cmpl   $0x9,-0x20(%rbp)
  je     L407
  mov    -0x20(%rbp),%eax
  sub    $0x4,%eax
  jmp    L325
L407:
  mov    $0x2,%eax
  jmp    L325
L83:
  mov    -0x20(%rbp),%eax
L325:
  mov    %eax,-0x14(%rbp)
  cmpl   $0x3,-0x1c(%rbp)
  jle    L51
  cmpl   $0x4,-0x1c(%rbp)
  je     L156
  cmpl   $0x9,-0x1c(%rbp)
  je     L156
  mov    -0x1c(%rbp),%eax
  sub    $0x4,%eax
  jmp    L206
L156:
  mov    $0x2,%eax
  jmp    L206
L51:
  mov    -0x1c(%rbp),%eax
L206:
  mov    %eax,-0x10(%rbp)
  mov    -0x28(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %eax,%edx
  mov    -0x14(%rbp),%eax
  add    %eax,%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  movl   $0x0,-0x48(%rbp)
  movl   $0x0,-0x44(%rbp)
  jmp    L18
L459:
  mov    -0x48(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x4d,(%rax)
  addl   $0x1,-0x48(%rbp)
  addl   $0x1,-0x44(%rbp)
L18:
  mov    -0x44(%rbp),%eax
  cmp    -0x28(%rbp),%eax
  jl     L459
  cmpl   $0x3,-0x24(%rbp)
  jg     L24
  movl   $0x0,-0x40(%rbp)
  jmp    L138
L11:
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x43,(%rax)
  addl   $0x1,-0x40(%rbp)
L138:
  mov    -0x40(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jl     L11
  jmp    L442
L24:
  cmpl   $0x4,-0x24(%rbp)
  jne    L154
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x43,(%rax)
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x44,(%rax)
  jmp    L442
L154:
  cmpl   $0x9,-0x24(%rbp)
  jne    L223
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x43,(%rax)
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x4d,(%rax)
  jmp    L442
L223:
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x44,(%rax)
  movl   $0x0,-0x3c(%rbp)
  jmp    L146
L33:
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x43,(%rax)
  addl   $0x1,-0x3c(%rbp)
L146:
  mov    -0x24(%rbp),%eax
  sub    $0x5,%eax
  cmp    %eax,-0x3c(%rbp)
  jl     L33
L442:
  cmpl   $0x3,-0x20(%rbp)
  jg     L429
  movl   $0x0,-0x38(%rbp)
  jmp    L417
L222:
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x58,(%rax)
  addl   $0x1,-0x38(%rbp)
L417:
  mov    -0x38(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jl     L222
  jmp    L133
L429:
  cmpl   $0x4,-0x20(%rbp)
  jne    L215
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x58,(%rax)
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x4c,(%rax)
  jmp    L133
L215:
  cmpl   $0x9,-0x20(%rbp)
  jne    L85
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x58,(%rax)
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x43,(%rax)
  jmp    L133
L85:
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x4c,(%rax)
  movl   $0x0,-0x34(%rbp)
  jmp    L439
L101:
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x58,(%rax)
  addl   $0x1,-0x34(%rbp)
L439:
  mov    -0x20(%rbp),%eax
  sub    $0x5,%eax
  cmp    %eax,-0x34(%rbp)
  jl     L101
L133:
  cmpl   $0x3,-0x1c(%rbp)
  jg     L331
  movl   $0x0,-0x30(%rbp)
  jmp    L203
L50:
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x49,(%rax)
  addl   $0x1,-0x30(%rbp)
L203:
  mov    -0x30(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jl     L50
  jmp    L0
L331:
  cmpl   $0x4,-0x1c(%rbp)
  jne    L197
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x49,(%rax)
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x56,(%rax)
  jmp    L0
L197:
  cmpl   $0x9,-0x1c(%rbp)
  jne    L107
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x49,(%rax)
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x58,(%rax)
  jmp    L0
L107:
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x56,(%rax)
  movl   $0x0,-0x2c(%rbp)
  jmp    L346
L446:
  mov    -0x48(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x48(%rbp)
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x49,(%rax)
  addl   $0x1,-0x2c(%rbp)
L346:
  mov    -0x1c(%rbp),%eax
  sub    $0x5,%eax
  cmp    %eax,-0x2c(%rbp)
  jl     L446
L0:
  mov    -0x8(%rbp),%rax
  leave
  ret
```

assistant: ```c
char *intToRoman(int num) {
  int m = num / 1000;
  int c = num % 1000 / 100;
  int x = num % 100 / 10;
  int i = num % 10;
  int cl = c < 4 ? c : (c == 4 || c == 9 ? 2 : c - 4);
  ;
  int xl = x < 4 ? x : (x == 4 || x == 9 ? 2 : x - 4);
  ;
  int il = i < 4 ? i : (i == 4 || i == 9 ? 2 : i - 4);
  ;
  int l = m + cl + xl + il;
  char *r = (char *)malloc((l + 1) * sizeof(char));
  r[l] = '\0';
  int k = 0;
  for (int j = 0; j < m; j++) {
    r[k] = 'M';
    k++;
  }
  if (c < 4) {
    for (int j = 0; j < c; j++)
      r[k++] = 'C';
  } else if (c == 4) {
    r[k++] = 'C';
    r[k++] = 'D';
  } else if (c == 9) {
    r[k++] = 'C';
    r[k++] = 'M';
  } else {
    r[k++] = 'D';
    for (int j = 0; j < c - 5; j++)
      r[k++] = 'C';
  }
  if (x < 4) {
    for (int j = 0; j < x; j++)
      r[k++] = 'X';
  } else if (x == 4) {
    r[k++] = 'X';
    r[k++] = 'L';
  } else if (x == 9) {
    r[k++] = 'X';
    r[k++] = 'C';
  } else {
    r[k++] = 'L';
    for (int j = 0; j < x - 5; j++)
      r[k++] = 'X';
  }
  if (i < 4) {
    for (int j = 0; j < i; j++)
      r[k++] = 'I';
  } else if (i == 4) {
    r[k++] = 'I';
    r[k++] = 'V';
  } else if (i == 9) {
    r[k++] = 'I';
    r[k++] = 'X';
  } else {
    r[k++] = 'V';
    for (int j = 0; j < i - 5; j++)
      r[k++] = 'I';
  }
  return r;
}
```