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

```asm
<check_the_check>:
  endbr64
  movslq %esi,%rax
  push   %r15
  movslq %edx,%r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  lea    (%rax,%rax,2),%rbp
  push   %rbx
  shl    $0x2,%rbp
  mov    %rdi,%rbx
  lea    (%rdi,%rbp,1),%r13
  sub    $0x58,%rsp
  movsbl 0x0(%r13,%r15,1),%edi
  mov    %esi,0x40(%rsp)
  call   <islower@plt>
  lea    -0x1(%r15),%ecx
  lea    -0x18(%rbx,%rbp,1),%r11
  movl   $0x1,0x20(%rsp)
  cmp    $0x1,%eax
  mov    %eax,%edx
  movslq %ecx,%r14
  mov    %ecx,0x24(%rsp)
  sbb    %r9d,%r9d
  mov    %r11,0x8(%rsp)
  and    $0x20,%r9d
  add    $0x42,%r9d
  cmp    $0x1,%eax
  sbb    %r8d,%r8d
  and    $0x20,%r8d
  add    $0x52,%r8d
  cmp    $0x1,%eax
  sbb    %eax,%eax
  and    $0x20,%eax
  add    $0x4e,%eax
  cmp    $0x1,%edx
  sbb    %edi,%edi
  and    $0x20,%edi
  add    $0x51,%edi
  cmp    $0x1,%edx
  sbb    %esi,%esi
  and    $0x20,%esi
  add    $0x50,%esi
  cmp    %al,(%r11,%r14,1)
  je     L792
  lea    -0xc(%rbx,%rbp,1),%rcx
  mov    %r15,%r12
  mov    %rcx,%r10
  lea    -0x2(%r15),%ecx
  movslq %ecx,%rcx
  mov    %r10,0x18(%rsp)
  mov    %rcx,0x10(%rsp)
  cmp    %al,(%r10,%rcx,1)
  je     L792
  lea    0x18(%rbx,%rbp,1),%rcx
  mov    %rcx,0x28(%rsp)
  cmp    %al,(%rcx,%r14,1)
  je     L792
  lea    0xc(%rbp),%r10
  mov    0x10(%rsp),%rcx
  lea    (%rbx,%r10,1),%r11
  mov    %r10,0x38(%rsp)
  mov    %r11,0x30(%rsp)
  cmp    %al,(%r11,%rcx,1)
  je     L792
  lea    0x1(%r15),%r10d
  mov    0x8(%rsp),%rcx
  mov    %r10d,0x44(%rsp)
  movslq %r10d,%r10
  mov    %r10,0x48(%rsp)
  mov    %r10,%r11
  cmp    %al,(%rcx,%r10,1)
  je     L792
  lea    0x2(%r15),%r10d
  mov    0x18(%rsp),%rcx
  movslq %r10d,%r10
  cmp    %al,(%rcx,%r10,1)
  je     L792
  mov    0x28(%rsp),%rcx
  cmp    %al,(%rcx,%r11,1)
  je     L792
  mov    0x30(%rsp),%rcx
  cmp    %al,(%rcx,%r10,1)
  je     L792
  test   %edx,%edx
  je     L441
  cmp    %sil,(%rcx,%r14,1)
  je     L792
  cmp    %sil,(%rcx,%r11,1)
  je     L792
L137:
  cmpl   $0x2,0x24(%rsp)
  jle    L54
  lea    -0x3(%r15),%rdx
  lea    -0x4(%r12),%eax
  mov    0x10(%rsp),%rcx
  sub    %rax,%rdx
  jmp    L330
  nopl   0x0(%rax,%rax,1)
L847:
  movslq %ecx,%rax
  sub    $0x1,%rcx
  cmp    %rcx,%rdx
  je     L542
L330:
  movzbl 0x1(%r13,%rcx,1),%eax
  cmp    $0x2e,%al
  je     L847
L500:
  cmp    %al,%dil
  je     L333
  cmp    %al,%r8b
  je     L333
  cmpl   $0x8,0x44(%rsp)
  jg     L574
  mov    $0x7,%edx
  mov    %r10,%rax
  sub    %r12d,%edx
  lea    0x3(%rdx,%r15,1),%rcx
  jmp    L465
  nopl   0x0(%rax)
L433:
  movslq %eax,%rdx
  add    $0x1,%rax
  cmp    %rax,%rcx
  je     L389
L465:
  movzbl -0x1(%r13,%rax,1),%edx
  cmp    $0x2e,%dl
  je     L433
L571:
  cmp    %dl,%r8b
  je     L333
  cmp    %dl,%dil
  je     L333
  mov    0x40(%rsp),%eax
  lea    -0x1(%rax),%esi
  lea    (%r15,%rbp,1),%rax
  add    %rbx,%rax
  mov    %esi,%edx
  cmp    $0x2,%esi
  jg     L537
  jmp    L459
  nopw   0x0(%rax,%rax,1)
L757:
  sub    $0x1,%edx
  sub    $0xc,%rax
  cmp    $0x2,%edx
  je     L362
L537:
  movzbl -0xc(%rax),%ecx
  cmp    $0x2e,%cl
  je     L757
L642:
  cmp    %cl,%dil
  je     L333
  cmp    %cl,%r8b
  je     L333
  mov    0x40(%rsp),%r10d
  mov    0x38(%rsp),%r13
  lea    (%r15,%rbp,1),%rax
  add    %rbx,%rax
  add    $0x1,%r10d
  add    %rbx,%r13
  mov    %r10d,%edx
  cmp    $0x8,%r10d
  jle    L735
  jmp    L247
  nopl   0x0(%rax)
L796:
  add    $0x1,%edx
  add    $0xc,%rax
  cmp    $0x9,%edx
  je     L61
L735:
  movzbl 0xc(%rax),%ecx
  cmp    $0x2e,%cl
  je     L796
L262:
  cmp    %cl,%dil
  je     L333
  cmp    %cl,%r8b
  je     L333
  cmp    $0x2,%esi
  setg   %r11b
  cmpl   $0x2,0x24(%rsp)
  setg   %r12b
  test   %r11b,%r11b
  je     L471
  test   %r12b,%r12b
  je     L471
  lea    (%r15,%rbp,1),%rax
  mov    0x24(%rsp),%ecx
  mov    %esi,%edx
  add    %rbx,%rax
  jmp    L92
  nopl   0x0(%rax)
L8:
  sub    $0x1,%edx
  sub    $0x1,%ecx
  sub    $0xd,%rax
  cmp    $0x2,%edx
  jle    L420
  cmp    $0x2,%ecx
  jle    L420
L92:
  movzbl -0xd(%rax),%r8d
  cmp    $0x2e,%r8b
  je     L8
L727:
  cmp    %r8b,%r9b
  je     L333
  cmp    %r8b,%dil
  je     L333
  mov    0x44(%rsp),%ecx
  cmp    $0x8,%ecx
  setle  %dl
  test   %r11b,%r11b
  je     L170
  lea    (%r15,%rbp,1),%rax
  add    %rbx,%rax
  test   %dl,%dl
  jne    L334
  jmp    L170
  nopl   0x0(%rax)
L713:
  sub    $0x1,%esi
  add    $0x1,%ecx
  sub    $0xb,%rax
  cmp    $0x2,%esi
  jle    L409
  cmp    $0x8,%ecx
  jg     L409
L334:
  movzbl -0xb(%rax),%r8d
  cmp    $0x2e,%r8b
  je     L713
L737:
  cmp    %r8b,%r9b
  je     L333
  cmp    %r8b,%dil
  je     L333
  cmp    $0x8,%r10d
  setle  %cl
  test   %r12b,%r12b
  je     L145
  lea    (%r15,%rbp,1),%rax
  mov    0x24(%rsp),%r11d
  mov    %r10d,%esi
  add    %rbx,%rax
  test   %cl,%cl
  jne    L106
  jmp    L145
  nopl   0x0(%rax)
L412:
  add    $0x1,%esi
  sub    $0x1,%r11d
  add    $0xb,%rax
  cmp    $0x8,%esi
  jg     L115
  cmp    $0x2,%r11d
  jle    L115
L106:
  movzbl 0xb(%rax),%r8d
  cmp    $0x2e,%r8b
  je     L412
L229:
  cmp    %r8b,%dil
  je     L333
  cmp    %r8b,%r9b
  je     L333
  test   %dl,%dl
  je     L431
  lea    (%r15,%rbp,1),%rax
  add    %rbx,%rax
  test   %cl,%cl
  je     L431
  mov    0x44(%rsp),%ecx
  jmp    L60
L272:
  add    $0x1,%r10d
  add    $0x1,%ecx
  add    $0xd,%rax
  cmp    $0x8,%r10d
  jg     L151
  cmp    $0x8,%ecx
  jg     L151
L60:
  movzbl 0xd(%rax),%edx
  cmp    $0x2e,%dl
  je     L272
L629:
  cmp    %dl,%r9b
  sete   %r11b
  cmp    %dl,%dil
  sete   %al
  or     %eax,%r11d
  movzbl %r11b,%eax
  mov    %eax,0x20(%rsp)
L792:
  mov    0x20(%rsp),%eax
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L333:
  movl   $0x1,0x20(%rsp)
  jmp    L792
  nopw   0x0(%rax,%rax,1)
L441:
  mov    0x18(%rsp),%rax
  cmp    %sil,(%rax,%r14,1)
  je     L792
  mov    0x48(%rsp),%rdx
  movl   $0x1,0x20(%rsp)
  cmp    %sil,(%rax,%rdx,1)
  jne    L137
  jmp    L792
  nopl   0x0(%rax)
L542:
  movzbl 0x0(%r13,%rax,1),%eax
  jmp    L500
  nopl   0x0(%rax,%rax,1)
L389:
  movzbl 0x0(%r13,%rdx,1),%edx
  jmp    L571
  nopl   0x0(%rax,%rax,1)
L362:
  movzbl 0x18(%rbx,%r15,1),%ecx
  jmp    L642
  nopl   0x0(%rax,%rax,1)
L61:
  movzbl 0x6c(%rbx,%r15,1),%ecx
  jmp    L262
L420:
  movslq %edx,%rdx
  movslq %ecx,%rcx
  lea    (%rdx,%rdx,2),%rax
  lea    (%rbx,%rax,4),%rax
  movzbl (%rax,%rcx,1),%r8d
  jmp    L727
L54:
  movzbl 0x0(%r13,%r14,1),%eax
  jmp    L500
L409:
  movslq %esi,%rsi
  movslq %ecx,%rcx
  lea    (%rsi,%rsi,2),%rax
  lea    (%rbx,%rax,4),%rax
  movzbl (%rax,%rcx,1),%r8d
  jmp    L737
L574:
  mov    0x48(%rsp),%rax
  movzbl 0x0(%r13,%rax,1),%edx
  jmp    L571
L115:
  movslq %esi,%rsi
  lea    (%rsi,%rsi,2),%rax
  lea    (%rbx,%rax,4),%rsi
  movslq %r11d,%rax
  movzbl (%rsi,%rax,1),%r8d
  jmp    L229
L459:
  mov    0x18(%rsp),%rax
  movzbl (%rax,%r15,1),%ecx
  jmp    L642
L151:
  movslq %r10d,%r10
  lea    (%r10,%r10,2),%rax
  lea    (%rbx,%rax,4),%rdx
  movslq %ecx,%rax
  movzbl (%rdx,%rax,1),%edx
  jmp    L629
L247:
  movzbl 0x0(%r13,%r15,1),%ecx
  jmp    L262
L471:
  mov    0x18(%rsp),%rax
  movzbl (%rax,%r14,1),%r8d
  jmp    L727
L170:
  mov    0x18(%rsp),%rax
  mov    0x48(%rsp),%rsi
  movzbl (%rax,%rsi,1),%r8d
  jmp    L737
L145:
  movzbl 0x0(%r13,%r14,1),%r8d
  jmp    L229
L431:
  mov    0x48(%rsp),%rax
  movzbl 0x0(%r13,%rax,1),%edx
  jmp    L629
```

