user: Demonstrate the C code that generates the assembly output below:

```asm
<ex5>:
  endbr64
  push   %r12
  lea    D97(%rip),%r12
  push   %rbp
  lea    D60(%rip),%rbp
  mov    %rbp,%rdi
  sub    $0x8,%rsp
  call   <print@plt>
  lea    D83(%rip),%rdi
  call   <print@plt>
  lea    D117(%rip),%rdi
  call   <print@plt>
  lea    D48(%rip),%rdi
  call   <print@plt>
  lea    D33(%rip),%rdi
  call   <print@plt>
  movss  D84(%rip),%xmm1
  movss  D94(%rip),%xmm0
  mov    %r12,%rdi
  call   <printf@plt>
  lea    D39(%rip),%rdi
  call   <print@plt>
  lea    D114(%rip),%rdi
  call   <print@plt>
  movss  D32(%rip),%xmm1
  movss  D115(%rip),%xmm0
  mov    %r12,%rdi
  call   <printf@plt>
  add    $0x8,%rsp
  mov    %rbp,%rdi
  pop    %rbp
  pop    %r12
  jmp    1070 <print@plt>
```

tool_calls: name: retrieve_data
arguments: data_tag: D97
data_type: string
name: retrieve_data
arguments: data_tag: D60
data_type: string
name: retrieve_data
arguments: data_tag: D83
data_type: string
name: retrieve_data
arguments: data_tag: D117
data_type: string
name: retrieve_data
arguments: data_tag: D48
data_type: string
name: retrieve_data
arguments: data_tag: D33
data_type: string
name: retrieve_data
arguments: data_tag: D84
data_type: byte[4]
name: retrieve_data
arguments: data_tag: D94
data_type: byte[4]
name: retrieve_data
arguments: data_tag: D39
data_type: string
name: retrieve_data
arguments: data_tag: D114
data_type: string
name: retrieve_data
arguments: data_tag: D32
data_type: byte[4]
name: retrieve_data
arguments: data_tag: D115
data_type: f32

tool: D97: Valores finais:
	x:%.2f
	y:%.2f


tool: D60: 
------------------------------


tool: D83: 5. Seguindo atraves dos trechos de algoritmos abaixo, determine o valor final de X e de Y.

tool: D117: Em ambos os casos, considere os valores iniciais: X = 1.0 e Y = 1.0

tool: D48: 
Primeiro algoritmo:

tool: D33: 	A = X + 5.0
	B = Y + 3.0
	X = A + B
	Y = X + A
	B = Y / 4.0 + X
	A = B / 2. + Y
	X = X + A + B - Y
	Y = Y + B

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

tool: {"D94": [0x00,0x00,0xf8,0x41]}

tool: D39: 
Segundo algoritmo:

tool: D114: 	X = X + Y
	X = X*2
	A = X + Y
	B = A - 5.0
	Y = A
	B = B / Y + 2.0
	X = (Y + A) / B
	Y = Y / A + X /B

tool: {"D32": [0x00,0x00,0x60,0x40]}

tool: D115: 5

assistant: ```c
void ex5() {
  print("\n------------------------------\n");
  print("5. Seguindo atraves dos trechos de algoritmos abaixo, determine o valor final de X e de Y.");
  print("Em ambos os casos, considere os valores iniciais: X = 1.0 e Y = 1.0");
  float x = 1, y = 1, a, b;
  print("\nPrimeiro algoritmo:");
  print("\tA = X + 5.0\n\tB = Y + 3.0\n\tX = A + B\n\tY = X + A\n\tB = Y / 4.0 + X\n\tA = B / 2. + Y\n\tX = X + A + B - Y\n\tY = Y + B");
  a = x + 5;
  b = y + 3;
  x = a + b;
  y = x + a;
  b = y / 4.0 + x;
  a = b / 2. + y;
  x = x + a + b - y;
  y = y + b;
  printf("Valores finais:\n\tx:%.2f\n\ty:%.2f\n", x, y);
  x = 1, y = 1, a = 0, b = 0;
  print("\nSegundo algoritmo:");
  print("\tX = X + Y\n\tX = X*2\n\tA = X + Y\n\tB = A - 5.0\n\tY = A\n\tB = B / Y + 2.0\n\tX = (Y + A) / B\n\tY = Y / A + X /B");
  x = x + y;
  x = x * 2;
  a = x + y;
  b = a - 5.0;
  y = a;
  b = b / y + 2.0;
  x = (y + a) / b;
  y = y / a + x / b;
  printf("Valores finais:\n\tx:%.2f\n\ty:%.2f\n", x, y);
  print("\n------------------------------\n");
}
```