user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  lea    D10(%rip),%rdi
  call   <puts@plt>
  movl   $0x1,0xc(%rsp)
  jmp    L129
L40:
  cmp    $0x1,%ebp
  mov    $0x58,%eax
  cmovne 0x8(%rsp),%eax
  mov    %eax,0x8(%rsp)
  mov    $0x56,%eax
  cmovne 0x4(%rsp),%eax
  mov    %eax,0x4(%rsp)
  mov    $0x49,%eax
  cmove  %eax,%r15d
L168:
  movslq %r12d,%rbx
  imul   $0x66666667,%rbx,%rbx
  sar    $0x22,%rbx
  mov    %r12d,%eax
  sar    $0x1f,%eax
  sub    %eax,%ebx
  mov    %ebx,%edx
  lea    (%rbx,%rbx,4),%eax
  add    %eax,%eax
  mov    %r12d,%ebx
  sub    %eax,%ebx
  mov    %edx,%r12d
  lea    0x9(%rbx),%eax
  mov    $0x42000,%edx
  bt     %rax,%rdx
  jae    L164
  cmp    $0x9,%ebx
  mov    0x4(%rsp),%edx
  cmove  0x8(%rsp),%edx
  mov    %r15d,%esi
  lea    D3(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L47:
  sub    $0x1,%ebp
  je     L150
L151:
  cmp    $0x2,%ebp
  je     L165
  cmp    $0x3,%ebp
  jne    L40
  mov    $0x43,%r15d
  jmp    L168
L165:
  movl   $0x43,0x8(%rsp)
  movl   $0x4c,0x4(%rsp)
  mov    $0x58,%r15d
  jmp    L168
L164:
  cmp    $0x4,%ebx
  jg     L90
L61:
  test   %ebx,%ebx
  je     L47
  mov    %r14d,%r13d
L156:
  mov    %r15d,%edi
  call   <putchar@plt>
  add    $0x1,%r13d
  cmp    %r13d,%ebx
  jne    L156
  jmp    L47
L90:
  mov    0x4(%rsp),%edi
  call   <putchar@plt>
  sub    $0x5,%ebx
  jmp    L61
L150:
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,0xc(%rsp)
  mov    0xc(%rsp),%eax
  cmp    $0x65,%eax
  je     L38
L129:
  mov    0xc(%rsp),%ebx
  mov    %ebx,%esi
  lea    D18(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  test   %ebx,%ebx
  je     L63
  mov    %ebx,%r14d
  mov    $0x0,%ebp
  mov    $0x0,%r12d
L79:
  lea    (%r12,%r12,4),%ecx
  movslq %r14d,%rax
  imul   $0x66666667,%rax,%rax
  sar    $0x22,%rax
  mov    %r14d,%edx
  sar    $0x1f,%edx
  sub    %edx,%eax
  lea    (%rax,%rax,4),%edx
  add    %edx,%edx
  sub    %edx,%r14d
  lea    (%r14,%rcx,2),%r12d
  mov    %eax,%r14d
  add    $0x1,%ebp
  test   %eax,%eax
  jne    L79
  test   %ebp,%ebp
  jg     L151
  jmp    L150
L63:
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,0xc(%rsp)
  jmp    L129
L38:
  mov    $0x0,%eax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: parse_data
arguments: label: D10
data_type: string
name: parse_data
arguments: label: D3
data_type: string
name: parse_data
arguments: label: D18
data_type: string

tool: D10: Decimal:	Romano:

tool: D3: %c%c

tool: D18: %d		

assistant: ```c
int main(void) {
  int num, auxiliar, mirror, lastDigit;
  int sistDecimal;
  int var1, var2, var3;
  int i, j;
  printf("Decimal:\tRomano:\n");
  for (num = 1; num <= 100; num++) {
    printf("%d\t\t", num);
    auxiliar = num;
    sistDecimal = 0;
    mirror = 0;
    while (auxiliar != 0) {
      mirror = mirror * 10 + auxiliar % 10;
      auxiliar /= 10;
      sistDecimal++;
    }
    for (i = sistDecimal; i >= 1; i--) {
      switch (i) {
      case 1:
        var1 = 'I';
        var2 = 'V';
        var3 = 'X';
        break;
      case 2:
        var1 = 'X';
        var2 = 'L';
        var3 = 'C';
        break;
      case 3:
        var1 = 'C';
        break;
      }
      lastDigit = mirror % 10;
      mirror /= 10;
      if (lastDigit == 4 || lastDigit == 9)
        printf("%c%c", var1, lastDigit == 9 ? var3 : var2);
      else {
        if (lastDigit >= 5) {
          printf("%c", var2);
          lastDigit -= 5;
        }
        for (j = 0; j != lastDigit; j++)
          printf("%c", var1);
      }
    }
    putchar('\n');
  }
}
```