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

```asm
<anda>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x78,%rsp
  mov    %rdi,%r13
  mov    %rsi,%r12
  mov    %rdx,0x10(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x68(%rsp)
  xor    %eax,%eax
  movl   $0x0,0x4(%rsp)
  lea    0x30(%rsp),%rax
  mov    %rax,0x8(%rsp)
L320:
  movslq 0x0(%r13),%rdx
  mov    %rdx,%rax
  shl    $0x4,%rax
  sub    %rdx,%rax
  add    %rax,%rax
  lea    (%r12,%rax,1),%rsi
  mov    0x4(%r13),%ecx
  lea    0x1(%rcx),%edx
  movslq %edx,%rdx
  cmpb   $0x54,(%rsi,%rdx,1)
  jne    L48
  lea    -0x1(%rcx),%edx
  movslq %edx,%rdx
  cmpb   $0x54,(%rsi,%rdx,1)
  jne    L48
  movslq %ecx,%rdx
  cmpb   $0x54,0x1e(%rdx,%rsi,1)
  jne    L48
  cmpb   $0x54,-0x1e(%rdx,%rsi,1)
  jne    L48
  mov    0x68(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L150
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L293:
  mov    %edx,0x4(%r13)
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <marca_ghost@plt>
  mov    %r12,%rdi
  call   <print_maze@plt>
L48:
  mov    0x0(%r13),%r15d
  movslq %r15d,%rax
  mov    %rax,%rbx
  shl    $0x4,%rbx
  sub    %rax,%rbx
  add    %rbx,%rbx
  lea    (%r12,%rbx,1),%r14
  mov    0x4(%r13),%ebp
  lea    0x1(%rbp),%edx
  movslq %edx,%rax
  cmpb   $0x37,(%r14,%rax,1)
  je     L322
L291:
  movslq %ebp,%rax
  lea    (%r12,%rbx,1),%rcx
  cmpb   $0x30,-0x1e(%rax,%rcx,1)
  jne    L293
  lea    -0x1(%rbp),%eax
  movslq %eax,%rdx
  cmpb   $0x30,(%r14,%rdx,1)
  jne    L113
  movslq %ebp,%rbp
  add    %r12,%rbx
  cmpb   $0x30,0x1e(%rbp,%rbx,1)
  je     L48
  add    $0x1,%r15d
  mov    %r15d,0x0(%r13)
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <marca_ghost@plt>
  mov    %r12,%rdi
  call   <print_maze@plt>
  jmp    L48
L322:
  lea    -0x1(%rbp),%eax
  movslq %eax,%rcx
  cmpb   $0x37,(%r14,%rcx,1)
  jne    L291
  movslq %ebp,%rcx
  cmpb   $0x37,0x1e(%rcx,%r14,1)
  je     L316
L315:
  movslq %ebp,%rbp
  add    %r12,%rbx
  cmpb   $0x30,-0x1e(%rbp,%rbx,1)
  jne    L293
L113:
  mov    %eax,0x4(%r13)
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <marca_ghost@plt>
  mov    %r12,%rdi
  call   <print_maze@plt>
  jmp    L48
L316:
  cmpb   $0x37,-0x1e(%rcx,%r14,1)
  jne    L315
  mov    %r15d,0x40(%rsp)
  lea    0x2(%rbp),%eax
  mov    %eax,0x18(%rsp)
  mov    %eax,0x44(%rsp)
  mov    %r15d,0x48(%rsp)
  lea    -0x2(%rbp),%esi
  mov    %esi,0x1c(%rsp)
  mov    %esi,0x4c(%rsp)
  lea    0x2(%r15),%esi
  mov    %esi,0x20(%rsp)
  mov    %esi,0x50(%rsp)
  mov    %ebp,0x54(%rsp)
  lea    -0x2(%r15),%esi
  mov    %esi,0x24(%rsp)
  mov    %esi,0x58(%rsp)
  mov    %ebp,0x5c(%rsp)
  mov    0x8(%rsp),%rdi
  call   <zera_vetor@plt>
  movslq 0x18(%rsp),%rax
  cmpb   $0x30,(%r14,%rax,1)
  jne    L143
L280:
  movslq 0x1c(%rsp),%rax
  cmpb   $0x30,(%r14,%rax,1)
  jne    L18
L172:
  movslq %ebp,%rax
  lea    (%r12,%rbx,1),%rdx
  cmpb   $0x30,0x3c(%rax,%rdx,1)
  jne    L124
L80:
  movslq %ebp,%rax
  add    %r12,%rbx
  cmpb   $0x30,-0x3c(%rax,%rbx,1)
  jne    L275
L101:
  lea    0x40(%rsp),%rdi
  mov    %rdi,%rdx
  mov    0x8(%rsp),%rsi
  jmp    L79
L143:
  mov    0x10(%rsp),%rsi
  mov    %r15d,%edi
  sub    (%rsi),%edi
  mov    $0x2,%esi
  call   <pow@plt>
  mov    %rax,0x28(%rsp)
  mov    0x10(%rsp),%rsi
  mov    0x18(%rsp),%edi
  sub    0x4(%rsi),%edi
  mov    $0x2,%esi
  call   <pow@plt>
  mov    0x28(%rsp),%rdi
  add    %rax,%rdi
  call   <sqrt@plt>
  mov    %eax,0x30(%rsp)
  jmp    L280
L18:
  mov    0x10(%rsp),%rsi
  sub    (%rsi),%r15d
  mov    %r15d,%edi
  mov    $0x2,%esi
  call   <pow@plt>
  mov    %rax,%r14
  mov    0x10(%rsp),%rsi
  mov    0x1c(%rsp),%edi
  sub    0x4(%rsi),%edi
  mov    $0x2,%esi
  call   <pow@plt>
  lea    (%r14,%rax,1),%rdi
  call   <sqrt@plt>
  mov    %eax,0x34(%rsp)
  jmp    L172
L124:
  mov    0x10(%rsp),%r15
  mov    0x20(%rsp),%edi
  sub    (%r15),%edi
  mov    $0x2,%esi
  call   <pow@plt>
  mov    %rax,%r14
  mov    %ebp,%edi
  sub    0x4(%r15),%edi
  mov    $0x2,%esi
  call   <pow@plt>
  lea    (%r14,%rax,1),%rdi
  call   <sqrt@plt>
  mov    %eax,0x38(%rsp)
  jmp    L80
L275:
  mov    0x10(%rsp),%r15
  mov    0x24(%rsp),%edi
  sub    (%r15),%edi
  mov    $0x2,%esi
  call   <pow@plt>
  mov    %rax,%rbx
  mov    %ebp,%edi
  sub    0x4(%r15),%edi
  mov    $0x2,%esi
  call   <pow@plt>
  lea    (%rbx,%rax,1),%rdi
  call   <sqrt@plt>
  mov    %eax,0x3c(%rsp)
  jmp    L101
L299:
  add    $0x4,%rax
  cmp    %rdx,%rax
  je     L102
L60:
  cmp    (%rax),%ecx
  jge    L299
  mov    (%rdi),%ebx
  mov    %ebx,0x4(%rsp)
  jmp    L299
L102:
  add    $0x4,%rsi
  add    $0x4,%rdi
  cmp    %rdx,%rsi
  je     L314
L79:
  mov    (%rsi),%ecx
  mov    0x8(%rsp),%rax
  jmp    L60
L314:
  mov    0x4(%rsp),%eax
  cmp    %eax,0x30(%rsp)
  je     L328
  mov    0x4(%rsp),%eax
  cmp    %eax,0x34(%rsp)
  je     L272
  mov    0x4(%rsp),%eax
  cmp    %eax,0x38(%rsp)
  je     L157
  mov    0x4(%rsp),%eax
  cmp    %eax,0x3c(%rsp)
  jne    L320
  movslq 0x0(%r13),%rdx
  mov    %rdx,%rax
  shl    $0x4,%rax
  sub    %rdx,%rax
  lea    (%r12,%rax,2),%rdx
  movslq 0x4(%r13),%rax
  movb   $0x42,-0x3c(%rdx,%rax,1)
  mov    %r12,%rdi
  call   <print_maze@plt>
  jmp    L320
L328:
  movslq 0x0(%r13),%rdx
  mov    %rdx,%rax
  shl    $0x4,%rax
  sub    %rdx,%rax
  lea    (%r12,%rax,2),%rdx
  mov    0x4(%r13),%eax
  add    $0x2,%eax
  cltq
  movb   $0x42,(%rdx,%rax,1)
  mov    %r12,%rdi
  call   <print_maze@plt>
  jmp    L320
L272:
  movslq 0x0(%r13),%rdx
  mov    %rdx,%rax
  shl    $0x4,%rax
  sub    %rdx,%rax
  lea    (%r12,%rax,2),%rdx
  mov    0x4(%r13),%eax
  sub    $0x2,%eax
  cltq
  movb   $0x42,(%rdx,%rax,1)
  mov    %r12,%rdi
  call   <print_maze@plt>
  jmp    L320
L157:
  movslq 0x0(%r13),%rdx
  mov    %rdx,%rax
  shl    $0x4,%rax
  sub    %rdx,%rax
  lea    (%r12,%rax,2),%rdx
  movslq 0x4(%r13),%rax
  movb   $0x42,0x3c(%rdx,%rax,1)
  mov    %r12,%rdi
  call   <print_maze@plt>
  jmp    L320
L150:
  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);
    }
  }
}
```