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

```asm
<main>:
  endbr64
  push   %r15
  lea    D12(%rip),%rdi
  push   %r14
  lea    D90(%rip),%r14
  push   %r13
  push   %r12
  lea    D50(%rip),%r12
  push   %rbp
  push   %rbx
  lea    D86(%rip),%rbx
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  mov    %rsp,%r13
  lea    0x4(%rsp),%rbp
  call   <puts@plt>
  nopl   0x0(%rax,%rax,1)
L26:
  mov    %r14,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  mov    (%rsp),%edi
  mov    0x4(%rsp),%esi
  mov    %edi,%eax
  and    %esi,%eax
  cmp    $0xffffffff,%eax
  je     L12
  test   %esi,%esi
  js     L38
  call   <kuvvet_hesabi@plt>
  lea    D74(%rip),%rcx
  lea    D27(%rip),%rdx
  mov    %eax,%r15d
  lea    D17(%rip),%rsi
  lea    D35(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x4(%rsp),%edx
  mov    (%rsp),%esi
  mov    %r15d,%ecx
  lea    D81(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L26
  cs nopw 0x0(%rax,%rax,1)
L38:
  lea    D39(%rip),%rdi
  call   <puts@plt>
  jmp    L26
  nopl   0x0(%rax)
L12:
  xor    %eax,%eax
  lea    D62(%rip),%rdi
  call   <printf@plt>
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L13
  add    $0x18,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L13:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D12
datatype: string
name: disassemble_data
arguments: label: D90
datatype: string
name: disassemble_data
arguments: label: D50
datatype: string
name: disassemble_data
arguments: label: D86
datatype: string
name: disassemble_data
arguments: label: D74
datatype: string
name: disassemble_data
arguments: label: D27
datatype: string
name: disassemble_data
arguments: label: D17
datatype: string
name: disassemble_data
arguments: label: D35
datatype: string
name: disassemble_data
arguments: label: D81
datatype: string
name: disassemble_data
arguments: label: D39
datatype: string
name: disassemble_data
arguments: label: D62
datatype: string

tool: D12: Programdan cikmak icin us ve tabani -1 giriniz.

tool: D90: Us'su alinacak sayiyi giriniz: 

tool: D50: Sayinin Us'sunu giriniz: 

tool: D86: %d

tool: D74: Sonuc

tool: D27: Ust

tool: D17: Taban

tool: D35: %10s%10s%10s


tool: D81: %10d%10d%10d


tool: D39: Us kuvvetini negatif  bir sayi girmeyiniz.

tool: D62: Programdan ciktiniz :)

assistant: ```c
int main() {
  printf("Programdan cikmak icin us ve tabani -1 giriniz.\n");
  int girilen_taban;
  int girilen_us;
  int sonsuz_dongu = 0;
  while (sonsuz_dongu < 1) {
    printf("Us'su alinacak sayiyi giriniz: ");
    scanf("%d", &girilen_taban);
    printf("Sayinin Us'sunu giriniz: ");
    scanf("%d", &girilen_us);
    if ((girilen_taban == -1) && (girilen_us == -1)) {
      printf("Programdan ciktiniz :)");
      break;
    }
    int sayinin_ussu;
    if (girilen_us >= 0) {
      sayinin_ussu = kuvvet_hesabi(girilen_taban, girilen_us);
      printf("%10s%10s%10s\n", "Taban", "Ust", "Sonuc");
      printf("%10d%10d%10d\n", girilen_taban, girilen_us, sayinin_ussu);
    } else {
      printf("Us kuvvetini negatif  bir sayi girmeyiniz.\n");
    }
  }
  return 0;
}
```