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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x18(%rbp),%rcx
  lea    -0x1c(%rbp),%rdx
  lea    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  movss  -0x20(%rbp),%xmm1
  movss  -0x1c(%rbp),%xmm0
  addss  %xmm0,%xmm1
  movss  -0x18(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jae    L81
  movss  -0x20(%rbp),%xmm1
  movss  -0x18(%rbp),%xmm0
  addss  %xmm0,%xmm1
  movss  -0x1c(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jae    L81
  movss  -0x1c(%rbp),%xmm1
  movss  -0x18(%rbp),%xmm0
  addss  %xmm0,%xmm1
  movss  -0x20(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jb     L87
L81:
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L78
L87:
  movss  -0x20(%rbp),%xmm0
  movss  -0x1c(%rbp),%xmm1
  comiss %xmm1,%xmm0
  jb     L39
  movss  -0x20(%rbp),%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x1c(%rbp),%xmm0
  movss  %xmm0,-0x20(%rbp)
  movss  -0x14(%rbp),%xmm0
  movss  %xmm0,-0x1c(%rbp)
L39:
  movss  -0x20(%rbp),%xmm0
  movss  -0x18(%rbp),%xmm1
  comiss %xmm1,%xmm0
  jb     L101
  movss  -0x20(%rbp),%xmm0
  movss  %xmm0,-0x10(%rbp)
  movss  -0x18(%rbp),%xmm0
  movss  %xmm0,-0x20(%rbp)
  movss  -0x10(%rbp),%xmm0
  movss  %xmm0,-0x18(%rbp)
L101:
  movss  -0x1c(%rbp),%xmm0
  movss  -0x18(%rbp),%xmm1
  comiss %xmm1,%xmm0
  jb     L9
  movss  -0x1c(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  movss  -0x18(%rbp),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  movss  -0xc(%rbp),%xmm0
  movss  %xmm0,-0x18(%rbp)
L9:
  movss  -0x18(%rbp),%xmm1
  movss  -0x18(%rbp),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x20(%rbp),%xmm2
  movss  -0x20(%rbp),%xmm1
  mulss  %xmm1,%xmm2
  movss  -0x1c(%rbp),%xmm3
  movss  -0x1c(%rbp),%xmm1
  mulss  %xmm3,%xmm1
  addss  %xmm2,%xmm1
  ucomiss %xmm1,%xmm0
  jp     L21
  ucomiss %xmm1,%xmm0
  jne    L21
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movss  -0x20(%rbp),%xmm1
  movss  -0x1c(%rbp),%xmm0
  mulss  %xmm1,%xmm0
  movss  D37(%rip),%xmm1
  divss  %xmm1,%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd %xmm0,%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L78
L21:
  lea    D19(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L78:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L38
  call   <__stack_chk_fail@plt>
L38:
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D1
type_infered: string
name: read_data
arguments: data_tag: D2
type_infered: string
name: read_data
arguments: data_tag: D36
type_infered: string
name: read_data
arguments: data_tag: D16
type_infered: string
name: read_data
arguments: data_tag: D37
type_infered: byte[4]
name: read_data
arguments: data_tag: D47
type_infered: string
name: read_data
arguments: data_tag: D19
type_infered: string

tool: D1: Vnesi dolzini na strani: 

tool: D2: %f %f %f

tool: D36: Ne moze da se konstruira triagolnik.

tool: D16: Tragolnikot e pravoagolen.

tool: {"D37": [0x00,0x00,0x00,0x40]}

tool: D47: Ploshtinata mu e %7.3f


tool: D19: Tragolnikot NE e pravoagolen.

assistant: ```c
int main() {
  float a, b, c;
  printf("Vnesi dolzini na strani: \n");
  scanf("%f %f %f", &a, &b, &c);
  if ((a + b <= c) || (a + c <= b) || (b + c <= a))
    printf("Ne moze da se konstruira triagolnik.\n");
  else {
    if (a >= b) {
      float tmp = a;
      a = b;
      b = tmp;
    }
    if (a >= c) {
      float tmp = a;
      a = c;
      c = tmp;
    }
    if (b >= c) {
      float tmp = b;
      b = c;
      c = tmp;
    }
    if (c * c == a * a + b * b) {
      printf("Tragolnikot e pravoagolen.\n");
      printf("Ploshtinata mu e %7.3f\n", a * b / 2);
    } else {
      printf("Tragolnikot NE e pravoagolen.\n");
    }
  }
  return 0;
}
```