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

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x78(%rsp)
  xor    %eax,%eax
  movl   $0x1,0x1c(%rsp)
  movl   $0x40600000,0x20(%rsp)
  movl   $0x40b9999a,0x24(%rsp)
  movl   $0x40066666,0x28(%rsp)
  movl   $0x3ff33333,0x2c(%rsp)
  movl   $0x3f333333,0x30(%rsp)
  movl   $0x3c23d70a,0x40(%rsp)
  movl   $0x3d4ccccd,0x44(%rsp)
  movl   $0x3dcccccd,0x48(%rsp)
  movl   $0x3e800000,0x4c(%rsp)
  movl   $0x3f000000,0x50(%rsp)
  movl   $0x3f800000,0x54(%rsp)
  pxor   %xmm7,%xmm7
  movss  %xmm7,0xc(%rsp)
  lea    D253(%rip),%r13
  lea    D7(%rip),%r12
  lea    D170(%rip),%rbp
  lea    D237(%rip),%rbx
  jmp    L109
L186:
  lea    D10(%rip),%rdi
  call   <puts@plt>
  lea    D246(%rip),%rdi
  call   <puts@plt>
  lea    D198(%rip),%rdi
  call   <puts@plt>
  lea    D238(%rip),%rdi
  call   <puts@plt>
  lea    D222(%rip),%rdi
  call   <puts@plt>
  lea    D156(%rip),%rdi
  call   <puts@plt>
  lea    D172(%rip),%rdi
  call   <puts@plt>
  lea    D254(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x18(%rsp),%rsi
  lea    D22(%rip),%rdi
  call   <scanf@plt>
  movslq 0x18(%rsp),%rax
  movss  0xc(%rsp),%xmm3
  addss  0x40(%rsp,%rax,4),%xmm3
  movss  %xmm3,0xc(%rsp)
L134:
  cmpl   $0x2,0x1c(%rsp)
  jg     L157
L25:
  cmpl   $0x0,0x1c(%rsp)
  je     L155
L109:
  pxor   %xmm0,%xmm0
  cvtss2sd 0xc(%rsp),%xmm0
  mov    %r13,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    %r12,%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  mov    %rbx,%rdi
  call   <puts@plt>
  lea    D266(%rip),%rdi
  call   <puts@plt>
  lea    D27(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x1c(%rsp),%rsi
  lea    D22(%rip),%rdi
  call   <scanf@plt>
  mov    0x1c(%rsp),%eax
  cmp    $0x1,%eax
  je     L186
  cmp    $0x2,%eax
  jne    L134
  lea    D203(%rip),%rdi
  call   <puts@plt>
  lea    D307(%rip),%rdi
  call   <puts@plt>
  lea    D119(%rip),%rdi
  call   <puts@plt>
  lea    D285(%rip),%rdi
  call   <puts@plt>
  lea    D240(%rip),%rdi
  call   <puts@plt>
  lea    D152(%rip),%rdi
  call   <puts@plt>
  lea    D96(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x14(%rsp),%rsi
  lea    D22(%rip),%rdi
  call   <scanf@plt>
  movslq 0x14(%rsp),%rax
  movss  0x20(%rsp,%rax,4),%xmm1
  movss  0xc(%rsp),%xmm4
  comiss %xmm1,%xmm4
  jae    L63
  lea    D206(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L134
L63:
  subss  %xmm1,%xmm4
  movaps %xmm4,%xmm0
  lea    0x60(%rsp),%rcx
  lea    0x40(%rsp),%rsi
  lea    0x48(%rsp),%r8
L8:
  mov    %rcx,%rdi
  movl   $0x0,0x14(%rcx)
  movss  0x14(%rsi),%xmm1
  mov    $0x1,%eax
  comiss %xmm1,%xmm0
  jb     L6
L85:
  mov    %eax,%edx
  subss  %xmm1,%xmm0
  add    $0x1,%eax
  comiss %xmm1,%xmm0
  jae    L85
  mov    %edx,0x14(%rdi)
L6:
  sub    $0x4,%rcx
  sub    $0x4,%rsi
  cmp    %r8,%rcx
  jne    L8
  lea    D2(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%r14d
  lea    D270(%rip),%r15
L199:
  mov    0x60(%rsp,%r14,1),%esi
  pxor   %xmm0,%xmm0
  cvtss2sd 0x40(%rsp,%r14,1),%xmm0
  mov    %r15,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  add    $0x4,%r14
  cmp    $0x18,%r14
  jne    L199
  pxor   %xmm7,%xmm7
  movss  %xmm7,0xc(%rsp)
  jmp    L134
L157:
  lea    D97(%rip),%rdi
  call   <puts@plt>
  jmp    L25
L155:
  movss  0xc(%rsp),%xmm6
  ucomiss D196(%rip),%xmm6
  jp     L72
  jne    L72
L45:
  lea    D184(%rip),%rdi
  call   <puts@plt>
  mov    0x78(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L47
  mov    $0x0,%eax
  add    $0x88,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L72:
  lea    0x60(%rsp),%rcx
  lea    0x40(%rsp),%rsi
  lea    0x48(%rsp),%r8
L82:
  mov    %rcx,%rdi
  movl   $0x0,0x14(%rcx)
  movss  0x14(%rsi),%xmm0
  mov    $0x1,%eax
  movss  0xc(%rsp),%xmm5
  comiss %xmm0,%xmm5
  jb     L100
L132:
  mov    %eax,%edx
  movss  0xc(%rsp),%xmm2
  subss  %xmm0,%xmm2
  movss  %xmm2,0xc(%rsp)
  add    $0x1,%eax
  comiss %xmm0,%xmm2
  jae    L132
  mov    %edx,0x14(%rdi)
L100:
  sub    $0x4,%rcx
  sub    $0x4,%rsi
  cmp    %rcx,%r8
  jne    L82
  lea    D73(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%ebx
  lea    D270(%rip),%rbp
L28:
  mov    0x60(%rsp,%rbx,1),%esi
  pxor   %xmm0,%xmm0
  cvtss2sd 0x40(%rsp,%rbx,1),%xmm0
  mov    %rbp,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  add    $0x4,%rbx
  cmp    $0x18,%rbx
  jne    L28
  jmp    L45
L47:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: data_tag: D253
type_guessed: string
name: read_data
arguments: data_tag: D7
type_guessed: string
name: read_data
arguments: data_tag: D170
type_guessed: string
name: read_data
arguments: data_tag: D237
type_guessed: string
name: read_data
arguments: data_tag: D10
type_guessed: string
name: read_data
arguments: data_tag: D246
type_guessed: string
name: read_data
arguments: data_tag: D198
type_guessed: string
name: read_data
arguments: data_tag: D238
type_guessed: string
name: read_data
arguments: data_tag: D222
type_guessed: string
name: read_data
arguments: data_tag: D156
type_guessed: string
name: read_data
arguments: data_tag: D172
type_guessed: string
name: read_data
arguments: data_tag: D254
type_guessed: string
name: read_data
arguments: data_tag: D22
type_guessed: string
name: read_data
arguments: data_tag: D266
type_guessed: string
name: read_data
arguments: data_tag: D27
type_guessed: string
name: read_data
arguments: data_tag: D203
type_guessed: string
name: read_data
arguments: data_tag: D307
type_guessed: string
name: read_data
arguments: data_tag: D119
type_guessed: string
name: read_data
arguments: data_tag: D285
type_guessed: string
name: read_data
arguments: data_tag: D240
type_guessed: string
name: read_data
arguments: data_tag: D152
type_guessed: string
name: read_data
arguments: data_tag: D96
type_guessed: string
name: read_data
arguments: data_tag: D206
type_guessed: string
name: read_data
arguments: data_tag: D2
type_guessed: string
name: read_data
arguments: data_tag: D270
type_guessed: string
name: read_data
arguments: data_tag: D97
type_guessed: string
name: read_data
arguments: data_tag: D196
type_guessed: f32
name: read_data
arguments: data_tag: D184
type_guessed: string
name: read_data
arguments: data_tag: D73
type_guessed: string

tool: D253: 

Seu saldo e de: R$%.2f



tool: D7: Escolha a opcao:


tool: D170: 0 - Sair

tool: D237: 1 - Depositar Moeda

tool: D10: 

Deposite a sua moeda


tool: D246: 0 - 1 Centavo

tool: D198: 1 - 5 Centavos

tool: D238: 2 - 10 Centavos

tool: D222: 3 - 25 Centavos

tool: D156: 4 - 50 Centavos

tool: D172: 5 - 1 Real

tool: D254: Moeda:

tool: D22: %i

tool: D266: 2 - Escolher refrigerante


tool: D27: Opcao:

tool: D203: 

Escolha o Refrigerante


tool: D307: 0 - Coca-Cola - R$3.50

tool: D119: 1 - Ice - R$5.80

tool: D285: 2 - Guarana - R$2.10

tool: D240: 3 - Suco - R$1.90

tool: D152: 4 - Cafe - R$0.70

tool: D96: 
Refrigerante:

tool: D206: 

====== Saldo Insuficiente ======

tool: D2: 

O seu troco e:


tool: D270: Moedas de R$%.2f: %i


tool: D97: Opcao invalida!


tool: D196: 0

tool: D184: 

Obrigado! Volte sempre!


tool: D73: 

O seu troco e


assistant: ```c
int main(void) {
  float refrigerantes[5], valor[6], troco;
  float saldo = 0;
  int TROCO[6], indice, moeda, cont;
  int caso = 1;
  refrigerantes[0] = 3.50;
  refrigerantes[1] = 5.80;
  refrigerantes[2] = 2.10;
  refrigerantes[3] = 1.90;
  refrigerantes[4] = 0.70;
  valor[0] = 0.01;
  valor[1] = 0.05;
  valor[2] = 0.10;
  valor[3] = 0.25;
  valor[4] = 0.50;
  valor[5] = 1.00;
  while (caso) {
    printf("\n\nSeu saldo e de: R$%.2f\n\n", saldo);
    printf("Escolha a opcao:\n\n");
    printf("0 - Sair\n");
    printf("1 - Depositar Moeda\n");
    printf("2 - Escolher refrigerante\n\n");
    printf("Opcao:");
    scanf("%i", &caso);
    switch (caso) {
    case 1:
      printf("\n\nDeposite a sua moeda\n\n");
      printf("0 - 1 Centavo\n");
      printf("1 - 5 Centavos\n");
      printf("2 - 10 Centavos\n");
      printf("3 - 25 Centavos\n");
      printf("4 - 50 Centavos\n");
      printf("5 - 1 Real\n");
      printf("Moeda:");
      scanf("%i", &moeda);
      saldo = saldo + valor[moeda];
      break;
    case 2:
      printf("\n\nEscolha o Refrigerante\n\n");
      printf("0 - Coca-Cola - R$3.50\n");
      printf("1 - Ice - R$5.80\n");
      printf("2 - Guarana - R$2.10\n");
      printf("3 - Suco - R$1.90\n");
      printf("4 - Cafe - R$0.70\n");
      printf("\nRefrigerante:");
      scanf("%i", &indice);
      if (saldo >= refrigerantes[indice]) {
        troco = saldo - refrigerantes[indice];
        cont = 5;
        while (cont >= 0) {
          TROCO[cont] = 0;
          while (troco >= valor[cont]) {
            TROCO[cont] = TROCO[cont] + 1;
            troco = troco - valor[cont];
          }
          cont = cont - 1;
        }
        cont = 0;
        printf("\n\nO seu troco e:\n\n");
        while (cont < 6) {
          printf("Moedas de R$%.2f: %i\n", valor[cont], TROCO[cont]);
          cont++;
        }
        saldo = 0;
      } else {
        printf("\n\n====== Saldo Insuficiente ======");
      }
      break;
    }
    if (caso > 2) {
      printf("Opcao invalida!\n\n");
    }
  }
  if (saldo != 0) {
    cont = 5;
    while (cont >= 0) {
      TROCO[cont] = 0;
      while (saldo >= valor[cont]) {
        TROCO[cont] = TROCO[cont] + 1;
        saldo = saldo - valor[cont];
      }
      cont = cont - 1;
    }
    cont = 0;
    printf("\n\nO seu troco e\n\n");
    while (cont < 6) {
      printf("Moedas de R$%.2f: %i\n", valor[cont], TROCO[cont]);
      cont++;
    }
    saldo = 0;
  }
  printf("\n\nObrigado! Volte sempre!\n\n");
  return 0;
}
```