assistant: ```c
int check_the_check(char chess_board[12][12], int i, int j) {
  int is_black_king;
  char king;
  char opp_king, opp_queen, opp_knight, opp_rook, opp_bishop, opp_pawn;
  int next_i, next_j;
  is_black_king = islower(chess_board[i][j]);
  opp_king = is_black_king ? 'K' : 'k';
  opp_queen = is_black_king ? 'Q' : 'q';
  opp_knight = is_black_king ? 'N' : 'n';
  opp_rook = is_black_king ? 'R' : 'r';
  opp_bishop = is_black_king ? 'B' : 'b';
  opp_pawn = is_black_king ? 'P' : 'p';
  if (chess_board[i - 2][j - 1] == opp_knight || chess_board[i - 1][j - 2] == opp_knight || chess_board[i + 2][j - 1] == opp_knight || chess_board[i + 1][j - 2] == opp_knight || chess_board[i - 2][j + 1] == opp_knight || chess_board[i - 1][j + 2] == opp_knight || chess_board[i + 2][j + 1] == opp_knight || chess_board[i + 1][j + 2] == opp_knight) {
    return 1;
  }
  if (is_black_king) {
    if (chess_board[i + 1][j - 1] == opp_pawn || chess_board[i + 1][j + 1] == opp_pawn)
      return 1;
  } else {
    if (chess_board[i - 1][j - 1] == opp_pawn || chess_board[i - 1][j + 1] == opp_pawn)
      return 1;
  }
  for (next_i = i, next_j = j - 1; next_j > 2; --next_j) {
    if (chess_board[next_i][next_j] != '.')
      break;
  }
  if (chess_board[next_i][next_j] == opp_rook || chess_board[next_i][next_j] == opp_queen) {
    return 1;
  };
  for (next_i = i, next_j = j + 1; next_j < 9; ++next_j) {
    if (chess_board[next_i][next_j] != '.')
      break;
  }
  if (chess_board[next_i][next_j] == opp_rook || chess_board[next_i][next_j] == opp_queen) {
    return 1;
  };
  for (next_i = i - 1, next_j = j; next_i > 2; --next_i) {
    if (chess_board[next_i][next_j] != '.')
      break;
  }
  if (chess_board[next_i][next_j] == opp_rook || chess_board[next_i][next_j] == opp_queen) {
    return 1;
  };
  for (next_i = i + 1, next_j = j; next_i < 9; ++next_i) {
    if (chess_board[next_i][next_j] != '.')
      break;
  }
  if (chess_board[next_i][next_j] == opp_rook || chess_board[next_i][next_j] == opp_queen) {
    return 1;
  };
  for (next_i = i - 1, next_j = j - 1; next_i > 2 && next_j > 2; --next_i, --next_j) {
    if (chess_board[next_i][next_j] != '.')
      break;
  }
  if (chess_board[next_i][next_j] == opp_bishop || chess_board[next_i][next_j] == opp_queen) {
    return 1;
  };
  for (next_i = i - 1, next_j = j + 1; next_i > 2 && next_j < 9; --next_i, ++next_j) {
    if (chess_board[next_i][next_j] != '.')
      break;
  }
  if (chess_board[next_i][next_j] == opp_bishop || chess_board[next_i][next_j] == opp_queen) {
    return 1;
  };
  for (next_i = i + 1, next_j = j - 1; next_i < 9 && next_j > 2; ++next_i, --next_j) {
    if (chess_board[next_i][next_j] != '.')
      break;
  }
  if (chess_board[next_i][next_j] == opp_bishop || chess_board[next_i][next_j] == opp_queen) {
    return 1;
  };
  for (next_i = i + 1, next_j = j + 1; next_i < 9 && next_j < 9; ++next_i, ++next_j) {
    if (chess_board[next_i][next_j] != '.')
      break;
  }
  if (chess_board[next_i][next_j] == opp_bishop || chess_board[next_i][next_j] == opp_queen) {
    return 1;
  };
  return 0;
}
```