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

```asm
<pandigital>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %edi,-0x44(%rbp)
  mov    %esi,-0x48(%rbp)
  mov    %edx,-0x4c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  movq   $0x0,-0x10(%rbp)
  jmp    L22
L117:
  mov    -0x44(%rbp),%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  add    %eax,%eax
  sub    %eax,%edx
  mov    %edx,-0x34(%rbp)
  cmpl   $0x0,-0x34(%rbp)
  je     L73
  mov    -0x34(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%eax
  test   %eax,%eax
  je     L5
L73:
  mov    $0x0,%eax
  jmp    L136
L5:
  mov    -0x34(%rbp),%eax
  cltq
  movl   $0x1,-0x30(%rbp,%rax,4)
  mov    -0x44(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x44(%rbp)
L22:
  cmpl   $0x0,-0x44(%rbp)
  jne    L117
  jmp    L19
L24:
  mov    -0x48(%rbp),%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  add    %eax,%eax
  sub    %eax,%edx
  mov    %edx,-0x38(%rbp)
  cmpl   $0x0,-0x38(%rbp)
  je     L149
  mov    -0x38(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%eax
  test   %eax,%eax
  je     L106
L149:
  mov    $0x0,%eax
  jmp    L136
L106:
  mov    -0x38(%rbp),%eax
  cltq
  movl   $0x1,-0x30(%rbp,%rax,4)
  mov    -0x48(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x48(%rbp)
L19:
  cmpl   $0x0,-0x48(%rbp)
  jne    L24
  jmp    L115
L155:
  mov    -0x4c(%rbp),%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  add    %eax,%eax
  sub    %eax,%edx
  mov    %edx,-0x3c(%rbp)
  cmpl   $0x0,-0x3c(%rbp)
  je     L138
  mov    -0x3c(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%eax
  test   %eax,%eax
  je     L98
L138:
  mov    $0x0,%eax
  jmp    L136
L98:
  mov    -0x3c(%rbp),%eax
  cltq
  movl   $0x1,-0x30(%rbp,%rax,4)
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x4c(%rbp)
L115:
  cmpl   $0x0,-0x4c(%rbp)
  jne    L155
  mov    $0x1,%eax
L136:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L128
  call   <__stack_chk_fail@plt>
L128:
  leave
  ret
```

assistant: ```c
int pandigital(int a, int b, int c) {
  int seen[10] = {0};
  do {
    while (a) {
      const int t = a % 10;
      if (t == 0 || seen[t])
        return 0;
      seen[t] = 1;
      a /= 10;
    }
  } while (0);
  do {
    while (b) {
      const int t = b % 10;
      if (t == 0 || seen[t])
        return 0;
      seen[t] = 1;
      b /= 10;
    }
  } while (0);
  do {
    while (c) {
      const int t = c % 10;
      if (t == 0 || seen[t])
        return 0;
      seen[t] = 1;
      c /= 10;
    }
  } while (0);
  return 1;
}
```