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

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

tool_calls: name: disassemble_data
arguments: data_tag: D2
type: string
name: disassemble_data
arguments: data_tag: D20
type: string
name: disassemble_data
arguments: data_tag: D54
type: string
name: disassemble_data
arguments: data_tag: D49
type: string
name: disassemble_data
arguments: data_tag: D6
type: string
name: disassemble_data
arguments: data_tag: D30
type: string

tool: D2: 
----------------------------------------------------------------------------


tool: D20: ----------------------------------------------------------------------------


tool: D54: /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: D49:   Test GetCharFromArray()


tool: D6:   Done.


tool: D30: ----------------------------------------------------------------------------



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");
}
```