user: 下面的汇编指令对应的C源代码是什么：

```asm
<hash_keys>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  mov    %rdi,%rax
  mov    %esi,%edx
  mov    %edx,%ebx
  cmp    $0x1a,%ebx
  ja     L8
  mov    %ebx,%ecx
  lea    0x0(,%rcx,4),%rsi
  lea    D125(%rip),%rcx
  mov    (%rsi,%rcx,1),%ecx
  movslq %ecx,%rcx
  lea    D125(%rip),%rsi
  add    %rsi,%rcx
  notrack jmp *%rcx
L8:
  lea    0x1a(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0x18(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0x16(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0x13(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0xe(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0xd(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  add    $0x1,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0xc(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0xb(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0xa(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0x9(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0x8(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0x7(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0x5(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  add    $0x1,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0x4(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0x3(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0x2(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  lea    0x1(%rax),%rcx
  movzbl (%rcx),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  movzbl (%rax),%ecx
  movzbl %cl,%ecx
  movslq %ecx,%rcx
  lea    (%rcx,%rcx,1),%rsi
  lea    D26(%rip),%rcx
  movzwl (%rsi,%rcx,1),%ecx
  movzwl %cx,%ecx
  add    %ecx,%ebx
  nop
  sub    $0x1,%edx
  mov    %edx,%edx
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  lea    D26(%rip),%rax
  movzwl (%rdx,%rax,1),%eax
  movzwl %ax,%eax
  add    %ebx,%eax
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
unsigned int hash_keys(str, len)
register const char *str;
register unsigned int len;
{
  static unsigned short asso_values[] = {13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 1, 2, 13682, 1, 13682, 13682, 3, 1296, 1027, 1628, 977, 133, 153, 119, 213, 9, 1, 13682, 13682, 13682, 13682, 13682, 13682, 1523, 1656, 489, 88, 925, 625, 1283, 687, 1301, 406, 27, 850, 803, 842, 184, 104, 105, 1643, 257, 241, 1478, 1487, 379, 40, 94, 6, 13682, 13682, 13682, 13682, 198, 260, 3, 111, 33, 15, 2, 35, 76, 404, 21, 897, 1149, 47, 9, 4, 1, 3, 1970, 5, 1, 1, 9, 372, 1736, 832, 318, 2115, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682};
  register int hval = len;
  switch (hval) {
  default:
    hval += asso_values[(unsigned char)str[26]];
  case 26:
  case 25:
    hval += asso_values[(unsigned char)str[24]];
  case 24:
  case 23:
    hval += asso_values[(unsigned char)str[22]];
  case 22:
  case 21:
  case 20:
    hval += asso_values[(unsigned char)str[19]];
  case 19:
  case 18:
  case 17:
  case 16:
  case 15:
    hval += asso_values[(unsigned char)str[14]];
  case 14:
    hval += asso_values[(unsigned char)str[13] + 1];
  case 13:
    hval += asso_values[(unsigned char)str[12]];
  case 12:
    hval += asso_values[(unsigned char)str[11]];
  case 11:
    hval += asso_values[(unsigned char)str[10]];
  case 10:
    hval += asso_values[(unsigned char)str[9]];
  case 9:
    hval += asso_values[(unsigned char)str[8]];
  case 8:
    hval += asso_values[(unsigned char)str[7]];
  case 7:
  case 6:
    hval += asso_values[(unsigned char)str[5] + 1];
  case 5:
    hval += asso_values[(unsigned char)str[4]];
  case 4:
    hval += asso_values[(unsigned char)str[3]];
  case 3:
    hval += asso_values[(unsigned char)str[2]];
  case 2:
    hval += asso_values[(unsigned char)str[1]];
  case 1:
    hval += asso_values[(unsigned char)str[0]];
    break;
  }
  return hval + asso_values[(unsigned char)str[len - 1]];
}
```