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

```asm
<get_pdb_fields>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %rcx,-0x30(%rbp)
  mov    %r8,-0x38(%rbp)
  mov    %r9,-0x40(%rbp)
  mov    0x10(%rbp),%rax
  mov    %rax,-0x48(%rbp)
  mov    0x18(%rbp),%rax
  mov    %rax,-0x50(%rbp)
  mov    0x20(%rbp),%rax
  mov    %rax,-0x58(%rbp)
  mov    0x28(%rbp),%rax
  mov    %rax,-0x60(%rbp)
  mov    0x30(%rbp),%rax
  mov    %rax,-0x68(%rbp)
  mov    0x38(%rbp),%rax
  mov    %rax,-0x70(%rbp)
  mov    0x40(%rbp),%rax
  mov    %rax,-0x78(%rbp)
  mov    0x48(%rbp),%rax
  mov    %rax,-0x80(%rbp)
  mov    0x50(%rbp),%rax
  mov    %rax,-0x88(%rbp)
  mov    0x58(%rbp),%rax
  mov    %rax,-0x90(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x18(%rbp),%rax
  lea    0x6(%rax),%rcx
  lea    -0xe(%rbp),%rax
  mov    $0x5,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  movb   $0x0,-0x9(%rbp)
  mov    -0x28(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x28(%rbp),%rdx
  lea    -0xe(%rbp),%rax
  lea    D8(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  mov    -0x18(%rbp),%rax
  lea    0xc(%rax),%rcx
  mov    -0x30(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  movb   $0x0,(%rax)
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <adjust_pdb_field_string@plt>
  mov    -0x18(%rbp),%rax
  lea    0x10(%rax),%rcx
  mov    -0x60(%rbp),%rax
  mov    $0x1,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  mov    -0x60(%rbp),%rax
  add    $0x1,%rax
  movb   $0x0,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x11(%rax),%rcx
  mov    -0x38(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  movb   $0x0,(%rax)
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <adjust_pdb_field_string@plt>
  mov    -0x18(%rbp),%rax
  add    $0x15,%rax
  movzbl (%rax),%edx
  mov    -0x40(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0x40(%rbp),%rax
  add    $0x1,%rax
  movb   $0x0,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x16(%rax),%rcx
  mov    -0x50(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  mov    -0x50(%rbp),%rax
  add    $0x4,%rax
  movb   $0x0,(%rax)
  mov    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <adjust_pdb_field_string@plt>
  mov    -0x18(%rbp),%rax
  add    $0x1a,%rax
  movzbl (%rax),%edx
  mov    -0x58(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0x58(%rbp),%rax
  add    $0x1,%rax
  movb   $0x0,(%rax)
  mov    -0x90(%rbp),%r8
  mov    -0x88(%rbp),%rdi
  mov    -0x80(%rbp),%rcx
  mov    -0x78(%rbp),%rdx
  mov    -0x70(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    %r8,%r9
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <get_pdb_coordinates@plt>
  cmpl   $0x48,-0x1c(%rbp)
  jle    L19
  mov    -0x18(%rbp),%rax
  lea    0x48(%rax),%rcx
  mov    -0x48(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  mov    -0x48(%rbp),%rax
  add    $0x4,%rax
  movb   $0x0,(%rax)
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <adjust_pdb_field_string@plt>
  jmp    L27
L19:
  mov    -0x48(%rbp),%rax
  movb   $0x0,(%rax)
L27:
  cmpl   $0x4c,-0x1c(%rbp)
  jle    L48
  mov    -0x18(%rbp),%rax
  lea    0x4c(%rax),%rcx
  mov    -0x68(%rbp),%rax
  mov    $0x2,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  mov    -0x68(%rbp),%rax
  add    $0x2,%rax
  movb   $0x0,(%rax)
  jmp    L12
L48:
  mov    -0x68(%rbp),%rax
  movb   $0x0,(%rax)
L12:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L45
  call   <__stack_chk_fail@plt>
L45:
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D8
data_type: string

tool: D8: %5d

assistant: ```c
void get_pdb_fields(const char *record, int reclength, int *serial, char *name, char *resname, char *chain, char *segname, char *resid, char *insertion, char *altloc, char *elementsymbol, float *x, float *y, float *z, float *occup, float *beta) {
  char serialbuf[6];
  strncpy(serialbuf, record + 6, 5);
  serialbuf[5] = '\0';
  *serial = 0;
  sscanf(serialbuf, "%5d", serial);
  strncpy(name, record + 12, 4);
  name[4] = '\0';
  adjust_pdb_field_string(name);
  strncpy(altloc, record + 16, 1);
  altloc[1] = '\0';
  strncpy(resname, record + 17, 4);
  resname[4] = '\0';
  adjust_pdb_field_string(resname);
  chain[0] = record[21];
  chain[1] = '\0';
  strncpy(resid, record + 22, 4);
  resid[4] = '\0';
  adjust_pdb_field_string(resid);
  insertion[0] = record[26];
  insertion[1] = '\0';
  get_pdb_coordinates(record, x, y, z, occup, beta);
  if (reclength >= 73) {
    strncpy(segname, record + 72, 4);
    segname[4] = '\0';
    adjust_pdb_field_string(segname);
  } else {
    segname[0] = '\0';
  }
  if (reclength >= 77) {
    strncpy(elementsymbol, record + 76, 2);
    elementsymbol[2] = '\0';
  } else {
    elementsymbol[0] = '\0';
  }
}
```