user: Translate the below assembly code into C programming language:

```asm
<questiona_tempo>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D79(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D12(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D69(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x3,%esi
  mov    $0x1,%edi
  call   <ler_intervalo@plt>
  cmp    $0x3,%eax
  je     L21
  cmp    $0x3,%eax
  jg     L59
  cmp    $0x1,%eax
  je     L75
  cmp    $0x2,%eax
  je     L16
  jmp    L59
L75:
  lea    D88(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  movss  D82(%rip),%xmm0
  jmp    L12
L16:
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  pxor   %xmm0,%xmm0
  jmp    L12
L21:
  lea    D46(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D94(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
L59:
  movss  -0xc(%rbp),%xmm0
L12:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L30
  call   <__stack_chk_fail@plt>
L30:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D79
type: string
name: unpack_data
arguments: data_tag: D12
type: string
name: unpack_data
arguments: data_tag: D69
type: string
name: unpack_data
arguments: data_tag: D20
type: string
name: unpack_data
arguments: data_tag: D35
type: string
name: unpack_data
arguments: data_tag: D88
type: string
name: unpack_data
arguments: data_tag: D82
type: byte[4]
name: unpack_data
arguments: data_tag: D23
type: string
name: unpack_data
arguments: data_tag: D46
type: string
name: unpack_data
arguments: data_tag: D94
type: string
name: unpack_data
arguments: data_tag: D18
type: string

tool: D79: Ha tres modos para a exibicao:


tool: D12: 	1 - Exibicao direta;


tool: D69: 	2 - Exibicao pausada por ENTER;


tool: D20: 	3 - Exibicao pausada por tempo.


tool: D35: 
Sabendo das opcoes, digite a sua escolha:


tool: D88: 
A exibicao direta foi selecionada


tool: {"D82": [0x00,0x00,0x80,0xbf]}

tool: D23: 
A exibicao pausada por ENTER foi selecionada


tool: D46: 
Entao, agora digite o tempo digitado 

tool: D94: (lembrando que pode ser decimal
separado por ponto (.), recomendando valores acima de 1.0):


tool: D18: %f

assistant: ```c
float questiona_tempo() {
  float tempo;
  printf("Ha tres modos para a exibicao:\n");
  printf("\t1 - Exibicao direta;\n");
  printf("\t2 - Exibicao pausada por ENTER;\n");
  printf("\t3 - Exibicao pausada por tempo.\n");
  printf("\nSabendo das opcoes, digite a sua escolha:\n");
  switch (ler_intervalo(1, 3)) {
  case 1:
    printf("\nA exibicao direta foi selecionada\n");
    return -1;
  case 2:
    printf("\nA exibicao pausada por ENTER foi selecionada\n");
    return 0.0;
  case 3:
    printf("\nEntao, agora digite o tempo digitado ");
    printf("(lembrando que pode ser decimal\nseparado por ponto (.), recomendando valores acima de 1.0):\n");
    scanf("%f", &tempo);
    getchar();
  }
  return tempo;
}
```