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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
L18:
  movl   $0x1,-0x44(%rbp)
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x40(%rbp),%rax
  mov    %rax,%rsi
  lea    D198(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    D182(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x54(%rbp),%rax
  mov    %rax,%rsi
  lea    D168(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movss  -0x54(%rbp),%xmm1
  movss  D263(%rip),%xmm0
  comiss %xmm1,%xmm0
  jb     L27
  movss  -0x54(%rbp),%xmm0
  movss  -0x54(%rbp),%xmm1
  movss  D129(%rip),%xmm3
  movaps %xmm1,%xmm2
  divss  %xmm3,%xmm2
  movss  D134(%rip),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x4c(%rbp)
  movss  -0x54(%rbp),%xmm0
  movss  D129(%rip),%xmm2
  movaps %xmm0,%xmm1
  divss  %xmm2,%xmm1
  movss  D134(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x48(%rbp)
  movl   $0x8,-0x50(%rbp)
  jmp    L75
L27:
  movss  -0x54(%rbp),%xmm0
  comiss D263(%rip),%xmm0
  jbe    L1
  movss  -0x54(%rbp),%xmm1
  movss  D29(%rip),%xmm0
  comiss %xmm1,%xmm0
  jb     L1
  movss  -0x54(%rbp),%xmm0
  movss  -0x54(%rbp),%xmm1
  movss  D129(%rip),%xmm3
  movaps %xmm1,%xmm2
  divss  %xmm3,%xmm2
  movss  D30(%rip),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x4c(%rbp)
  movss  -0x54(%rbp),%xmm0
  movss  D129(%rip),%xmm2
  movaps %xmm0,%xmm1
  divss  %xmm2,%xmm1
  movss  D30(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x48(%rbp)
  movl   $0xa,-0x50(%rbp)
  jmp    L75
L1:
  movss  -0x54(%rbp),%xmm0
  comiss D29(%rip),%xmm0
  jbe    L75
  movss  -0x54(%rbp),%xmm0
  movss  -0x54(%rbp),%xmm1
  movss  D129(%rip),%xmm3
  movaps %xmm1,%xmm2
  divss  %xmm3,%xmm2
  movss  D110(%rip),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x4c(%rbp)
  movss  -0x54(%rbp),%xmm0
  movss  D129(%rip),%xmm2
  movaps %xmm0,%xmm1
  divss  %xmm2,%xmm1
  movss  D110(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x48(%rbp)
  movl   $0xc,-0x50(%rbp)
L75:
  lea    -0x40(%rbp),%rax
  mov    %rax,%rsi
  lea    D163(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movss  -0x54(%rbp),%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd %xmm0,%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  lea    D104(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    -0x50(%rbp),%eax
  mov    %eax,%esi
  lea    D53(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  pxor   %xmm5,%xmm5
  cvtss2sd -0x48(%rbp),%xmm5
  movq   %xmm5,%rax
  movq   %rax,%xmm0
  lea    D122(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  pxor   %xmm6,%xmm6
  cvtss2sd -0x4c(%rbp),%xmm6
  movq   %xmm6,%rax
  movq   %rax,%xmm0
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D124(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x55(%rbp),%rax
  mov    %rax,%rsi
  lea    D198(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  addl   $0x1,-0x44(%rbp)
  movzbl -0x55(%rbp),%eax
  cmp    $0x73,%al
  je     L18
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L0
  call   <__stack_chk_fail@plt>
L0:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D7
datatype: string
name: unpack_data
arguments: data_tag: D198
datatype: string
name: unpack_data
arguments: data_tag: D182
datatype: string
name: unpack_data
arguments: data_tag: D168
datatype: string
name: unpack_data
arguments: data_tag: D263
datatype: byte[4]
name: unpack_data
arguments: data_tag: D129
datatype: byte[4]
name: unpack_data
arguments: data_tag: D134
datatype: byte[4]
name: unpack_data
arguments: data_tag: D29
datatype: byte[4]
name: unpack_data
arguments: data_tag: D30
datatype: byte[4]
name: unpack_data
arguments: data_tag: D110
datatype: byte[4]
name: unpack_data
arguments: data_tag: D163
datatype: string
name: unpack_data
arguments: data_tag: D104
datatype: string
name: unpack_data
arguments: data_tag: D53
datatype: string
name: unpack_data
arguments: data_tag: D122
datatype: string
name: unpack_data
arguments: data_tag: D23
datatype: string
name: unpack_data
arguments: data_tag: D124
datatype: string

tool: D7: 
 digite o nome do funcionario; 

tool: D198: %s

tool: D182: 
 digite o salario do funcionario: 

tool: D168: %f

tool: {"D263": [0x00,0x00,0xfa,0x43]}

tool: {"D129": [0x00,0x00,0xc8,0x42]}

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

tool: {"D29": [0x00,0x00,0x7a,0x44]}

tool: {"D30": [0x00,0x00,0x20,0x41]}

tool: {"D110": [0x00,0x00,0x40,0x41]}

tool: D163: 
 Nome: %s 


tool: D104: 
 Salario bruto: %f 


tool: D53: 
 Taxa de INSS: %d% 


tool: D122: 
 Valor de INSS %f 


tool: D23: 
 Salario liquido: %f 


tool: D124: 
 deseja continuar ? 

assistant: ```c
int main() {
  char resp;
  do {
    int cont = 1, tinss;
    char s, nome[50];
    float sal, novosala, val;
    printf("\n digite o nome do funcionario; ");
    scanf("%s", &nome);
    printf("\n digite o salario do funcionario: ");
    scanf("%f", &sal);
    if (sal <= 500) {
      novosala = sal - ((sal / 100) * 8);
      val = (sal / 100) * 8;
      tinss = 8;
    } else if (sal > 500 && sal <= 1000) {
      novosala = sal - ((sal / 100) * 10);
      val = (sal / 100) * 10;
      tinss = 10;
    } else if (sal > 1000) {
      novosala = sal - ((sal / 100) * 12);
      val = (sal / 100) * 12;
      tinss = 12;
    }
    printf("\n Nome: %s \n", nome);
    printf("\n Salario bruto: %f \n", sal);
    printf("\n Taxa de INSS: %d% \n", tinss);
    printf("\n Valor de INSS %f \n", val);
    printf("\n Salario liquido: %f \n", novosala);
    printf("\n deseja continuar ? \n");
    scanf("%s", &resp);
    cont = cont + 1;
  } while (resp == 's');
}
```