user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  movsd  D84(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  D84(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  jmp    L37
L95:
  movsd  D84(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  jmp    L251
L196:
  movsd  D84(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  jmp    L212
L65:
  movsd  D84(%rip),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  jmp    L107
L204:
  movsd  -0x40(%rbp),%xmm1
  movsd  D110(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x38(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x30(%rbp),%xmm1
  movsd  D110(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x28(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  comisd -0x10(%rbp),%xmm0
  jae    L92
  movsd  -0x40(%rbp),%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jp     L49
  movsd  -0x40(%rbp),%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jne    L49
  movsd  -0x8(%rbp),%xmm0
  divsd  -0x10(%rbp),%xmm0
  movsd  -0x28(%rbp),%xmm1
  divsd  -0x38(%rbp),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L49
  ucomisd %xmm1,%xmm0
  jne    L49
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x18(%rbp),%xmm0
  mulsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
L49:
  movsd  -0x40(%rbp),%xmm0
  ucomisd -0x28(%rbp),%xmm0
  jp     L66
  movsd  -0x40(%rbp),%xmm0
  ucomisd -0x28(%rbp),%xmm0
  jne    L66
  movsd  -0x8(%rbp),%xmm0
  divsd  -0x10(%rbp),%xmm0
  movsd  -0x30(%rbp),%xmm1
  divsd  -0x38(%rbp),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L66
  ucomisd %xmm1,%xmm0
  jne    L66
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x18(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
L66:
  movsd  -0x38(%rbp),%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jp     L174
  movsd  -0x38(%rbp),%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jne    L174
  movsd  -0x8(%rbp),%xmm0
  divsd  -0x10(%rbp),%xmm0
  movsd  -0x28(%rbp),%xmm1
  divsd  -0x40(%rbp),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L174
  ucomisd %xmm1,%xmm0
  jne    L174
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x18(%rbp),%xmm0
  mulsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
L174:
  movsd  -0x38(%rbp),%xmm0
  ucomisd -0x28(%rbp),%xmm0
  jp     L97
  movsd  -0x38(%rbp),%xmm0
  ucomisd -0x28(%rbp),%xmm0
  jne    L97
  movsd  -0x8(%rbp),%xmm0
  divsd  -0x10(%rbp),%xmm0
  movsd  -0x30(%rbp),%xmm1
  divsd  -0x40(%rbp),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L97
  ucomisd %xmm1,%xmm0
  jne    L97
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x18(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
L97:
  movsd  -0x28(%rbp),%xmm1
  movsd  D84(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
L107:
  movsd  D110(%rip),%xmm0
  comisd -0x28(%rbp),%xmm0
  ja     L204
  jmp    L233
L92:
  nop
L233:
  movsd  -0x30(%rbp),%xmm1
  movsd  D84(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
L212:
  movsd  -0x40(%rbp),%xmm1
  movsd  D84(%rip),%xmm0
  addsd  %xmm1,%xmm0
  comisd -0x30(%rbp),%xmm0
  ja     L65
  movsd  -0x38(%rbp),%xmm1
  movsd  D84(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
L251:
  movsd  D110(%rip),%xmm0
  comisd -0x38(%rbp),%xmm0
  ja     L196
  movsd  -0x40(%rbp),%xmm1
  movsd  D84(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
L37:
  movsd  D110(%rip),%xmm0
  comisd -0x40(%rbp),%xmm0
  ja     L95
  movsd  -0x20(%rbp),%xmm0
  cvttsd2si %xmm0,%edx
  movsd  -0x18(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%esi
  lea    D39(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D84
type: byte[8]
name: extract_symbolic_data
arguments: label: D110
type: byte[8]
name: extract_symbolic_data
arguments: label: D39
type: string

tool: {"D84": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: {"D110": [0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x40]}

tool: D39: %d / %d


assistant: ```c
int main() {
  double a, b, c, d;
  double fracn, fracd, sumn, sumd;
  sumn = sumd = 1;
  for (a = 1; a < 10; a++) {
    for (b = 1; b < 10; b++) {
      for (c = 1; c < (a + 1); c++) {
        for (d = 1; d < 10; d++) {
          fracd = (a * 10) + b;
          fracn = (c * 10) + d;
          if (fracd <= fracn)
            break;
          if (a == c)
            if (fracn / fracd == d / b) {
              sumn *= b;
              sumd *= d;
            }
          if (a == d)
            if (fracn / fracd == c / b) {
              sumn *= b;
              sumd *= c;
            }
          if (b == c)
            if (fracn / fracd == d / a) {
              sumn *= a;
              sumd *= d;
            }
          if (b == d)
            if (fracn / fracd == c / a) {
              sumn *= a;
              sumd *= c;
            }
        }
      }
    }
  }
  printf("%d / %d\n", (int)sumd, (int)sumn);
  return 0;
}
```