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

```asm
<is_isomorphic>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x130,%rsp
  mov    %rdi,-0x128(%rbp)
  mov    %rsi,-0x130(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x128(%rbp),%rax
  mov    %rax,-0x120(%rbp)
  mov    -0x130(%rbp),%rax
  mov    %rax,-0x118(%rbp)
  movq   $0x0,-0x110(%rbp)
  movq   $0x0,-0x108(%rbp)
  movq   $0x0,-0x100(%rbp)
  movq   $0x0,-0xf8(%rbp)
  movq   $0x0,-0xf0(%rbp)
  movq   $0x0,-0xe8(%rbp)
  movq   $0x0,-0xe0(%rbp)
  movq   $0x0,-0xd8(%rbp)
  movq   $0x0,-0xd0(%rbp)
  movq   $0x0,-0xc8(%rbp)
  movq   $0x0,-0xc0(%rbp)
  movq   $0x0,-0xb8(%rbp)
  movq   $0x0,-0xb0(%rbp)
  movq   $0x0,-0xa8(%rbp)
  movq   $0x0,-0xa0(%rbp)
  movq   $0x0,-0x98(%rbp)
  movq   $0x0,-0x90(%rbp)
  movq   $0x0,-0x88(%rbp)
  movq   $0x0,-0x80(%rbp)
  movq   $0x0,-0x78(%rbp)
  movq   $0x0,-0x70(%rbp)
  movq   $0x0,-0x68(%rbp)
  movq   $0x0,-0x60(%rbp)
  movq   $0x0,-0x58(%rbp)
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x48(%rbp)
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  jmp    L35
L37:
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cltq
  movzbl -0x90(%rbp,%rax,1),%eax
  test   %al,%al
  jne    L129
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%ecx
  mov    -0x120(%rbp),%rax
  movzbl (%rax),%edx
  movslq %ecx,%rax
  mov    %dl,-0x90(%rbp,%rax,1)
  jmp    L27
L129:
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cltq
  movzbl -0x90(%rbp,%rax,1),%edx
  mov    -0x120(%rbp),%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L27
  mov    $0x0,%eax
  jmp    L14
L27:
  mov    -0x120(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cltq
  movzbl -0x110(%rbp,%rax,1),%eax
  test   %al,%al
  jne    L8
  mov    -0x120(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%ecx
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%edx
  movslq %ecx,%rax
  mov    %dl,-0x110(%rbp,%rax,1)
  jmp    L104
L8:
  mov    -0x120(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cltq
  movzbl -0x110(%rbp,%rax,1),%edx
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L104
  mov    $0x0,%eax
  jmp    L14
L104:
  addq   $0x1,-0x120(%rbp)
  addq   $0x1,-0x118(%rbp)
L35:
  mov    -0x120(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L58
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L37
L58:
  mov    -0x120(%rbp),%rax
  movzbl (%rax),%edx
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L6
  mov    $0x0,%eax
  jmp    L14
L6:
  mov    $0x1,%eax
L14:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L32
  call   <__stack_chk_fail@plt>
L32:
  leave
  ret
```

assistant: ```c
bool is_isomorphic(char *s, char *t) {
  char *ps = s;
  char *pt = t;
  char tab_left[128] = "";
  char tab_right[128] = "";
  while (*ps && *pt) {
    if (tab_right[(int)*pt] == 0) {
      tab_right[(int)*pt] = *ps;
    } else if (tab_right[(int)*pt] != *ps) {
      return 0;
    }
    if (tab_left[(int)*ps] == 0) {
      tab_left[(int)*ps] = *pt;
    } else if (tab_left[(int)*ps] != *pt) {
      return 0;
    }
    ps++, pt++;
  }
  if (*ps - *pt != 0)
    return 0;
  return 1;
}
```