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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x10(%rbp)
  lea    D41(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D119(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x24(%rbp),%rax
  mov    %rax,%rsi
  lea    D172(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  jmp    L48
L47:
  lea    D56(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D81(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    D169(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x1c(%rbp),%rax
  mov    %rax,%rsi
  lea    D81(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    D142(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D81(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    D166(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x14(%rbp),%rax
  mov    %rax,%rsi
  lea    D81(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movss  -0x1c(%rbp),%xmm1
  movss  -0x20(%rbp),%xmm0
  addss  %xmm1,%xmm0
  movss  -0x18(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0xc(%rbp)
  movss  -0x14(%rbp),%xmm1
  movss  -0xc(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jbe    L13
  movss  -0x20(%rbp),%xmm1
  movss  -0x18(%rbp),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x10(%rbp)
  mov    -0x24(%rbp),%eax
  mov    %eax,%esi
  lea    D155(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movss  -0x14(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movq   %xmm2,%rax
  movq   %rax,%xmm0
  lea    D151(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  pxor   %xmm3,%xmm3
  cvtss2sd -0x10(%rbp),%xmm3
  movq   %xmm3,%rax
  movq   %rax,%xmm0
  lea    D98(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D128(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L13:
  lea    D119(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x24(%rbp),%rax
  mov    %rax,%rsi
  lea    D172(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
L48:
  mov    -0x24(%rbp),%eax
  cmp    $0xffffffff,%eax
  jne    L47
  mov    -0x24(%rbp),%eax
  cmp    $0xffffffff,%eax
  jne    L14
  lea    D113(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L14:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L7
  call   <__stack_chk_fail@plt>
L7:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D41
type_guessed: string
name: retrieve_data
arguments: label: D119
type_guessed: string
name: retrieve_data
arguments: label: D172
type_guessed: string
name: retrieve_data
arguments: label: D56
type_guessed: string
name: retrieve_data
arguments: label: D81
type_guessed: string
name: retrieve_data
arguments: label: D169
type_guessed: string
name: retrieve_data
arguments: label: D142
type_guessed: string
name: retrieve_data
arguments: label: D166
type_guessed: string
name: retrieve_data
arguments: label: D155
type_guessed: string
name: retrieve_data
arguments: label: D151
type_guessed: string
name: retrieve_data
arguments: label: D98
type_guessed: string
name: retrieve_data
arguments: label: D128
type_guessed: string
name: retrieve_data
arguments: label: D113
type_guessed: string

tool: D41: Cikis icin -1 giriniz.

tool: D119: Hesap numarasini girin:

tool: D172: %d

tool: D56: Ilk bakiyeyi giriniz:

tool: D81: %f

tool: D169: Toplam harcamalari giriniz:

tool: D142: Toplam kredileri girin:

tool: D166: Kredi limitini giriniz:

tool: D155: Hesap numarasi:%d


tool: D151: Kredi limiti:%.2f


tool: D98: Bakiye:%.2f


tool: D128: Kredi limiti asildi.

tool: D113: Program sonlandirilmistir.

assistant: ```c
int main() {
  int hesap_numarasi;
  float yeni_bakiye, ilk_bakiye, musterinin_harcamasi, aktarilan_kredi, kredi_limiti, bakiye = 0;
  printf("Cikis icin -1 giriniz.\n");
  printf("Hesap numarasini girin:");
  scanf("%d", &hesap_numarasi);
  while (hesap_numarasi != -1) {
    printf("Ilk bakiyeyi giriniz:");
    scanf("%f", &ilk_bakiye);
    printf("Toplam harcamalari giriniz:");
    scanf("%f", &musterinin_harcamasi);
    printf("Toplam kredileri girin:");
    scanf("%f", &aktarilan_kredi);
    printf("Kredi limitini giriniz:");
    scanf("%f", &kredi_limiti);
    yeni_bakiye = musterinin_harcamasi + ilk_bakiye - aktarilan_kredi;
    if (yeni_bakiye > kredi_limiti) {
      bakiye = ilk_bakiye + aktarilan_kredi;
      printf("Hesap numarasi:%d\n", hesap_numarasi);
      printf("Kredi limiti:%.2f\n", kredi_limiti);
      printf("Bakiye:%.2f\n", bakiye);
      printf("Kredi limiti asildi.\n");
    }
    printf("Hesap numarasini girin:");
    scanf("%d", &hesap_numarasi);
  }
  if (hesap_numarasi == -1) {
    printf("Program sonlandirilmistir.");
  }
  return 0;
}
```