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

```asm
<basic_test>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xc0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D55(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  lea    -0xc0(%rbp),%rax
  mov    %rax,%rdi
  call   <pd_random@plt>
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xc0(%rbp),%rax
  mov    %rax,%rdi
  call   <pd_write_doubles@plt>
  lea    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <pd_random@plt>
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <pd_write_doubles@plt>
  lea    -0x60(%rbp),%rdx
  lea    -0x90(%rbp),%rcx
  lea    -0xc0(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <pd_add@plt>
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x60(%rbp),%rax
  mov    %rax,%rdi
  call   <pd_write_doubles@plt>
  lea    -0x30(%rbp),%rdx
  lea    -0xc0(%rbp),%rcx
  lea    -0x60(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <pd_sub@plt>
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <pd_write_doubles@plt>
  lea    -0x60(%rbp),%rdx
  lea    -0x90(%rbp),%rcx
  lea    -0xc0(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <pd_mul@plt>
  lea    D31(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x60(%rbp),%rax
  mov    %rax,%rdi
  call   <pd_write_doubles@plt>
  lea    -0x30(%rbp),%rdx
  lea    -0xc0(%rbp),%rcx
  lea    -0x60(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <pd_div@plt>
  lea    D12(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <pd_write_doubles@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L7
  call   <__stack_chk_fail@plt>
L7:
  leave
  ret
```

tool_calls: name: read_data
arguments: label: D55
type_guessed: string
name: read_data
arguments: label: D20
type_guessed: string
name: read_data
arguments: label: D38
type_guessed: string
name: read_data
arguments: label: D3
type_guessed: string
name: read_data
arguments: label: D45
type_guessed: string
name: read_data
arguments: label: D31
type_guessed: string
name: read_data
arguments: label: D12
type_guessed: string

tool: D55: Testing some basic operations ...


tool: D20: the first random number a :


tool: D38: the second random number b :


tool: D3: a+b :


tool: D45: a+b-a :


tool: D31: a*b :


tool: D12: a*b/a :


assistant: ```c
int basic_test(void) {
  double a[5], b[5], c[5], d[5];
  printf("Testing some basic operations ...\n");
  srand(time(NULL));
  pd_random(a);
  printf("the first random number a :\n");
  pd_write_doubles(a);
  pd_random(b);
  printf("the second random number b :\n");
  pd_write_doubles(b);
  pd_add(a, b, c);
  printf("a+b :\n");
  pd_write_doubles(c);
  pd_sub(c, a, d);
  printf("a+b-a :\n");
  pd_write_doubles(d);
  pd_mul(a, b, c);
  printf("a*b :\n");
  pd_write_doubles(c);
  pd_div(c, a, d);
  printf("a*b/a :\n");
  pd_write_doubles(d);
  return 0;
}
```