user: Translate the below assembly code into C programming language:

```asm
<Tcl_Backslash>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x8,%rsp
  movzbl 0x1(%rdi),%r12d
  cmp    $0x4d,%r12b
  jle    L191
  lea    -0x5b(%r12),%eax
  cmp    $0x22,%al
  ja     L56
  lea    D4(%rip),%rdx
  movzbl %al,%eax
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L191:
  cmp    $0x1f,%r12b
  jg     L120
L213:
  movsbl %r12b,%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  ja     L56
  movsbl 0x2(%rbp),%eax
  sub    $0x30,%r12d
  mov    %eax,%edx
  sub    $0x30,%eax
  cmp    $0x9,%eax
  jbe    L140
  nopl   0x0(%rax)
L160:
  mov    $0x2,%eax
L124:
  test   %rbx,%rbx
  je     L146
  mov    %eax,(%rbx)
L146:
  add    $0x8,%rsp
  mov    %r12d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopw   0x0(%rax,%rax,1)
L120:
  lea    -0x20(%r12),%ecx
  mov    $0x1,%eax
  shl    %cl,%rax
  test   $0x8000015,%eax
  jne    L160
  cmp    $0x4d,%r12b
  je     L267
  cmp    $0x43,%r12b
  jne    L213
  movsbl 0x2(%rdi),%edi
  mov    %edi,%r13d
  call   <isspace@plt>
  test   %eax,%eax
  jne    L75
  test   %r13b,%r13b
  je     L75
  mov    %r13d,%r12d
  mov    $0x3,%eax
  and    $0x1f,%r12d
  cmp    $0x4d,%r13b
  jne    L124
  movsbl 0x3(%rbp),%edi
  mov    %edi,%r12d
  call   <isspace@plt>
  test   %eax,%eax
  jne    L130
  test   %r12b,%r12b
  je     L130
  and    $0x1f,%r12d
  mov    $0x4,%eax
  or     $0xffffff80,%r12d
  jmp    L124
  nopw   0x0(%rax,%rax,1)
  mov    $0x2,%eax
  mov    $0xa,%r12d
  jmp    L124
  mov    $0x2,%eax
  mov    $0x9,%r12d
  jmp    L124
L75:
  mov    $0x1,%eax
  jmp    L124
  nopw   0x0(%rax,%rax,1)
L267:
  movsbl 0x2(%rdi),%edi
  mov    %edi,%ebp
  call   <isspace@plt>
  test   %eax,%eax
  jne    L75
  test   %bpl,%bpl
  je     L75
  lea    -0x80(%rbp),%r12d
  mov    $0x3,%eax
  jmp    L124
  nopw   0x0(%rax,%rax,1)
L56:
  mov    $0x1,%eax
  mov    $0x5c,%r12d
  jmp    L124
  nopl   0x0(%rax,%rax,1)
  mov    $0x2,%eax
  mov    $0x8,%r12d
  jmp    L124
  mov    $0x2,%eax
  mov    $0x1b,%r12d
  jmp    L124
L140:
  movsbl 0x3(%rbp),%eax
  lea    -0x30(%rdx,%r12,8),%r12d
  mov    %eax,%edx
  sub    $0x30,%eax
  cmp    $0x9,%eax
  jbe    L50
  mov    $0x3,%eax
  jmp    L124
  nopl   (%rax)
L50:
  lea    -0x30(%rdx,%r12,8),%r12d
  mov    $0x4,%eax
  jmp    L124
  nop
L130:
  mov    $0x3,%eax
  mov    $0xd,%r12d
  jmp    L124
```

assistant: ```c
char Tcl_Backslash(src, readPtr)
char *src;
int *readPtr;
{
  register char *p = src + 1;
  char result;
  int count;
  count = 2;
  switch (*p) {
  case 'b':
    result = '\b';
    break;
  case 'e':
    result = 033;
    break;
  case 'n':
    result = '\n';
    break;
  case 't':
    result = '\t';
    break;
  case 'C':
    p++;
    if (isspace(*p) || (*p == 0)) {
      result = 'C';
      count = 1;
      break;
    }
    count = 3;
    if (*p == 'M') {
      p++;
      if (isspace(*p) || (*p == 0)) {
        result = 'M' & 037;
        break;
      }
      count = 4;
      result = (*p & 037) | 0200;
      break;
    }
    count = 3;
    result = *p & 037;
    break;
  case 'M':
    p++;
    if (isspace(*p) || (*p == 0)) {
      result = 'M';
      count = 1;
      break;
    }
    count = 3;
    result = *p + 0200;
    break;
  case '}':
  case '{':
  case ']':
  case '[':
  case '$':
  case ' ':
  case ';':
  case '"':
  case '\\':
    result = *p;
    break;
  default:
    if (isdigit(*p)) {
      result = *p - '0';
      p++;
      if (!isdigit(*p)) {
        break;
      }
      count = 3;
      result = (result << 3) + (*p - '0');
      p++;
      if (!isdigit(*p)) {
        break;
      }
      count = 4;
      result = (result << 3) + (*p - '0');
      break;
    }
    result = '\\';
    count = 1;
    break;
  }
  if (readPtr != 0) {
    *readPtr = count;
  }
  return result;
}
```