user: 这段汇编代码用C语言表示是什么样的?

```asm
<edge_hash1>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x28,%rsp
  movzbl 0x2(%rdi),%edx
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  movabs $0xb0a090806040301,%rax
  movl   $0x12100f0d,0x14(%rsp)
  mov    %rax,0xc(%rsp)
  cmp    $0x1,%dl
  je     L736
  cmp    $0x3,%dl
  je     L1202
  cmp    $0x4,%dl
  je     L979
  cmp    $0x6,%dl
  je     L1009
  cmp    $0x8,%dl
  je     L629
  cmp    $0x9,%dl
  je     L201
  cmp    $0xa,%dl
  je     L823
  cmp    $0xb,%dl
  je     L128
  cmp    $0xd,%dl
  je     L749
  cmp    $0xf,%dl
  je     L1191
  mov    $0x1,%eax
  mov    $0xb,%ebp
  cmp    $0x10,%dl
  je     L698
L484:
  movsbl 0x3(%rbx),%edx
  lea    (%rdx,%rdx,2),%edx
  lea    0x0(%rbp,%rdx,4),%r13d
  movzbl 0x6(%rbx),%edx
  imul   $0x1b1200,%r13d,%r13d
  cmp    %al,%dl
  je     L1129
  cmp    0xd(%rsp),%dl
  je     L747
  cmp    0xe(%rsp),%dl
  je     L1095
  cmp    0xf(%rsp),%dl
  je     L150
  cmp    0x10(%rsp),%dl
  je     L1158
  cmp    0x11(%rsp),%dl
  je     L814
  cmp    0x12(%rsp),%dl
  je     L130
  cmp    0x13(%rsp),%dl
  je     L952
  cmp    0x14(%rsp),%dl
  je     L961
  cmp    0x15(%rsp),%dl
  je     L639
  xor    %r12d,%r12d
  cmp    0x16(%rsp),%dl
  setne  %r12b
  add    $0xa,%r12d
L116:
  movsbl 0x7(%rbx),%edx
  lea    (%rdx,%rdx,4),%ecx
  lea    (%rdx,%rcx,2),%ebp
  movzbl 0x8(%rbx),%edx
  add    %r12d,%ebp
  imul   $0x13b00,%ebp,%ebp
  add    %r13d,%ebp
  cmp    %al,%dl
  je     L695
  cmp    0xd(%rsp),%dl
  je     L826
  cmp    0xe(%rsp),%dl
  je     L524
  cmp    0xf(%rsp),%dl
  je     L20
  cmp    0x10(%rsp),%dl
  je     L938
  cmp    0x11(%rsp),%dl
  je     L1108
  cmp    0x12(%rsp),%dl
  je     L1019
  cmp    0x13(%rsp),%dl
  je     L1004
  cmp    0x14(%rsp),%dl
  je     L1219
  cmp    0x15(%rsp),%dl
  je     L1217
  xor    %r12d,%r12d
  cmp    0x16(%rsp),%dl
  setne  %r12b
  add    $0xa,%r12d
L83:
  movsbl 0x9(%rbx),%edx
  lea    (%rdx,%rdx,4),%edx
  lea    (%r12,%rdx,2),%r12d
  movzbl 0xc(%rbx),%edx
  imul   $0xfc0,%r12d,%r12d
  add    %ebp,%r12d
  cmp    %al,%dl
  je     L882
  cmp    0xd(%rsp),%dl
  je     L679
  cmp    0xe(%rsp),%dl
  je     L558
  cmp    0xf(%rsp),%dl
  je     L770
  cmp    0x10(%rsp),%dl
  je     L615
  cmp    0x11(%rsp),%dl
  je     L1111
  cmp    0x12(%rsp),%dl
  je     L1102
  cmp    0x13(%rsp),%dl
  je     L436
  cmp    0x14(%rsp),%dl
  je     L390
  cmp    0x15(%rsp),%dl
  je     L1017
  xor    %r13d,%r13d
  cmp    0x16(%rsp),%dl
  setne  %r13b
  add    $0xa,%r13d
L641:
  movsbl 0xd(%rbx),%edx
  lea    (%rdx,%rdx,8),%ebp
  movzbl 0x10(%rbx),%edx
  add    %r13d,%ebp
  imul   $0xe0,%ebp,%ebp
  add    %r12d,%ebp
  cmp    %al,%dl
  je     L742
  cmp    0xd(%rsp),%dl
  je     L619
  cmp    0xe(%rsp),%dl
  je     L243
  cmp    0xf(%rsp),%dl
  je     L784
  cmp    0x10(%rsp),%dl
  je     L94
  cmp    0x11(%rsp),%dl
  je     L1044
  cmp    0x12(%rsp),%dl
  je     L54
  cmp    0x13(%rsp),%dl
  je     L140
  cmp    0x14(%rsp),%dl
  je     L620
  cmp    0x15(%rsp),%dl
  je     L310
  xor    %r12d,%r12d
  cmp    0x16(%rsp),%dl
  setne  %r12b
  add    $0xa,%r12d
L873:
  movsbl 0x11(%rbx),%edx
  lea    (%r12,%rdx,8),%ecx
  movzbl 0x12(%rbx),%edx
  imul   $0xe,%ecx,%ecx
  add    %ebp,%ecx
  cmp    %al,%dl
  je     L525
  cmp    %dl,0xd(%rsp)
  je     L646
  cmp    0xe(%rsp),%dl
  je     L206
  cmp    %dl,0xf(%rsp)
  je     L1126
  cmp    0x10(%rsp),%dl
  je     L1053
  cmp    0x11(%rsp),%dl
  je     L589
  cmp    %dl,0x12(%rsp)
  je     L981
  cmp    0x13(%rsp),%dl
  je     L384
  cmp    %dl,0x14(%rsp)
  je     L455
  cmp    0x15(%rsp),%dl
  je     L124
  xor    %eax,%eax
  cmp    0x16(%rsp),%dl
  setne  %al
  add    $0xa,%eax
L827:
  movsbl 0x13(%rbx),%edx
  lea    (%rax,%rdx,8),%eax
  sub    %edx,%eax
  add    %ecx,%eax
  mov    0x18(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L767
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L201:
  mov    $0x5,%ebp
  nopw   0x0(%rax,%rax,1)
L71:
  movslq %ebp,%rax
  mov    $0xb,%edx
  sub    %ebp,%edx
  lea    0xd(%rsp,%rax,1),%rsi
  lea    0xc(%rsp,%rax,1),%rdi
  call   <memmove@plt>
  movzbl 0xc(%rsp),%eax
  jmp    L484
  nopl   0x0(%rax,%rax,1)
L525:
  xor    %eax,%eax
  jmp    L827
  nopl   0x0(%rax)
L742:
  xor    %r12d,%r12d
  nopl   0x0(%rax,%rax,1)
L195:
  mov    $0x7,%edx
  mov    $0x1,%ecx
  movslq %r12d,%rax
  sub    %r12d,%edx
  cmp    $0x6,%r12d
  lea    0xd(%rsp,%rax,1),%rsi
  cmovg  %rcx,%rdx
  lea    0xc(%rsp,%rax,1),%rdi
  call   <memmove@plt>
  movzbl 0xc(%rsp),%eax
  jmp    L873
  nopl   0x0(%rax)
L882:
  xor    %r13d,%r13d
  nopl   0x0(%rax,%rax,1)
L427:
  mov    $0x8,%edx
  mov    $0x1,%ecx
  movslq %r13d,%rax
  sub    %r13d,%edx
  cmp    $0x7,%r13d
  lea    0xd(%rsp,%rax,1),%rsi
  cmovg  %rcx,%rdx
  lea    0xc(%rsp,%rax,1),%rdi
  call   <memmove@plt>
  movzbl 0xc(%rsp),%eax
  jmp    L641
  nopl   0x0(%rax)
L695:
  xor    %r12d,%r12d
  nopl   0x0(%rax,%rax,1)
L513:
  mov    $0x9,%edx
  mov    $0x1,%ecx
  movslq %r12d,%rax
  sub    %r12d,%edx
  cmp    $0x8,%r12d
  lea    0xd(%rsp,%rax,1),%rsi
  cmovg  %rcx,%rdx
  lea    0xc(%rsp,%rax,1),%rdi
  call   <memmove@plt>
  movzbl 0xc(%rsp),%eax
  jmp    L83
  nopl   0x0(%rax)
L1129:
  xor    %r12d,%r12d
  nopl   0x0(%rax,%rax,1)
L288:
  mov    $0xa,%edx
  mov    $0x1,%ecx
  movslq %r12d,%rax
  sub    %r12d,%edx
  cmp    $0x9,%r12d
  lea    0xd(%rsp,%rax,1),%rsi
  cmovg  %rcx,%rdx
  lea    0xc(%rsp,%rax,1),%rdi
  call   <memmove@plt>
  movzbl 0xc(%rsp),%eax
  jmp    L116
  nopl   0x0(%rax)
L736:
  xor    %ebp,%ebp
  jmp    L71
  nopw   0x0(%rax,%rax,1)
L1202:
  mov    $0x1,%ebp
  jmp    L71
  nopw   0x0(%rax,%rax,1)
L646:
  mov    $0x1,%eax
  jmp    L827
  nopw   0x0(%rax,%rax,1)
L826:
  mov    $0x1,%r12d
  jmp    L513
  nopl   0x0(%rax,%rax,1)
L747:
  mov    $0x1,%r12d
  jmp    L288
  nopl   0x0(%rax,%rax,1)
L619:
  mov    $0x1,%r12d
  jmp    L195
  nopl   0x0(%rax,%rax,1)
L679:
  mov    $0x1,%r13d
  jmp    L427
L558:
  mov    $0x2,%r13d
  jmp    L427
L243:
  mov    $0x2,%r12d
  jmp    L195
L524:
  mov    $0x2,%r12d
  jmp    L513
L1095:
  mov    $0x2,%r12d
  jmp    L288
L979:
  mov    $0x2,%ebp
  jmp    L71
L206:
  mov    $0x2,%eax
  jmp    L827
L1126:
  mov    $0x3,%eax
  jmp    L827
L150:
  mov    $0x3,%r12d
  jmp    L288
L1009:
  mov    $0x3,%ebp
  jmp    L71
L784:
  mov    $0x3,%r12d
  jmp    L195
L20:
  mov    $0x3,%r12d
  jmp    L513
L770:
  mov    $0x3,%r13d
  jmp    L427
L629:
  mov    $0x4,%ebp
  jmp    L71
L1158:
  mov    $0x4,%r12d
  jmp    L288
L615:
  mov    $0x4,%r13d
  jmp    L427
L94:
  mov    $0x4,%r12d
  jmp    L195
L938:
  mov    $0x4,%r12d
  jmp    L513
L1053:
  mov    $0x4,%eax
  jmp    L827
L589:
  mov    $0x5,%eax
  jmp    L827
L1044:
  mov    $0x5,%r12d
  jmp    L195
L1108:
  mov    $0x5,%r12d
  jmp    L513
L814:
  mov    $0x5,%r12d
  jmp    L288
L1111:
  mov    $0x5,%r13d
  jmp    L427
L54:
  mov    $0x6,%r12d
  jmp    L195
L1019:
  mov    $0x6,%r12d
  jmp    L513
L130:
  mov    $0x6,%r12d
  jmp    L288
L981:
  mov    $0x6,%eax
  jmp    L827
L823:
  mov    $0x6,%ebp
  jmp    L71
L1102:
  mov    $0x6,%r13d
  jmp    L427
L952:
  mov    $0x7,%r12d
  jmp    L288
L1004:
  mov    $0x7,%r12d
  jmp    L513
L140:
  mov    $0x7,%r12d
  jmp    L873
L128:
  mov    $0x7,%ebp
  jmp    L71
L436:
  mov    $0x7,%r13d
  jmp    L427
L384:
  mov    $0x7,%eax
  jmp    L827
L620:
  mov    $0x8,%r12d
  jmp    L873
L749:
  mov    $0x8,%ebp
  jmp    L71
L1219:
  mov    $0x8,%r12d
  jmp    L513
L390:
  mov    $0x8,%r13d
  jmp    L641
L455:
  mov    $0x8,%eax
  jmp    L827
L961:
  mov    $0x8,%r12d
  jmp    L288
L1191:
  mov    $0x9,%ebp
  jmp    L71
L124:
  mov    $0x9,%eax
  jmp    L827
L1217:
  mov    $0x9,%r12d
  jmp    L83
L310:
  mov    $0x9,%r12d
  jmp    L873
L639:
  mov    $0x9,%r12d
  jmp    L288
L1017:
  mov    $0x9,%r13d
  jmp    L641
L698:
  mov    $0xa,%ebp
  jmp    L71
L767:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int edge_hash1(const char *cubestr) {
  char positions[] = {1, 3, 4, 6, 8, 9, 10, 11, 13, 15, 16, 18};
  int index = 0;
  int pos, rot, num, i;
  const char *cubie;
  cubie = ((char *)cubestr + (1 << 1));
  num = cubie[0];
  pos = 0;
  while (num != positions[pos])
    ++pos;
  for (i = pos; i < 11; ++i)
    positions[i] = positions[i + 1];
  rot = cubie[1] * 12;
  index += (pos + rot) * 1774080;
  cubie = ((char *)cubestr + (3 << 1));
  num = cubie[0];
  pos = 0;
  while (num != positions[pos])
    ++pos;
  for (i = pos; i < 10; ++i)
    positions[i] = positions[i + 1];
  rot = cubie[1] * 11;
  index += (pos + rot) * 80640;
  cubie = ((char *)cubestr + (4 << 1));
  num = cubie[0];
  pos = 0;
  while (num != positions[pos])
    ++pos;
  for (i = pos; i < 9; ++i)
    positions[i] = positions[i + 1];
  rot = cubie[1] * 10;
  index += (pos + rot) * 4032;
  cubie = ((char *)cubestr + (6 << 1));
  num = cubie[0];
  pos = 0;
  while (num != positions[pos])
    ++pos;
  for (i = pos; i < 8; ++i)
    positions[i] = positions[i + 1];
  rot = cubie[1] * 9;
  index += (pos + rot) * 224;
  cubie = ((char *)cubestr + (8 << 1));
  num = cubie[0];
  pos = 0;
  while (num != positions[pos])
    ++pos;
  for (i = pos; i < 7; ++i)
    positions[i] = positions[i + 1];
  rot = cubie[1] * 8;
  index += (pos + rot) * 14;
  cubie = ((char *)cubestr + (9 << 1));
  num = cubie[0];
  pos = 0;
  while (num != positions[pos])
    ++pos;
  for (i = pos; i < 6; ++i)
    positions[i] = positions[i + 1];
  rot = cubie[1] * 7;
  index += (pos + rot);
  return index;
}
```