user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<anagram>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x438,%rsp
  mov    %rdi,-0x438(%rbp)
  mov    %rsi,-0x440(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  movl   $0x100,-0x424(%rbp)
  cmpq   $0x0,-0x438(%rbp)
  je     L115
  cmpq   $0x0,-0x440(%rbp)
  jne    L51
L115:
  lea    D12(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L21
L51:
  mov    -0x438(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L29
  mov    -0x440(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L95
L29:
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L21
L95:
  mov    -0x440(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%ebx
  mov    -0x438(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %ebx,%edx
  mov    %eax,%esi
  lea    D13(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x424(%rbp)
  jmp    L113
L71:
  mov    -0x424(%rbp),%eax
  cltq
  movl   $0x0,-0x420(%rbp,%rax,4)
  addl   $0x1,-0x424(%rbp)
L113:
  cmpl   $0xff,-0x424(%rbp)
  jle    L71
  jmp    L73
L27:
  mov    -0x438(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  movslq %eax,%rdx
  mov    -0x420(%rbp,%rdx,4),%edx
  add    $0x1,%edx
  cltq
  mov    %edx,-0x420(%rbp,%rax,4)
  mov    -0x438(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%esi
  lea    D32(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addq   $0x1,-0x438(%rbp)
L73:
  mov    -0x438(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L27
  mov    $0xa,%edi
  call   <putchar@plt>
  jmp    L30
L16:
  mov    -0x440(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%esi
  lea    D32(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x440(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  movslq %eax,%rdx
  mov    -0x420(%rbp,%rdx,4),%edx
  sub    $0x1,%edx
  cltq
  mov    %edx,-0x420(%rbp,%rax,4)
  mov    -0x440(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cltq
  mov    -0x420(%rbp,%rax,4),%eax
  test   %eax,%eax
  jns    L50
  mov    $0x0,%eax
  jmp    L21
L50:
  addq   $0x1,-0x440(%rbp)
L30:
  mov    -0x440(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L16
  mov    $0x1,%eax
L21:
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L14
  call   <__stack_chk_fail@plt>
L14:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D12
type: string
name: extract_symbolic_data
arguments: tag: D2
type: string
name: extract_symbolic_data
arguments: tag: D13
type: string
name: extract_symbolic_data
arguments: tag: D32
type: string

tool: D12: Invalid Input strings 

tool: D2: Empty Input strings 

tool: D13: %ld %ld


tool: D32: %d 

assistant: ```c
bool anagram(char *str1, char *str2) {
  int A[256];
  int i = 256;
  if (str1 == NULL || str2 == NULL) {
    printf("Invalid Input strings \n");
    return false;
  }
  if (*str1 == 0 || *str2 == 0) {
    printf("Empty Input strings \n");
    return false;
  }
  printf("%ld %ld\n", strlen(str1), strlen(str2));
  for (i = 0; i < 256; i++) {
    A[i] = 0;
  }
  while (*str1) {
    A[*str1]++;
    printf("%d ", *str1);
    ++str1;
  }
  printf("\n");
  while (*str2) {
    printf("%d ", *str2);
    A[*str2]--;
    if (A[*str2] < 0)
      return false;
    ++str2;
  }
  return true;
}
```