user: Please show me the C implementation that matches the assembly code listed below:

```asm
<checkAbleToConquer>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %edi,%eax
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %ecx,-0x18(%rbp)
  mov    %ax,-0x14(%rbp)
  movswl -0x14(%rbp),%eax
  mov    -0x18(%rbp),%ecx
  mov    -0x28(%rbp),%rdx
  mov    -0x20(%rbp),%rsi
  mov    %eax,%edi
  call   <checkEnemyBorderZone@plt>
  mov    %al,-0xd(%rbp)
  cmpb   $0x0,-0xd(%rbp)
  je     L8
  movw   $0x0,-0xc(%rbp)
  movl   $0x0,-0x8(%rbp)
  jmp    L27
L94:
  movswl -0xa(%rbp),%eax
  shl    $0x3,%eax
  cltq
  add    $0x3,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  cmp    $0xffff,%ax
  je     L50
  movswl -0xa(%rbp),%eax
  shl    $0x3,%eax
  cltq
  add    $0x3,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  cwtl
  cmp    %eax,-0x18(%rbp)
  je     L50
  movswl -0xa(%rbp),%eax
  mov    -0x28(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <numberOfPlayersInZone@plt>
  cmp    $0x1,%eax
  jne    L50
  movl   $0x4,-0x4(%rbp)
  jmp    L102
L76:
  movswl -0xa(%rbp),%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  mov    %eax,%edx
  movzwl -0xc(%rbp),%eax
  add    %edx,%eax
  mov    %ax,-0xc(%rbp)
  addl   $0x1,-0x4(%rbp)
L102:
  cmpl   $0x7,-0x4(%rbp)
  jle    L76
L50:
  addl   $0x1,-0x8(%rbp)
L27:
  cmpl   $0x5,-0x8(%rbp)
  jg     L81
  movswl -0x14(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  mov    %ax,-0xa(%rbp)
  cmpw   $0xffff,-0xa(%rbp)
  jne    L94
L81:
  movswl -0x14(%rbp),%eax
  shl    $0x3,%eax
  lea    0x4(%rax),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  cmp    %ax,-0xc(%rbp)
  jle    L89
  movzwl -0xc(%rbp),%eax
  mov    %eax,%edx
  movswl -0x14(%rbp),%eax
  shl    $0x3,%eax
  lea    0x4(%rax),%ecx
  mov    -0x18(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    (%rax,%rax,1),%rcx
  mov    -0x28(%rbp),%rax
  add    %rcx,%rax
  movzwl (%rax),%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %al,-0xd(%rbp)
  jmp    L8
L89:
  movb   $0x0,-0xd(%rbp)
L8:
  movzbl -0xd(%rbp),%eax
  leave
  ret
```

assistant: ```c
char checkAbleToConquer(short zone, short *graph, short *world, int playerId) {
  char val = checkEnemyBorderZone(zone, graph, world, playerId);
  if (val != 0) {
    short sum = 0;
    short next;
    for (int i = 0; i < 6 && ((next = graph[zone * 6 + i]) != -1); i++) {
      if (world[next * 8 + 3] != -1 && world[next * 8 + 3] != playerId) {
        if (numberOfPlayersInZone(next, world) == 1) {
          for (int j = 4; j < 8; j++) {
            sum += world[next * 8 + j];
          }
        }
      }
    }
    if (sum > world[zone * 8 + 4 + playerId]) {
      val = sum - world[zone * 8 + 4 + playerId];
    } else {
      val = 0;
    }
  }
  return val;
}
```