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

```asm
<morse_encode_char>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %esi,%eax
  mov    %al,-0xc(%rbp)
  movsbl -0xc(%rbp),%eax
  sub    $0x20,%eax
  cmp    $0x3a,%eax
  ja     L299
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D12(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D12(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    $0x3,%esi
  mov    %rax,%rdi
  call   <blank@plt>
  jmp    L299
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dit@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <dah@plt>
  nop
L299:
  mov    -0x8(%rbp),%rax
  mov    $0x4,%esi
  mov    %rax,%rdi
  call   <blank@plt>
  nop
  leave
  ret
```

assistant: ```c
void morse_encode_char(uint8_t *buffer, char letter) {
  switch (letter) {
  case 'A':
    dit(buffer);
    dah(buffer);
    break;
  case 'B':
    dah(buffer);
    dit(buffer);
    dit(buffer);
    dit(buffer);
    break;
  case 'C':
    dah(buffer);
    dit(buffer);
    dah(buffer);
    dit(buffer);
    break;
  case 'D':
    dah(buffer);
    dit(buffer);
    dit(buffer);
    break;
  case 'E':
    dit(buffer);
    break;
  case 'F':
    dit(buffer);
    dit(buffer);
    dah(buffer);
    dit(buffer);
    break;
  case 'G':
    dah(buffer);
    dah(buffer);
    dit(buffer);
    break;
  case 'H':
    dit(buffer);
    dit(buffer);
    dit(buffer);
    dit(buffer);
    break;
  case 'I':
    dit(buffer);
    dit(buffer);
    break;
  case 'J':
    dit(buffer);
    dah(buffer);
    dah(buffer);
    dah(buffer);
    break;
  case 'K':
    dah(buffer);
    dit(buffer);
    dah(buffer);
    break;
  case 'L':
    dit(buffer);
    dah(buffer);
    dit(buffer);
    dit(buffer);
    break;
  case 'M':
    dah(buffer);
    dah(buffer);
    break;
  case 'N':
    dah(buffer);
    dit(buffer);
    break;
  case 'O':
    dah(buffer);
    dah(buffer);
    dah(buffer);
    break;
  case 'P':
    dit(buffer);
    dah(buffer);
    dah(buffer);
    dit(buffer);
    break;
  case 'Q':
    dah(buffer);
    dah(buffer);
    dit(buffer);
    dah(buffer);
    break;
  case 'R':
    dit(buffer);
    dah(buffer);
    dit(buffer);
    break;
  case 'S':
    dit(buffer);
    dit(buffer);
    dit(buffer);
    break;
  case 'T':
    dah(buffer);
    break;
  case 'U':
    dit(buffer);
    dit(buffer);
    dah(buffer);
    break;
  case 'V':
    dit(buffer);
    dit(buffer);
    dit(buffer);
    dah(buffer);
    break;
  case 'W':
    dit(buffer);
    dah(buffer);
    dah(buffer);
    break;
  case 'X':
    dah(buffer);
    dit(buffer);
    dit(buffer);
    dah(buffer);
    break;
  case 'Y':
    dah(buffer);
    dit(buffer);
    dah(buffer);
    dah(buffer);
    break;
  case 'Z':
    dah(buffer);
    dah(buffer);
    dit(buffer);
    dit(buffer);
    break;
  case '1':
    dit(buffer);
    dah(buffer);
    dah(buffer);
    dah(buffer);
    dah(buffer);
    break;
  case '2':
    dit(buffer);
    dit(buffer);
    dah(buffer);
    dah(buffer);
    dah(buffer);
    break;
  case '3':
    dit(buffer);
    dit(buffer);
    dit(buffer);
    dah(buffer);
    dah(buffer);
    break;
  case '4':
    dit(buffer);
    dit(buffer);
    dit(buffer);
    dit(buffer);
    dah(buffer);
    break;
  case '5':
    dit(buffer);
    dit(buffer);
    dit(buffer);
    dit(buffer);
    dit(buffer);
    break;
  case '6':
    dah(buffer);
    dit(buffer);
    dit(buffer);
    dit(buffer);
    dit(buffer);
    break;
  case '7':
    dah(buffer);
    dah(buffer);
    dit(buffer);
    dit(buffer);
    dit(buffer);
    break;
  case '8':
    dah(buffer);
    dah(buffer);
    dah(buffer);
    dit(buffer);
    dit(buffer);
    break;
  case '9':
    dah(buffer);
    dah(buffer);
    dah(buffer);
    dah(buffer);
    dit(buffer);
    break;
  case '0':
    dah(buffer);
    dah(buffer);
    dah(buffer);
    dah(buffer);
    dah(buffer);
    break;
  case ' ':
    blank(buffer, 3);
    break;
  case '.':
    dit(buffer);
    dah(buffer);
    dit(buffer);
    dah(buffer);
    dit(buffer);
    dah(buffer);
    break;
  }
  blank(buffer, 4);
}
```