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

```asm
<solveKTUtil>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x158,%rsp
  mov    %edi,0x11c(%rsp)
  mov    %esi,0x120(%rsp)
  mov    %edx,0x148(%rsp)
  cmp    $0x40,%edx
  je     L141
  lea    0x2(%rdx),%esi
  mov    %rcx,%r14
  lea    0x1(%rdx),%ecx
  mov    %edx,%eax
  mov    %ecx,0x124(%rsp)
  lea    0x3(%rdx),%ecx
  lea    0x6(%rax),%ebx
  mov    %r8,%r15
  mov    %esi,0x118(%rsp)
  lea    0x4(%rdx),%esi
  lea    0x5(%rdx),%edx
  mov    %r9,%r13
  mov    %ecx,0x104(%rsp)
  lea    0x7(%rax),%ecx
  mov    %esi,0xe8(%rsp)
  lea    0x8(%rax),%esi
  add    $0x9,%eax
  mov    %edx,0xc4(%rsp)
  mov    %ebx,0xa0(%rsp)
  mov    %ecx,0x78(%rsp)
  mov    %esi,0x9c(%rsp)
  movq   $0x0,0xe0(%rsp)
  mov    %eax,0x14c(%rsp)
  jmp    L284
  nopl   0x0(%rax,%rax,1)
L335:
  addq   $0x4,0xe0(%rsp)
  mov    0xe0(%rsp),%rax
  cmp    $0x20,%rax
  je     L455
L284:
  mov    0xe0(%rsp),%rax
  mov    0x11c(%rsp),%edi
  mov    %r14,%rdx
  mov    %rax,%rbx
  add    (%r15,%rax,1),%edi
  mov    0x120(%rsp),%eax
  add    0x0(%r13,%rbx,1),%eax
  mov    %edi,0xec(%rsp)
  mov    %eax,%esi
  mov    %eax,0x100(%rsp)
  call   <isSafe@plt>
  test   %rax,%rax
  je     L335
  movslq 0xec(%rsp),%rax
  movslq 0x100(%rsp),%rbx
  mov    0x148(%rsp),%esi
  shl    $0x5,%rax
  mov    %rbx,0x140(%rsp)
  add    %r14,%rax
  cmpl   $0x40,0x124(%rsp)
  mov    %rax,0x138(%rsp)
  mov    %esi,(%rax,%rbx,4)
  je     L141
  movq   $0x0,0xb8(%rsp)
  jmp    L208
  nop
L347:
  addq   $0x4,0xb8(%rsp)
  mov    0xb8(%rsp),%rax
  cmp    $0x20,%rax
  je     L196
L208:
  mov    0xb8(%rsp),%rax
  mov    0xec(%rsp),%edi
  mov    %r14,%rdx
  mov    %rax,%rsi
  add    (%r15,%rax,1),%edi
  mov    0x100(%rsp),%eax
  add    0x0(%r13,%rsi,1),%eax
  mov    %edi,0xc8(%rsp)
  mov    %eax,%esi
  mov    %eax,0xcc(%rsp)
  call   <isSafe@plt>
  test   %rax,%rax
  je     L347
  movslq 0xc8(%rsp),%rax
  movslq 0xcc(%rsp),%rcx
  mov    0x124(%rsp),%esi
  shl    $0x5,%rax
  mov    %rcx,0x130(%rsp)
  add    %r14,%rax
  cmpl   $0x40,0x118(%rsp)
  mov    %rax,0x128(%rsp)
  mov    %esi,(%rax,%rcx,4)
  je     L141
  movq   $0x0,0x90(%rsp)
  jmp    L343
  nopw   0x0(%rax,%rax,1)
L452:
  addq   $0x4,0x90(%rsp)
  mov    0x90(%rsp),%rax
  cmp    $0x20,%rax
  je     L134
L343:
  mov    0x90(%rsp),%rax
  mov    0xc8(%rsp),%edi
  mov    %r14,%rdx
  mov    %rax,%rsi
  add    (%r15,%rax,1),%edi
  mov    0xcc(%rsp),%eax
  add    0x0(%r13,%rsi,1),%eax
  mov    %edi,0xa4(%rsp)
  mov    %eax,%esi
  mov    %eax,0xc0(%rsp)
  call   <isSafe@plt>
  test   %rax,%rax
  je     L452
  movslq 0xa4(%rsp),%rax
  movslq 0xc0(%rsp),%rdx
  mov    0x118(%rsp),%esi
  shl    $0x5,%rax
  mov    %rdx,0x110(%rsp)
  add    %r14,%rax
  cmpl   $0x40,0x104(%rsp)
  mov    %rax,0x108(%rsp)
  mov    %esi,(%rax,%rdx,4)
  je     L141
  movq   $0x0,0x58(%rsp)
  jmp    L108
  nopl   0x0(%rax)
L217:
  addq   $0x4,0x58(%rsp)
  mov    0x58(%rsp),%rax
  cmp    $0x20,%rax
  je     L425
L108:
  mov    0x58(%rsp),%rax
  mov    0xa4(%rsp),%edi
  mov    %rax,%rdx
  add    (%r15,%rax,1),%edi
  mov    0xc0(%rsp),%eax
  add    0x0(%r13,%rdx,1),%eax
  mov    %r14,%rdx
  mov    %edi,0x7c(%rsp)
  mov    %eax,%esi
  mov    %eax,0x98(%rsp)
  call   <isSafe@plt>
  test   %rax,%rax
  je     L217
  movslq 0x7c(%rsp),%rax
  movslq 0x98(%rsp),%rsi
  mov    0x104(%rsp),%ebx
  shl    $0x5,%rax
  mov    %rsi,0xf8(%rsp)
  add    %r14,%rax
  cmpl   $0x40,0xe8(%rsp)
  mov    %rax,0xf0(%rsp)
  mov    %ebx,(%rax,%rsi,4)
  je     L141
  movq   $0x0,0x38(%rsp)
  jmp    L289
  nopl   (%rax)
L367:
  addq   $0x4,0x38(%rsp)
  mov    0x38(%rsp),%rax
  cmp    $0x20,%rax
  je     L16
L289:
  mov    0x38(%rsp),%rax
  mov    0x7c(%rsp),%edi
  mov    %r14,%rdx
  mov    %rax,%rsi
  add    (%r15,%rax,1),%edi
  mov    0x98(%rsp),%eax
  add    0x0(%r13,%rsi,1),%eax
  mov    %edi,0x40(%rsp)
  mov    %eax,%esi
  mov    %eax,0x44(%rsp)
  call   <isSafe@plt>
  test   %rax,%rax
  je     L367
  movslq 0x40(%rsp),%rax
  movslq 0x44(%rsp),%rcx
  mov    0xe8(%rsp),%edx
  shl    $0x5,%rax
  mov    %rcx,0xd8(%rsp)
  add    %r14,%rax
  cmpl   $0x40,0xc4(%rsp)
  mov    %rax,0xd0(%rsp)
  mov    %edx,(%rax,%rcx,4)
  je     L141
  movq   $0x0,0x28(%rsp)
  mov    %r13,%rax
  mov    %r15,%r13
  mov    %r14,%r15
  mov    %rax,%r14
  jmp    L58
  nopl   0x0(%rax,%rax,1)
L340:
  addq   $0x4,0x28(%rsp)
  mov    0x28(%rsp),%rax
  cmp    $0x20,%rax
  je     L169
L58:
  mov    0x28(%rsp),%rax
  mov    0x40(%rsp),%edi
  mov    %r15,%rdx
  mov    %rax,%rcx
  add    0x0(%r13,%rax,1),%edi
  mov    0x44(%rsp),%eax
  add    (%r14,%rcx,1),%eax
  mov    %edi,0x30(%rsp)
  mov    %eax,%esi
  mov    %eax,0x34(%rsp)
  call   <isSafe@plt>
  test   %rax,%rax
  je     L340
  movslq 0x30(%rsp),%rax
  movslq 0x34(%rsp),%rcx
  mov    0xc4(%rsp),%esi
  shl    $0x5,%rax
  mov    %rcx,0xb0(%rsp)
  add    %r15,%rax
  cmpl   $0x40,0xa0(%rsp)
  mov    %rax,0xa8(%rsp)
  mov    %esi,(%rax,%rcx,4)
  je     L141
  mov    %r14,0x8(%rsp)
  mov    %r15,%r14
  mov    %r13,%r15
  movq   $0x0,0x18(%rsp)
  jmp    L55
  nopl   0x0(%rax)
L166:
  addq   $0x4,0x18(%rsp)
  mov    0x18(%rsp),%rax
  cmp    $0x20,%rax
  je     L383
L55:
  mov    0x18(%rsp),%rax
  mov    0x8(%rsp),%rdx
  mov    0x30(%rsp),%edi
  mov    %rax,%rcx
  add    (%r15,%rax,1),%edi
  mov    0x34(%rsp),%eax
  add    (%rdx,%rcx,1),%eax
  mov    %r14,%rdx
  mov    %edi,0x20(%rsp)
  mov    %eax,%esi
  mov    %eax,0x24(%rsp)
  call   <isSafe@plt>
  test   %rax,%rax
  je     L166
  movslq 0x20(%rsp),%rax
  movslq 0x24(%rsp),%rcx
  mov    0xa0(%rsp),%esi
  shl    $0x5,%rax
  mov    %rcx,0x88(%rsp)
  add    %r14,%rax
  cmpl   $0x40,0x78(%rsp)
  mov    %rax,0x80(%rsp)
  mov    %esi,(%rax,%rcx,4)
  je     L141
  mov    %r15,0x10(%rsp)
  xor    %ebp,%ebp
  jmp    L89
  nop
L404:
  add    $0x4,%rbp
  cmp    $0x20,%rbp
  je     L211
L89:
  mov    0x10(%rsp),%rax
  mov    0x20(%rsp),%r12d
  mov    %r14,%rdx
  mov    0x24(%rsp),%r13d
  add    (%rax,%rbp,1),%r12d
  mov    0x8(%rsp),%rax
  mov    %r12d,%edi
  add    (%rax,%rbp,1),%r13d
  mov    %r13d,%esi
  call   <isSafe@plt>
  test   %rax,%rax
  je     L404
  movslq %r12d,%rax
  mov    0x78(%rsp),%esi
  movslq %r13d,%rcx
  shl    $0x5,%rax
  mov    %rcx,0x50(%rsp)
  add    %r14,%rax
  cmpl   $0x40,0x9c(%rsp)
  mov    %rax,0x48(%rsp)
  mov    %esi,(%rax,%rcx,4)
  je     L141
  mov    %rbp,0x70(%rsp)
  xor    %ebx,%ebx
  jmp    L15
  nopw   0x0(%rax,%rax,1)
L34:
  add    $0x4,%rbx
  cmp    $0x20,%rbx
  je     L339
L15:
  mov    0x10(%rsp),%rax
  mov    %r14,%rdx
  mov    (%rax,%rbx,1),%ebp
  mov    0x8(%rsp),%rax
  mov    (%rax,%rbx,1),%r15d
  add    %r12d,%ebp
  mov    %ebp,%edi
  add    %r13d,%r15d
  mov    %r15d,%esi
  call   <isSafe@plt>
  test   %rax,%rax
  je     L34
  movslq %ebp,%r10
  mov    0x9c(%rsp),%eax
  movslq %r15d,%r11
  mov    %r14,%rcx
  shl    $0x5,%r10
  mov    0x8(%rsp),%r9
  mov    0x10(%rsp),%r8
  mov    %ebp,%edi
  add    %r14,%r10
  mov    0x14c(%rsp),%edx
  mov    %r15d,%esi
  mov    %r11,0x60(%rsp)
  mov    %eax,(%r10,%r11,4)
  mov    %r10,0x68(%rsp)
  call   <solveKTUtil>
  cmp    $0x1,%eax
  je     L141
  mov    0x60(%rsp),%r11
  mov    0x68(%rsp),%r10
  add    $0x4,%rbx
  movl   $0xffffffff,(%r10,%r11,4)
  cmp    $0x20,%rbx
  jne    L15
L339:
  mov    0x70(%rsp),%rbp
  mov    0x48(%rsp),%rax
  mov    0x50(%rsp),%rsi
  add    $0x4,%rbp
  movl   $0xffffffff,(%rax,%rsi,4)
  cmp    $0x20,%rbp
  jne    L89
L211:
  mov    0x80(%rsp),%rax
  mov    0x88(%rsp),%rdx
  mov    0x10(%rsp),%r15
  movl   $0xffffffff,(%rax,%rdx,4)
  jmp    L166
  nopl   0x0(%rax)
L141:
  mov    $0x1,%eax
L140:
  add    $0x158,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L383:
  mov    0xa8(%rsp),%rax
  mov    0xb0(%rsp),%rdx
  mov    %r15,%r13
  mov    %r14,%r15
  mov    0x8(%rsp),%r14
  movl   $0xffffffff,(%rax,%rdx,4)
  jmp    L340
  nopw   0x0(%rax,%rax,1)
L169:
  mov    %r14,%rax
  mov    0xd8(%rsp),%rdx
  mov    %r15,%r14
  mov    %r13,%r15
  mov    %rax,%r13
  mov    0xd0(%rsp),%rax
  movl   $0xffffffff,(%rax,%rdx,4)
  jmp    L367
  nopl   0x0(%rax,%rax,1)
L16:
  mov    0xf0(%rsp),%rax
  mov    0xf8(%rsp),%rcx
  movl   $0xffffffff,(%rax,%rcx,4)
  jmp    L217
  nopl   0x0(%rax)
L425:
  mov    0x108(%rsp),%rax
  mov    0x110(%rsp),%rbx
  movl   $0xffffffff,(%rax,%rbx,4)
  jmp    L452
L134:
  mov    0x128(%rsp),%rax
  mov    0x130(%rsp),%rsi
  movl   $0xffffffff,(%rax,%rsi,4)
  jmp    L347
L196:
  mov    0x138(%rsp),%rax
  mov    0x140(%rsp),%rcx
  movl   $0xffffffff,(%rax,%rcx,4)
  jmp    L335
L455:
  xor    %eax,%eax
  jmp    L140
```

assistant: ```c
int solveKTUtil(int x, int y, int movei, int sol[8][8], int xMove[8], int yMove[8]) {
  int k, next_x, next_y;
  if (movei == 8 * 8)
    return 1;
  for (k = 0; k < 8; k++) {
    next_x = x + xMove[k];
    next_y = y + yMove[k];
    if (isSafe(next_x, next_y, sol)) {
      sol[next_x][next_y] = movei;
      if (solveKTUtil(next_x, next_y, movei + 1, sol, xMove, yMove) == 1)
        return 1;
      else
        sol[next_x][next_y] = -1;
    }
  }
  return 0;
}
```