user: Translate the below assembly code into C programming language:

```asm
<getSysTime>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  cmpl   $0x8,-0x1c(%rbp)
  je     L91
  mov    -0x28(%rbp),%rax
  lea    D54(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  mov    $0x0,%eax
  jmp    L69
L91:
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cmp    $0x7,%eax
  ja     L53
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D120(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D120(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    -0xb(%rbp),%rax
  lea    D21(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L2
  lea    -0xb(%rbp),%rax
  lea    D109(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L2
  lea    -0xb(%rbp),%rax
  lea    D129(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L2
  lea    -0xb(%rbp),%rax
  lea    D56(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L2
  lea    -0xb(%rbp),%rax
  lea    D22(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L2
  lea    -0xb(%rbp),%rax
  lea    D20(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L2
  lea    -0xb(%rbp),%rax
  lea    D29(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L2
  lea    -0xb(%rbp),%rax
  lea    D21(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L2
L53:
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  movsbl %al,%edx
  mov    -0x28(%rbp),%rax
  lea    D104(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  mov    $0x0,%eax
  jmp    L69
L2:
  mov    -0x18(%rbp),%rax
  add    $0x7,%rax
  movzbl (%rax),%eax
  movsbl %al,%r9d
  mov    -0x18(%rbp),%rax
  add    $0x6,%rax
  movzbl (%rax),%eax
  movsbl %al,%r8d
  mov    -0x18(%rbp),%rax
  add    $0x5,%rax
  movzbl (%rax),%eax
  movsbl %al,%edi
  mov    -0x18(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movsbl %al,%esi
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%r11d
  mov    -0x18(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  movsbl %al,%r10d
  mov    -0x18(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  movsbl %al,%ecx
  lea    -0xb(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  push   %r9
  push   %r8
  push   %rdi
  push   %rsi
  mov    %r11d,%r9d
  mov    %r10d,%r8d
  lea    D64(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  add    $0x20,%rsp
  mov    $0x1,%eax
L69:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L115
  call   <__stack_chk_fail@plt>
L115:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D54
type_guessed: string
name: disassemble_data
arguments: tag: D21
type_guessed: string
name: disassemble_data
arguments: tag: D109
type_guessed: string
name: disassemble_data
arguments: tag: D129
type_guessed: string
name: disassemble_data
arguments: tag: D56
type_guessed: string
name: disassemble_data
arguments: tag: D22
type_guessed: string
name: disassemble_data
arguments: tag: D20
type_guessed: string
name: disassemble_data
arguments: tag: D29
type_guessed: string
name: disassemble_data
arguments: tag: D104
type_guessed: string
name: disassemble_data
arguments: tag: D64
type_guessed: string

tool: D54: Systemzeit: Len <>8 Bytes

tool: D21: So

tool: D109: Mo

tool: D129: Di

tool: D56: Mi

tool: D22: Do

tool: D20: Fr

tool: D29: Sa

tool: D104: Fehler Tagwandlung: %02X

tool: D64: %s,%02X.%02X.%02X%02X %02x:%02X:%02X

assistant: ```c
int getSysTime(char *recv, int len, char *result) {
  char day[3];
  if (len != 8) {
    sprintf(result, "Systemzeit: Len <>8 Bytes");
    return (0);
  }
  switch (recv[4]) {
  case 0:
    strcpy(day, "So");
    break;
  case 1:
    strcpy(day, "Mo");
    break;
  case 2:
    strcpy(day, "Di");
    break;
  case 3:
    strcpy(day, "Mi");
    break;
  case 4:
    strcpy(day, "Do");
    break;
  case 5:
    strcpy(day, "Fr");
    break;
  case 6:
    strcpy(day, "Sa");
    break;
  case 7:
    strcpy(day, "So");
    break;
  default:
    sprintf(result, "Fehler Tagwandlung: %02X", recv[4]);
    return (0);
  }
  sprintf(result, "%s,%02X.%02X.%02X%02X %02x:%02X:%02X", day, recv[3], recv[2], recv[0], recv[1], recv[5], recv[6], recv[7]);
  return (1);
}
```