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

```asm
<TestGetCharFromArray>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x40,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x38(%rsp)
  xor    %eax,%eax
  movq   $0x0,0x8(%rsp)
  movq   $0xffffffffffffffff,0x10(%rsp)
  movabs $0x101010101010101,%rax
  mov    %rax,0x18(%rsp)
  movabs $0xfefefefefefefefe,%rax
  mov    %rax,0x20(%rsp)
  movabs $0x7081e0f1d0c1b0a1,%rax
  mov    %rax,0x28(%rsp)
  movabs $0xf1f0f0f1f0f0f1f0,%rax
  mov    %rax,0x30(%rsp)
  lea    D25(%rip),%rdi
  call   <printf@plt>
  lea    D39(%rip),%rdi
  call   <printf@plt>
  lea    D6(%rip),%r12
  mov    %r12,%rdi
  call   <printf@plt>
  mov    $0x0,%r9d
  mov    $0xffffffff,%r8d
  mov    $0x8,%ecx
  mov    $0x0,%edx
  mov    $0xe7,%esi
  lea    D58(%rip),%rbx
  mov    %rbx,%rdi
  call   <TestGetCharFromArrayEx@plt>
  lea    0x8(%rsp),%rbp
  mov    $0x0,%r9d
  mov    $0xffffffff,%r8d
  mov    $0x0,%ecx
  mov    %rbp,%rdx
  mov    $0xe8,%esi
  mov    %rbx,%rdi
  call   <TestGetCharFromArrayEx@plt>
  mov    $0x0,%r9d
  mov    $0xffffffff,%r8d
  mov    $0x7,%ecx
  mov    %rbp,%rdx
  mov    $0xea,%esi
  mov    %rbx,%rdi
  call   <TestGetCharFromArrayEx@plt>
  mov    $0x0,%r9d
  mov    $0xffffffff,%r8d
  mov    $0xfffffff8,%ecx
  mov    %rbp,%rdx
  mov    $0xeb,%esi
  mov    %rbx,%rdi
  call   <TestGetCharFromArrayEx@plt>
  mov    $0x0,%r9d
  mov    $0x0,%r8d
  mov    $0x8,%ecx
  mov    %rbp,%rdx
  mov    $0xee,%esi
  mov    %rbx,%rdi
  call   <TestGetCharFromArrayEx@plt>
  lea    0x10(%rsp),%rdx
  mov    $0xff,%r9d
  mov    $0x0,%r8d
  mov    $0x8,%ecx
  mov    $0xef,%esi
  mov    %rbx,%rdi
  call   <TestGetCharFromArrayEx@plt>
  lea    0x18(%rsp),%rdx
  mov    $0xff,%r9d
  mov    $0x0,%r8d
  mov    $0x8,%ecx
  mov    $0xf0,%esi
  mov    %rbx,%rdi
  call   <TestGetCharFromArrayEx@plt>
  lea    0x20(%rsp),%rdx
  mov    $0x0,%r9d
  mov    $0x0,%r8d
  mov    $0x8,%ecx
  mov    $0xf1,%esi
  mov    %rbx,%rdi
  call   <TestGetCharFromArrayEx@plt>
  lea    0x28(%rsp),%rdx
  mov    $0xaa,%r9d
  mov    $0x0,%r8d
  mov    $0x8,%ecx
  mov    $0xf2,%esi
  mov    %rbx,%rdi
  call   <TestGetCharFromArrayEx@plt>
  lea    0x30(%rsp),%rdx
  mov    $0x49,%r9d
  mov    $0x0,%r8d
  mov    $0x8,%ecx
  mov    $0xf3,%esi
  mov    %rbx,%rdi
  call   <TestGetCharFromArrayEx@plt>
  mov    %r12,%rdi
  call   <printf@plt>
  lea    D47(%rip),%rdi
  call   <printf@plt>
  lea    D41(%rip),%rdi
  call   <printf@plt>
  mov    0x38(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L3
  add    $0x40,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L3:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D25
type_infered: string
name: extract_symbolic_data
arguments: tag: D39
type_infered: string
name: extract_symbolic_data
arguments: tag: D6
type_infered: string
name: extract_symbolic_data
arguments: tag: D58
type_infered: string
name: extract_symbolic_data
arguments: tag: D47
type_infered: string
name: extract_symbolic_data
arguments: tag: D41
type_infered: string

tool: D25: 
----------------------------------------------------------------------------


tool: D39:   Test GetCharFromArray()


tool: D6: ----------------------------------------------------------------------------


tool: D58: /scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/NaMorham/QUT-Tutoring-1-C/refs/heads/master/GetLastBit/main.c

tool: D47:   Done.


tool: D41: ----------------------------------------------------------------------------



assistant: ```c
void TestGetCharFromArray() {
  char *dummy = NULL;
  char result = 0;
  char test1[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  char test2[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
  char test3[8] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
  char test4[8] = {0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe};
  char test5[8] = {0xA1, 0xB0, 0xC1, 0xD0, 0xF1, 0xE0, 0x81, 0x70};
  char test6[8] = {0xf0, 0xf1, 0xf0, 0xf0, 0xf1, 0xf0, 0xf0, 0xf1};
  printf("\n----------------------------------------------------------------------------\n");
  printf("  Test GetCharFromArray()\n");
  printf("----------------------------------------------------------------------------\n");
  TestGetCharFromArrayEx("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/NaMorham/QUT-Tutoring-1-C/refs/heads/master/GetLastBit/main.c", 231, dummy, 8, -1, 0x00);
  TestGetCharFromArrayEx("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/NaMorham/QUT-Tutoring-1-C/refs/heads/master/GetLastBit/main.c", 232, test1, 0, -1, 0x00);
  TestGetCharFromArrayEx("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/NaMorham/QUT-Tutoring-1-C/refs/heads/master/GetLastBit/main.c", 234, test1, 7, -1, 0x00);
  TestGetCharFromArrayEx("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/NaMorham/QUT-Tutoring-1-C/refs/heads/master/GetLastBit/main.c", 235, test1, -8, -1, 0x00);
  TestGetCharFromArrayEx("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/NaMorham/QUT-Tutoring-1-C/refs/heads/master/GetLastBit/main.c", 238, test1, 8, 0, 0x00);
  TestGetCharFromArrayEx("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/NaMorham/QUT-Tutoring-1-C/refs/heads/master/GetLastBit/main.c", 239, test2, 8, 0, 0xff);
  TestGetCharFromArrayEx("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/NaMorham/QUT-Tutoring-1-C/refs/heads/master/GetLastBit/main.c", 240, test3, 8, 0, 0xff);
  TestGetCharFromArrayEx("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/NaMorham/QUT-Tutoring-1-C/refs/heads/master/GetLastBit/main.c", 241, test4, 8, 0, 0x00);
  TestGetCharFromArrayEx("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/NaMorham/QUT-Tutoring-1-C/refs/heads/master/GetLastBit/main.c", 242, test5, 8, 0, 0xaa);
  TestGetCharFromArrayEx("/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/NaMorham/QUT-Tutoring-1-C/refs/heads/master/GetLastBit/main.c", 243, test6, 8, 0, 0x49);
  printf("----------------------------------------------------------------------------\n");
  printf("  Done.\n");
  printf("----------------------------------------------------------------------------\n\n");
}
```