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

```asm
<gen_rand>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    D146(%rip),%eax
  cmp    $0x19,%eax
  jne    L26
  movl   $0x0,-0xc(%rbp)
  jmp    L52
L9:
  mov    -0xc(%rbp),%eax
  add    $0x7,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  lea    D18(%rip),%rax
  mov    (%rdx,%rax,1),%rcx
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  lea    D18(%rip),%rax
  mov    (%rdx,%rax,1),%rax
  shr    %rax
  xor    %rax,%rcx
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  lea    D18(%rip),%rax
  mov    (%rdx,%rax,1),%rax
  and    $0x1,%eax
  lea    0x0(,%rax,8),%rdx
  lea    D54(%rip),%rax
  mov    (%rdx,%rax,1),%rax
  xor    %rax,%rcx
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  lea    D18(%rip),%rax
  mov    %rcx,(%rdx,%rax,1)
  addl   $0x1,-0xc(%rbp)
L52:
  cmpl   $0x11,-0xc(%rbp)
  jle    L9
  jmp    L2
L10:
  mov    -0xc(%rbp),%eax
  sub    $0x12,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  lea    D18(%rip),%rax
  mov    (%rdx,%rax,1),%rcx
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  lea    D18(%rip),%rax
  mov    (%rdx,%rax,1),%rax
  shr    %rax
  xor    %rax,%rcx
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  lea    D18(%rip),%rax
  mov    (%rdx,%rax,1),%rax
  and    $0x1,%eax
  lea    0x0(,%rax,8),%rdx
  lea    D54(%rip),%rax
  mov    (%rdx,%rax,1),%rax
  xor    %rax,%rcx
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  lea    D18(%rip),%rax
  mov    %rcx,(%rdx,%rax,1)
  addl   $0x1,-0xc(%rbp)
L2:
  cmpl   $0x18,-0xc(%rbp)
  jle    L10
  movl   $0x0,D146(%rip)
L26:
  mov    D146(%rip),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  lea    D18(%rip),%rax
  mov    (%rdx,%rax,1),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  shl    $0x7,%rax
  and    $0x2b5b2500,%eax
  xor    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  shl    $0xf,%rax
  and    $0xdb8b0000,%eax
  xor    %rax,-0x8(%rbp)
  mov    $0xffffffff,%eax
  and    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  shr    $0x10,%rax
  xor    %rax,-0x8(%rbp)
  mov    D146(%rip),%eax
  add    $0x1,%eax
  mov    %eax,D88(%rip)
  mov    -0x8(%rbp),%rax
  test   %rax,%rax
  js     L13
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L11
L13:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L11:
  movsd  D88(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  pop    %rbp
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D88
datatype: byte[8]

tool: {"D88": [0x00,0x00,0xe0,0xff,0xff,0xff,0xef,0x41]}

assistant: ```c
double gen_rand(void) {
  unsigned long y;
  static int k = 0;
  static unsigned long x[25] = {0x95f24dab, 0x0b685215, 0xe76ccae7, 0xaf3ec239, 0x715fad23, 0x24a590ad, 0x69e4b5ef, 0xbf456141, 0x96bc1b7b, 0xa7bdf825, 0xc1de75b7, 0x8858a9c9, 0x2da87693, 0xb657f9dd, 0xffdc8a9f, 0x8121da71, 0x8b823ecb, 0x885d05f5, 0x4e20cd47, 0x5a9ad5d9, 0x512c0c03, 0xea857ccd, 0x4cc1d30f, 0x8891a8a1, 0xa6b7aadb};
  static unsigned long mag01[2] = {0x0, 0x8ebfd028};
  if (k == 25) {
    int kk;
    for (kk = 0; kk < 25 - 7; kk++) {
      x[kk] = x[kk + 7] ^ (x[kk] >> 1) ^ mag01[x[kk] % 2];
    }
    for (; kk < 25; kk++) {
      x[kk] = x[kk + (7 - 25)] ^ (x[kk] >> 1) ^ mag01[x[kk] % 2];
    }
    k = 0;
  }
  y = x[k];
  y ^= (y << 7) & 0x2b5b2500;
  y ^= (y << 15) & 0xdb8b0000;
  y &= 0xffffffff;
  y ^= (y >> 16);
  k++;
  return ((double)y / (unsigned long)0xffffffff);
}
```