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

```asm
<ex1>:
  endbr64
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  lea    D21(%rip),%rdi
  call   <print@plt>
  lea    D42(%rip),%rdi
  mov    $0x0,%eax
  call   <print@plt>
  lea    D74(%rip),%rdi
  mov    $0x0,%eax
  call   <print@plt>
  lea    0x14(%rsp),%rcx
  lea    0x10(%rsp),%rdx
  lea    0xc(%rsp),%rsi
  lea    D76(%rip),%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    0xc(%rsp),%edx
  mov    0x10(%rsp),%eax
  cmp    %eax,%edx
  jle    L11
  mov    0x14(%rsp),%ecx
  cmp    %ecx,%eax
  jl     L15
L78:
  lea    (%rcx,%rdx,1),%esi
  cmp    %eax,%esi
  jge    L149
  lea    D51(%rip),%rdi
  mov    $0x0,%eax
  call   <print@plt>
L49:
  lea    D21(%rip),%rdi
  mov    $0x0,%eax
  call   <print@plt>
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L47
  add    $0x28,%rsp
  ret
L15:
  mov    %eax,%esi
  mov    %ecx,%eax
  mov    %esi,%ecx
  jmp    L78
L11:
  mov    0x14(%rsp),%ecx
  cmp    %ecx,%edx
  jg     L139
  cmp    %ecx,%eax
  jle    L110
  mov    %eax,%esi
  mov    %edx,%eax
  mov    %esi,%edx
  jmp    L78
L139:
  mov    %eax,%esi
  mov    %ecx,%eax
  mov    %edx,%ecx
  mov    %esi,%edx
  jmp    L78
L110:
  mov    %eax,%esi
  mov    %edx,%eax
  mov    %ecx,%edx
  mov    %esi,%ecx
  jmp    L78
L149:
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movapd %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sd %ecx,%xmm2
  mulsd  %xmm0,%xmm0
  mulsd  %xmm2,%xmm2
  addsd  %xmm2,%xmm0
  comisd %xmm1,%xmm0
  jbe    L52
  lea    D82(%rip),%rdi
  mov    $0x0,%eax
  call   <print@plt>
  jmp    L49
L52:
  comisd %xmm0,%xmm1
  jbe    L113
  lea    D81(%rip),%rdi
  mov    $0x0,%eax
  call   <print@plt>
  jmp    L49
L113:
  lea    D23(%rip),%rdi
  mov    $0x0,%eax
  call   <print@plt>
  jmp    L49
L47:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D21
type: string
name: disassemble_data
arguments: label: D42
type: string
name: disassemble_data
arguments: label: D74
type: string
name: disassemble_data
arguments: label: D76
type: string
name: disassemble_data
arguments: label: D51
type: string
name: disassemble_data
arguments: label: D82
type: string
name: disassemble_data
arguments: label: D81
type: string
name: disassemble_data
arguments: label: D23
type: string

tool: D21: 
------------------------------


tool: D42: Dados tres valores a, b e c, correspondentes aos lados de um triangulo.
Faca um programa C, que leia os lados e informe o tipo de triangulo.

tool: D74: Informe os tres lados do triangulo:

tool: D76: %d%d%d

tool: D51: Esses valores nao correspondem ao lado de um triangulo.

tool: D82: Esse valores correspondem a um triangulo obtusangulo.

tool: D81: Esse valores correspondem a um triangulo acutangulo.

tool: D23: Esse valores correspondem a um triangulo retangulo.

assistant: ```c
void ex1() {
  print("\n------------------------------\n");
  print("Dados tres valores a, b e c, correspondentes aos lados de um triangulo.\nFaca um programa C, que leia os lados e informe o tipo de triangulo.");
  int a, b, c;
  print("Informe os tres lados do triangulo:");
  scanf("%d%d%d", &a, &b, &c);
  int lado1, lado2, lado3;
  void setVal(n1, n2, n3) {
    lado1 = n1;
    lado2 = n2;
    lado3 = n3;
  }
  if (a > b) {
    if (b < c) {
      setVal(a, b, c);
    } else {
      if (a > c) {
        setVal(a, c, b);
      } else {
        setVal(c, a, b);
      }
    }
  } else {
    if (a > c) {
      setVal(b, a, c);
    } else {
      if (b > c) {
        setVal(b, c, a);
      } else {
        setVal(c, b, a);
      }
    }
  }
  if (lado3 > lado1 + lado2) {
    print("Esses valores nao correspondem ao lado de um triangulo.");
  } else {
    if (pow(lado3, 2) < pow(lado1, 2) + pow(lado2, 2)) {
      print("Esse valores correspondem a um triangulo obtusangulo.");
    } else if (pow(lado3, 2) > pow(lado1, 2) + pow(lado2, 2)) {
      print("Esse valores correspondem a um triangulo acutangulo.");
    } else {
      print("Esse valores correspondem a um triangulo retangulo.");
    }
  }
  print("\n------------------------------\n");
}
```