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

```asm
<init>:
  endbr64
  push   %r15
  mov    %rcx,%r15
  push   %r14
  mov    %edi,%r14d
  imul   %esi,%r14d
  push   %r13
  push   %r12
  mov    %esi,%r12d
  mov    $0x4,%esi
  push   %rbp
  mov    %rdx,%rbp
  push   %rbx
  movslq %r14d,%r13
  mov    %edi,%ebx
  mov    %r13,%rdi
  sub    $0x18,%rsp
  call   <calloc@plt>
  mov    %r13,%rdi
  mov    $0x4,%esi
  mov    %rax,0x0(%rbp)
  call   <calloc@plt>
  mov    %rax,(%r15)
  mov    %rax,%r13
  test   %ebx,%ebx
  jle    L79
  mov    0x0(%rbp),%rsi
  movslq %r12d,%rcx
  xor    %edx,%edx
  shl    $0x2,%rcx
  lea    (%rax,%rcx,1),%rdi
  lea    (%rsi,%rcx,1),%r8
  xor    %eax,%eax
  cs nopw 0x0(%rax,%rax,1)
L91:
  add    $0x1,%edx
  movl   $0x0,(%rsi,%rax,1)
  movl   $0x0,-0x4(%r8,%rax,1)
  movl   $0x0,0x0(%r13,%rax,1)
  movl   $0x0,-0x4(%rdi,%rax,1)
  add    %rcx,%rax
  cmp    %edx,%ebx
  jne    L91
L79:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x8(%rsp)
  test   %r12d,%r12d
  jle    L84
  sub    %r12d,%r14d
  movslq %r12d,%rsi
  mov    0x0(%rbp),%rdi
  movslq %r14d,%rax
  lea    0x0(,%rsi,4),%r14
  lea    (%rsi,%rax,1),%rdx
  shl    $0x2,%rax
  lea    (%rdi,%r14,1),%r11
  shl    $0x2,%rdx
  lea    (%rdi,%rax,1),%r15
  lea    0x0(%r13,%rax,1),%rbx
  lea    0x0(%r13,%rdx,1),%r9
  lea    (%rdi,%rdx,1),%r8
  cmp    %r9,%r15
  lea    0x0(%r13,%r14,1),%r10
  setae  0xc(%rsp)
  cmp    %r8,%rbx
  setae  %cl
  or     0xc(%rsp),%cl
  cmp    %rax,%r14
  setle  %al
  test   %rdx,%rdx
  setle  %dl
  or     %edx,%eax
  and    %eax,%ecx
  cmp    %r11,%rbx
  setae  %al
  cmp    %r9,%rdi
  mov    %ecx,%edx
  setae  %cl
  or     %ecx,%eax
  and    %edx,%eax
  cmp    %r8,%r13
  setae  %dl
  cmp    %r10,%r15
  setae  %cl
  or     %ecx,%edx
  test   %dl,%al
  je     L31
  cmp    %r11,%r13
  setae  %al
  cmp    %r10,%rdi
  setae  %dl
  or     %dl,%al
  je     L31
  mov    %r14,%rdx
  xor    %esi,%esi
  call   <memset@plt>
  mov    %r14,%rdx
  xor    %esi,%esi
  mov    %r15,%rdi
  call   <memset@plt>
  mov    %r14,%rdx
  xor    %esi,%esi
  mov    %r13,%rdi
  call   <memset@plt>
  mov    %r14,%rdx
  xor    %esi,%esi
  mov    %rbx,%rdi
  call   <memset@plt>
L84:
  xor    %eax,%eax
  mov    $0x3039,%edi
  mov    %r12d,%r14d
  mov    $0x1,%r13d
  call   <srand48@plt>
  lea    -0x3(%r12),%eax
  cmpl   $0x1,0x8(%rsp)
  mov    %eax,0xc(%rsp)
  jle    L21
  nopl   0x0(%rax,%rax,1)
L104:
  cmp    $0x2,%r12d
  jle    L30
  mov    0xc(%rsp),%ecx
  movslq %r14d,%rax
  lea    0x4(,%rax,4),%r15
  lea    0x2(%rax,%rcx,1),%rbx
  shl    $0x2,%rbx
  xchg   %ax,%ax
L92:
  xor    %eax,%eax
  call   <drand48@plt>
  xor    %ecx,%ecx
  mov    0x0(%rbp),%rdx
  test   %eax,%eax
  setle  %cl
  mov    %ecx,(%rdx,%r15,1)
  add    $0x4,%r15
  cmp    %r15,%rbx
  jne    L92
L30:
  add    $0x1,%r13d
  add    %r12d,%r14d
  cmp    0x8(%rsp),%r13d
  jne    L104
L21:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L31:
  xor    %eax,%eax
  xchg   %ax,%ax
L18:
  movl   $0x0,(%rdi,%rax,4)
  movl   $0x0,(%r15,%rax,4)
  movl   $0x0,0x0(%r13,%rax,4)
  movl   $0x0,(%rbx,%rax,4)
  add    $0x1,%rax
  cmp    %rax,%rsi
  jne    L18
  jmp    L84
```

assistant: ```c
void init(int Nrows, int Ncolumns, int **board, int **newboard) {
  int r, c, n;
  *board = (int *)calloc(Nrows * Ncolumns, sizeof(int));
  *newboard = (int *)calloc(Nrows * Ncolumns, sizeof(int));
  for (r = 0; r < Nrows; ++r) {
    (*board)[((r)*Ncolumns + (0))] = 0;
    (*board)[((r)*Ncolumns + (Ncolumns - 1))] = 0;
    (*newboard)[((r)*Ncolumns + (0))] = 0;
    (*newboard)[((r)*Ncolumns + (Ncolumns - 1))] = 0;
  }
  for (c = 0; c < Ncolumns; ++c) {
    (*board)[((0) * Ncolumns + (c))] = 0;
    (*board)[((Nrows - 1) * Ncolumns + (c))] = 0;
    (*newboard)[((0) * Ncolumns + (c))] = 0;
    (*newboard)[((Nrows - 1) * Ncolumns + (c))] = 0;
  }
  srand48(12345);
  for (r = 1; r < Nrows - 1; ++r) {
    for (c = 1; c < Ncolumns - 1; ++c) {
      double rn = drand48();
      (*board)[((r)*Ncolumns + (c))] = 1 * (rn < 0.5) + 0 * (rn >= 0.5);
    }
  }
}
```