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

```asm
<anda>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %rdx,%r13
  push   %r12
  xor    %r12d,%r12d
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x88,%rsp
  mov    (%rdi),%r8d
  mov    0x4(%rdi),%ecx
  mov    %fs:0x28,%rax
  mov    %rax,0x78(%rsp)
  xor    %eax,%eax
L73:
  movslq %r8d,%rax
  lea    0x1(%rcx),%edi
  movslq %ecx,%r9
  mov    %ecx,%r15d
  mov    %rax,%rdx
  movslq %edi,%rsi
  shl    $0x4,%rdx
  sub    %rax,%rdx
  lea    (%rbx,%rdx,2),%r11
  movzbl (%r11,%rsi,1),%r10d
  lea    (%r11,%r9,1),%r14
  movzbl -0x1e(%r14),%esi
  cmp    $0x54,%r10b
  jne    L72
  jmp    L181
  nopl   (%rax)
L254:
  mov    %edi,0x4(%rbp)
L204:
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <marca_ghost@plt>
  mov    %rbx,%rdi
  call   <print_maze@plt>
  movslq 0x0(%rbp),%rax
  movslq 0x4(%rbp),%r9
  mov    %rax,%rcx
  lea    0x1(%r9),%edi
  mov    %rax,%r8
  mov    %r9,%r15
  shl    $0x4,%rcx
  movslq %edi,%rsi
  sub    %rax,%rcx
  lea    (%rbx,%rcx,2),%rcx
  movzbl (%rcx,%rsi,1),%r10d
  movzbl -0x1e(%rcx,%r9,1),%esi
L72:
  mov    %rax,%rcx
  shl    $0x4,%rcx
  sub    %rax,%rcx
  lea    (%rbx,%rcx,2),%rcx
  cmp    $0x37,%r10b
  je     L159
L149:
  cmp    $0x30,%sil
  jne    L254
  lea    -0x1(%r15),%r11d
  movslq %r11d,%rsi
  cmpb   $0x30,(%rcx,%rsi,1)
  jne    L215
  movzbl 0x1e(%rcx,%r9,1),%esi
  cmp    $0x30,%sil
  je     L72
  add    $0x1,%r8d
  mov    %r8d,0x0(%rbp)
  jmp    L204
  nopl   0x0(%rax)
L159:
  lea    -0x1(%r15),%r11d
  movslq %r11d,%r14
  cmpb   $0x37,(%rcx,%r14,1)
  jne    L149
  cmpb   $0x37,0x1e(%rcx,%r9,1)
  je     L119
L365:
  cmp    $0x30,%sil
  jne    L254
L215:
  mov    %r11d,0x4(%rbp)
  jmp    L204
  nopl   0x0(%rax)
L119:
  cmp    $0x37,%sil
  jne    L365
  lea    -0x2(%r15),%eax
  lea    0x40(%rsp),%r14
  mov    %r9,0x28(%rsp)
  mov    %eax,0x8(%rsp)
  lea    0x2(%r15),%r11d
  mov    %r14,%rdi
  mov    %eax,0x5c(%rsp)
  lea    0x2(%r8),%eax
  mov    %eax,0x30(%rsp)
  mov    %eax,0x60(%rsp)
  lea    -0x2(%r8),%eax
  mov    %rcx,0x20(%rsp)
  mov    %r8d,0x50(%rsp)
  mov    %r8d,0x58(%rsp)
  mov    %r8d,0x10(%rsp)
  mov    %r11d,0x54(%rsp)
  mov    %r11d,0x18(%rsp)
  mov    %eax,0x34(%rsp)
  call   <zera_vetor@plt>
  movslq 0x18(%rsp),%rax
  mov    0x20(%rsp),%rcx
  mov    0x10(%rsp),%r8d
  mov    0x28(%rsp),%r9
  cmpb   $0x30,(%rcx,%rax,1)
  jne    L334
  movslq 0x8(%rsp),%rax
  cmpb   $0x30,(%rcx,%rax,1)
  jne    L128
L71:
  cmpb   $0x30,0x3c(%rcx,%r9,1)
  jne    L256
L225:
  cmpb   $0x30,-0x3c(%rcx,%r9,1)
  jne    L210
L152:
  lea    0x50(%rsp),%rsi
  mov    %r14,%rdi
  mov    %rsi,%rdx
L189:
  mov    (%rdi),%ecx
  mov    %r14,%rax
L60:
  cmp    (%rax),%ecx
  jge    L291
  mov    (%rsi),%r12d
L291:
  add    $0x4,%rax
  cmp    %rax,%rdx
  jne    L60
  add    $0x4,%rdi
  add    $0x4,%rsi
  cmp    %rdi,%rdx
  jne    L189
  movslq 0x0(%rbp),%rdx
  movslq 0x4(%rbp),%rcx
  mov    %rdx,%rax
  mov    %rdx,%r8
  shl    $0x4,%rax
  sub    %rdx,%rax
  lea    0x2(%rcx),%edx
  add    %rax,%rax
  cmp    %r12d,0x40(%rsp)
  je     L310
  cmp    %r12d,0x44(%rsp)
  je     L192
  cmp    %r12d,0x48(%rsp)
  je     L84
  cmp    %r12d,0x4c(%rsp)
  jne    L73
  add    %rbx,%rax
  mov    %rbx,%rdi
  movb   $0x42,-0x3c(%rcx,%rax,1)
  call   <print_maze@plt>
  mov    0x0(%rbp),%r8d
  mov    0x4(%rbp),%ecx
  jmp    L73
L181:
  sub    $0x1,%ecx
  movslq %ecx,%rcx
  cmpb   $0x54,(%r11,%rcx,1)
  jne    L72
  movzbl 0x1e(%r14),%r10d
  cmp    $0x54,%r10b
  je     L105
  mov    $0x54,%r10d
  jmp    L72
L210:
  mov    0x34(%rsp),%edi
  mov    $0x2,%esi
  sub    0x0(%r13),%edi
  call   <pow@plt>
  mov    $0x2,%esi
  mov    %r15d,%edi
  sub    0x4(%r13),%edi
  mov    %rax,0x8(%rsp)
  call   <pow@plt>
  mov    0x8(%rsp),%rdi
  add    %rax,%rdi
  call   <sqrt@plt>
  mov    %eax,0x4c(%rsp)
  jmp    L152
L256:
  mov    0x30(%rsp),%edi
  mov    $0x2,%esi
  sub    0x0(%r13),%edi
  mov    %r9,0x18(%rsp)
  mov    %rcx,0x10(%rsp)
  call   <pow@plt>
  mov    $0x2,%esi
  mov    %r15d,%edi
  sub    0x4(%r13),%edi
  mov    %rax,0x8(%rsp)
  call   <pow@plt>
  mov    0x8(%rsp),%rdi
  add    %rax,%rdi
  call   <sqrt@plt>
  mov    0x18(%rsp),%r9
  mov    0x10(%rsp),%rcx
  mov    %eax,0x48(%rsp)
  cmpb   $0x30,-0x3c(%rcx,%r9,1)
  je     L152
  jmp    L210
L128:
  sub    0x0(%r13),%r8d
  mov    $0x2,%esi
  mov    %r9,0x20(%rsp)
  mov    %r8d,%edi
  mov    %rcx,0x18(%rsp)
  call   <pow@plt>
  mov    0x8(%rsp),%edi
  mov    $0x2,%esi
  sub    0x4(%r13),%edi
  mov    %rax,0x10(%rsp)
  call   <pow@plt>
  mov    0x10(%rsp),%rdi
  add    %rax,%rdi
  call   <sqrt@plt>
  mov    0x20(%rsp),%r9
  mov    0x18(%rsp),%rcx
  mov    %eax,0x44(%rsp)
  cmpb   $0x30,0x3c(%rcx,%r9,1)
  je     L225
  jmp    L256
L334:
  mov    %r8d,%edi
  mov    $0x2,%esi
  sub    0x0(%r13),%edi
  mov    %r9,0x38(%rsp)
  mov    %rcx,0x28(%rsp)
  mov    %r8d,0x20(%rsp)
  call   <pow@plt>
  mov    0x18(%rsp),%edi
  mov    $0x2,%esi
  sub    0x4(%r13),%edi
  mov    %rax,0x10(%rsp)
  call   <pow@plt>
  mov    0x10(%rsp),%rdi
  add    %rax,%rdi
  call   <sqrt@plt>
  mov    0x28(%rsp),%rcx
  mov    0x38(%rsp),%r9
  mov    %eax,0x40(%rsp)
  movslq 0x8(%rsp),%rax
  mov    0x20(%rsp),%r8d
  cmpb   $0x30,(%rcx,%rax,1)
  je     L71
  jmp    L128
L192:
  lea    -0x2(%rcx),%edx
L310:
  movslq %edx,%rdx
  add    %rbx,%rax
  mov    %rbx,%rdi
  movb   $0x42,(%rax,%rdx,1)
  call   <print_maze@plt>
  mov    0x0(%rbp),%r8d
  mov    0x4(%rbp),%ecx
  jmp    L73
L105:
  cmp    $0x54,%sil
  jne    L72
  mov    0x78(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L298
  add    $0x88,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L84:
  add    %rbx,%rax
  mov    %rbx,%rdi
  movb   $0x42,0x3c(%rcx,%rax,1)
  call   <print_maze@plt>
  mov    0x0(%rbp),%r8d
  mov    0x4(%rbp),%ecx
  jmp    L73
L298:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void anda(int ghost[2], char maze[23][30], int target[2]) {
  int dist[4], i = 0, j = 0, menor = 0, vet[8];
  while (maze[ghost[0]][ghost[1] + 1] != 'T' || maze[ghost[0]][ghost[1] - 1] != 'T' || maze[ghost[0] + 1][ghost[1]] != 'T' || maze[ghost[0] - 1][ghost[1]] != 'T') {
    while (maze[ghost[0]][ghost[1] + 1] != '7' || maze[ghost[0]][ghost[1] - 1] != '7' || maze[ghost[0] + 1][ghost[1]] != '7' || maze[ghost[0] - 1][ghost[1]] != '7') {
      if (maze[ghost[0] - 1][ghost[1]] != '0') {
        ghost[1]++;
        marca_ghost(maze, ghost);
        print_maze(maze);
      } else if (maze[ghost[0]][ghost[1] - 1] != '0') {
        ghost[1]--;
        marca_ghost(maze, ghost);
        print_maze(maze);
      } else if (maze[ghost[0] + 1][ghost[1]] != '0') {
        ghost[0]++;
        marca_ghost(maze, ghost);
        print_maze(maze);
      } else if (maze[ghost[0]][ghost[1] - 1] != '0') {
        ghost[1]--;
        marca_ghost(maze, ghost);
        print_maze(maze);
      }
    }
    if (maze[ghost[0]][ghost[1] + 1] == '7' || (maze[ghost[0]][ghost[1] - 1] == '7') || (maze[ghost[0] + 1][ghost[1]] == '7') || (maze[ghost[0] - 1][ghost[1]] == '7')) {
      vet[0] = ghost[0];
      vet[1] = ghost[1] + 2;
      vet[2] = ghost[0];
      vet[3] = ghost[1] - 2;
      vet[4] = ghost[0] + 2;
      vet[5] = ghost[1];
      vet[6] = ghost[0] - 2;
      vet[7] = ghost[1];
    }
    zera_vetor(dist);
    if (maze[vet[0]][vet[1]] != '0') {
      dist[0] = sqrt(pow((vet[0] - target[0]), 2) + pow((vet[1] - target[1]), 2));
    }
    if (maze[vet[2]][vet[3]] != '0') {
      dist[1] = sqrt(pow((vet[2] - target[0]), 2) + pow((vet[3] - target[1]), 2));
    }
    if (maze[vet[4]][vet[5]] != '0') {
      dist[2] = sqrt(pow((vet[4] - target[0]), 2) + pow((vet[5] - target[1]), 2));
    }
    if (maze[vet[6]][vet[7]] != '0') {
      dist[3] = sqrt(pow((vet[6] - target[0]), 2) + pow((vet[7] - target[1]), 2));
    }
    for (i = 0; i < 4; i++) {
      for (j = 0; j < 4; j++) {
        if (dist[i] < dist[j]) {
          menor = vet[i];
        } else if (dist[j] > dist[i]) {
          menor = vet[j];
        }
      }
    }
    if (menor == dist[0]) {
      maze[ghost[0]][ghost[1] + 2] = 'B';
      print_maze(maze);
    } else if (menor == dist[1]) {
      maze[ghost[0]][ghost[1] - 2] = 'B';
      print_maze(maze);
    } else if (menor == dist[2]) {
      maze[ghost[0] + 2][ghost[1]] = 'B';
      print_maze(maze);
    } else if (menor == dist[3]) {
      maze[ghost[0] - 2][ghost[1]] = 'B';
      print_maze(maze);
    }
  }
}
```