user: 请将以下的汇编代码转换成C语言代码:

```asm
<get_next_time_step>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %rdx,-0x58(%rbp)
  mov    %rcx,-0x60(%rbp)
  mov    %r8,-0x68(%rbp)
  mov    %r9d,-0x6c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1f,-0x40(%rbp)
  movl   $0x1c,-0x3c(%rbp)
  movl   $0x1f,-0x38(%rbp)
  movl   $0x1e,-0x34(%rbp)
  movl   $0x1f,-0x30(%rbp)
  movl   $0x1e,-0x2c(%rbp)
  movl   $0x1f,-0x28(%rbp)
  movl   $0x1f,-0x24(%rbp)
  movl   $0x1e,-0x20(%rbp)
  movl   $0x1f,-0x1c(%rbp)
  movl   $0x1e,-0x18(%rbp)
  movl   $0x1f,-0x14(%rbp)
  mov    -0x60(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x6c(%rbp),%eax
  add    %eax,%edx
  mov    -0x60(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x60(%rbp),%rax
  mov    (%rax),%eax
  cmp    $0x17,%eax
  jle    L20
  mov    -0x60(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x58(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x68(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x68(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x48(%rbp),%rax
  mov    (%rax),%edx
  movslq %edx,%rax
  imul   $0x51eb851f,%rax,%rax
  shr    $0x20,%rax
  sar    $0x7,%eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  imul   $0x190,%eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  test   %eax,%eax
  je     L51
  mov    -0x48(%rbp),%rax
  mov    (%rax),%eax
  and    $0x3,%eax
  test   %eax,%eax
  jne    L57
  mov    -0x48(%rbp),%rax
  mov    (%rax),%edx
  movslq %edx,%rax
  imul   $0x51eb851f,%rax,%rax
  shr    $0x20,%rax
  sar    $0x5,%eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  imul   $0x64,%eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  test   %eax,%eax
  je     L57
L51:
  movl   $0x1d,-0x3c(%rbp)
  jmp    L39
L57:
  movl   $0x1c,-0x3c(%rbp)
L39:
  mov    -0x58(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x50(%rbp),%rax
  mov    (%rax),%eax
  sub    $0x1,%eax
  cltq
  mov    -0x40(%rbp,%rax,4),%eax
  cmp    %eax,%edx
  jle    L20
  mov    -0x58(%rbp),%rax
  movl   $0x1,(%rax)
  mov    -0x50(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x50(%rbp),%rax
  mov    (%rax),%eax
  cmp    $0xd,%eax
  jne    L20
  mov    -0x50(%rbp),%rax
  movl   $0x1,(%rax)
  mov    -0x68(%rbp),%rax
  movl   $0x1,(%rax)
  mov    -0x48(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
L20:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L2
  call   <__stack_chk_fail@plt>
L2:
  leave
  ret
```

assistant: ```c
void get_next_time_step(int *year, int *month, int *day, int *hr, int *jday, int dt) {
  int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  int daymax;
  *hr += dt;
  if (*hr >= 24) {
    *hr = 0;
    *day += 1;
    *jday += 1;
    if ((!((*year) % 400) || (!((*year) % 4) && ((*year) % 100))))
      days[1] = 29;
    else
      days[1] = 28;
    if (*day > days[*month - 1]) {
      *day = 1;
      *month += 1;
      if (*month == 13) {
        *month = 1;
        *jday = 1;
        *year += 1;
      }
    }
  }
}
```