user: 请从给定的汇编指令推导出C源代码:

```asm
<ex5>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x38(%rsp)
  xor    %eax,%eax
  lea    D220(%rip),%rdi
  call   <print@plt>
  mov    $0x0,%ebp
  lea    D89(%rip),%r13
  lea    D124(%rip),%rbx
  lea    D17(%rip),%r15
  lea    D319(%rip),%r14
  jmp    L36
L31:
  movabs $0x79203b30203d2078,%rax
  mov    %rax,0x20(%rsp)
  movl   $0x32203d20,0x28(%rsp)
  movw   $0x3b,0x2c(%rsp)
  pxor   %xmm7,%xmm7
  movss  %xmm7,0x14(%rsp)
L25:
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <print@plt>
  sub    $0x8,%rsp
  push   %rbx
  lea    0x30(%rsp),%r9
  mov    %rbx,%r8
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %rbx,%rsi
  lea    D224(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <print@plt>
  lea    D35(%rip),%r12
  mov    %r12,(%rsp)
  mov    %r12,%r9
  mov    %r12,%r8
  mov    %rbx,%rcx
  lea    D156(%rip),%rdx
  mov    %rbx,%rsi
  lea    D177(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,(%rsp)
  mov    %r12,%r9
  mov    %r12,%r8
  mov    %rbx,%rcx
  lea    D222(%rip),%rdx
  mov    %rbx,%rsi
  lea    D117(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movss  0x24(%rsp),%xmm2
  subss  D298(%rip),%xmm2
  movss  %xmm2,0x28(%rsp)
  pxor   %xmm5,%xmm5
  cvtss2sd %xmm2,%xmm5
  movsd  %xmm5,0x18(%rsp)
  mov    $0x0,%r9d
  mov    %r12,%r8
  movapd %xmm5,%xmm0
  mov    %rbx,%rcx
  lea    D317(%rip),%rdx
  mov    %rbx,%rsi
  lea    D165(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movss  0x24(%rsp),%xmm0
  mulss  D55(%rip),%xmm0
  movaps %xmm0,%xmm4
  addss  D251(%rip),%xmm4
  movss  %xmm4,0x2c(%rsp)
  pxor   %xmm6,%xmm6
  cvtss2sd %xmm4,%xmm6
  movq   %xmm6,%r12
  mov    $0x0,%r8d
  movapd %xmm6,%xmm1
  movsd  0x18(%rsp),%xmm0
  mov    %rbx,%rcx
  lea    D196(%rip),%rdx
  mov    %rbx,%rsi
  mov    %r14,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  add    $0x10,%rsp
  mov    $0x64,%r8d
  pxor   %xmm0,%xmm0
  comiss 0x14(%rsp),%xmm0
  ja     L79
  movss  0x18(%rsp),%xmm7
  comiss 0x1c(%rsp),%xmm7
  mov    $0x4d2,%r8d
  mov    $0x1,%eax
  cmovbe %eax,%r8d
L79:
  movq   %r12,%xmm1
  movsd  0x8(%rsp),%xmm0
  mov    %rbx,%rcx
  lea    D152(%rip),%rdx
  mov    %rbx,%rsi
  mov    %r14,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <print@plt>
  add    $0x1,%ebp
  cmp    $0x3,%ebp
  je     L59
L36:
  test   %ebp,%ebp
  je     L31
  cmp    $0x1,%ebp
  je     L37
  lea    0x20(%rsp),%r12
  movabs $0x79203b33203d2078,%rax
  mov    %rax,0x20(%rsp)
  movl   $0x30203d20,0x28(%rsp)
  movw   $0x3b,0x2c(%rsp)
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <print@plt>
  sub    $0x8,%rsp
  push   %rbx
  mov    %r12,%r9
  mov    %rbx,%r8
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %rbx,%rsi
  lea    D224(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <print@plt>
  lea    D35(%rip),%r12
  mov    %r12,(%rsp)
  mov    %r12,%r9
  mov    %r12,%r8
  mov    %rbx,%rcx
  lea    D156(%rip),%rdx
  mov    %rbx,%rsi
  lea    D177(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,(%rsp)
  mov    %r12,%r9
  mov    %r12,%r8
  mov    %rbx,%rcx
  lea    D222(%rip),%rdx
  mov    %rbx,%rsi
  lea    D117(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%r9d
  mov    %r12,%r8
  mov    D286(%rip),%rax
  movq   %rax,%xmm0
  mov    %rbx,%rcx
  lea    D317(%rip),%rdx
  mov    %rbx,%rsi
  lea    D165(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    $0xa,%r8d
  mov    D324(%rip),%rax
  movq   %rax,%xmm1
  mov    D286(%rip),%rax
  movq   %rax,%xmm0
  mov    %rbx,%rcx
  lea    D196(%rip),%rdx
  mov    %rbx,%rsi
  mov    %r14,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  add    $0x10,%rsp
  mov    D286(%rip),%rax
  mov    %rax,0x8(%rsp)
  movabs $0xc018000000000000,%r12
  mov    $0x4d2,%r8d
  jmp    L79
L37:
  movabs $0x203b342d203d2078,%rax
  mov    %rax,0x20(%rsp)
  movl   $0x203d2079,0x28(%rsp)
  movw   $0x3b32,0x2c(%rsp)
  movb   $0x0,0x2e(%rsp)
  movss  D249(%rip),%xmm3
  movss  %xmm3,0x14(%rsp)
  jmp    L25
L59:
  lea    D220(%rip),%rdi
  mov    $0x0,%eax
  call   <print@plt>
  mov    0x38(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L44
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L44:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D220
type_infered: string
name: parse_data
arguments: data_label: D89
type_infered: string
name: parse_data
arguments: data_label: D124
type_infered: string
name: parse_data
arguments: data_label: D17
type_infered: string
name: parse_data
arguments: data_label: D319
type_infered: string
name: parse_data
arguments: data_label: D224
type_infered: string
name: parse_data
arguments: data_label: D35
type_infered: string
name: parse_data
arguments: data_label: D156
type_infered: string
name: parse_data
arguments: data_label: D177
type_infered: string
name: parse_data
arguments: data_label: D222
type_infered: string
name: parse_data
arguments: data_label: D117
type_infered: string
name: parse_data
arguments: data_label: D298
type_infered: byte[4]
name: parse_data
arguments: data_label: D317
type_infered: string
name: parse_data
arguments: data_label: D165
type_infered: string
name: parse_data
arguments: data_label: D55
type_infered: byte[4]
name: parse_data
arguments: data_label: D251
type_infered: byte[4]
name: parse_data
arguments: data_label: D196
type_infered: string
name: parse_data
arguments: data_label: D152
type_infered: string
name: parse_data
arguments: data_label: D286
type_infered: byte[8]
name: parse_data
arguments: data_label: D324
type_infered: byte[8]
name: parse_data
arguments: data_label: D249
type_infered: byte[4]

tool: D220: 
------------------------------


tool: D89: -------------------------------------------

tool: 

tool: D17: Pontos

tool: D319: |%4s%-6s%4s|%8.2f|%8.2f|%8d|


tool: D224: |%4s%-6s%4s|%6s%-14s%6s|


tool: D35: --------

tool: D156: 1

tool: D177: |%4s%-6s%4s|%8s|%8s|%8s|


tool: D222: 2

tool: D117: |%4s%-6s%4s|%8s|%8s|%8d|


tool: {"D298": [0x00,0x00,0x80,0x40]}

tool: D317: 3

tool: D165: |%4s%-6s%4s|%8.2f|%8s|%8d|


tool: {"D55": [0x00,0x00,0x00,0xc0]}

tool: {"D251": [0x00,0x00,0x00,0x41]}

tool: D196: 4

tool: D152: 5

tool: {"D286": [0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40]}

tool: {"D324": [0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xc0]}

tool: {"D249": [0x00,0x00,0x80,0xc0]}

assistant: ```c
void ex5() {
  print("\n------------------------------\n");
  int i;
  for (i = 0; i < 3; i++) {
    float x, y, r1, r2;
    int z;
    char str[16];
    if (i == 0) {
      x = 0;
      y = 2;
      strcpy(str, "x = 0; y = 2;");
    } else if (i == 1) {
      x = -4;
      y = 2;
      strcpy(str, "x = -4; y = 2;");
    } else {
      x = 3;
      y = 0;
      strcpy(str, "x = 3; y = 0;");
    }
    print("-------------------------------------------");
    printf("|%4s%-6s%4s|%6s%-14s%6s|\n", "", "Pontos", "", "", str, "");
    print("-------------------------------------------");
    printf("|%4s%-6s%4s|%8s|%8s|%8s|\n", "", "1", "", "--------", "--------", "--------");
    z = 0;
    printf("|%4s%-6s%4s|%8s|%8s|%8d|\n", "", "2", "", "--------", "--------", z);
    r1 = x - 2 * y;
    printf("|%4s%-6s%4s|%8.2f|%8s|%8d|\n", "", "3", "", r1, "--------", z);
    r2 = -2 * x + 4 * y;
    if ((r1 + r2) < 0) {
      if (x > 0) {
        if (y >= 0)
          z = 10;
      }
    }
    printf("|%4s%-6s%4s|%8.2f|%8.2f|%8d|\n", "", "4", "", r1, r2, z);
    if ((x < 0) && (y > 0))
      z = 100;
    else {
      if (r1 > r2)
        z = 1234;
      else
        z = 1;
    }
    printf("|%4s%-6s%4s|%8.2f|%8.2f|%8d|\n", "", "5", "", r1, r2, z);
    print("-------------------------------------------");
  }
  print("\n------------------------------\n");
}
```