user: What would the C source look like for the assembly code provided here?

```asm
<find_emph_char>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %edx,%eax
  mov    %al,-0x44(%rbp)
  movq   $0x1,-0x28(%rbp)
  jmp    L406
L88:
  addq   $0x1,-0x28(%rbp)
L209:
  mov    -0x28(%rbp),%rax
  cmp    -0x40(%rbp),%rax
  jae    L40
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    %al,-0x44(%rbp)
  je     L40
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x60,%al
  je     L40
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5b,%al
  jne    L88
L40:
  mov    -0x28(%rbp),%rax
  cmp    -0x40(%rbp),%rax
  jb     L457
  mov    $0x0,%eax
  jmp    L402
L457:
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    %al,-0x44(%rbp)
  jne    L157
  mov    -0x28(%rbp),%rax
  jmp    L402
L157:
  cmpq   $0x0,-0x28(%rbp)
  je     L54
  mov    -0x28(%rbp),%rax
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5c,%al
  jne    L54
  addq   $0x1,-0x28(%rbp)
  jmp    L406
L54:
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x60,%al
  jne    L486
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x10(%rbp)
  jmp    L261
L215:
  addq   $0x1,-0x28(%rbp)
  addq   $0x1,-0x20(%rbp)
L261:
  mov    -0x28(%rbp),%rax
  cmp    -0x40(%rbp),%rax
  jae    L36
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x60,%al
  je     L215
L36:
  mov    -0x28(%rbp),%rax
  cmp    -0x40(%rbp),%rax
  jb     L53
  mov    $0x0,%eax
  jmp    L402
L53:
  movq   $0x0,-0x18(%rbp)
  jmp    L46
L79:
  cmpq   $0x0,-0x10(%rbp)
  jne    L489
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    %al,-0x44(%rbp)
  jne    L489
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x10(%rbp)
L489:
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x60,%al
  jne    L529
  addq   $0x1,-0x18(%rbp)
  jmp    L294
L529:
  movq   $0x0,-0x18(%rbp)
L294:
  addq   $0x1,-0x28(%rbp)
L46:
  mov    -0x28(%rbp),%rax
  cmp    -0x40(%rbp),%rax
  jae    L22
  mov    -0x18(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jb     L79
L22:
  mov    -0x28(%rbp),%rax
  cmp    -0x40(%rbp),%rax
  jb     L150
  mov    -0x10(%rbp),%rax
  jmp    L402
L150:
  addq   $0x1,-0x28(%rbp)
  jmp    L406
L486:
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5b,%al
  jne    L406
  movq   $0x0,-0x8(%rbp)
  addq   $0x1,-0x28(%rbp)
  jmp    L15
L454:
  cmpq   $0x0,-0x8(%rbp)
  jne    L33
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    %al,-0x44(%rbp)
  jne    L33
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x8(%rbp)
L33:
  addq   $0x1,-0x28(%rbp)
L15:
  mov    -0x28(%rbp),%rax
  cmp    -0x40(%rbp),%rax
  jae    L335
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5d,%al
  jne    L454
L335:
  addq   $0x1,-0x28(%rbp)
  jmp    L312
L419:
  addq   $0x1,-0x28(%rbp)
L312:
  mov    -0x28(%rbp),%rax
  cmp    -0x40(%rbp),%rax
  jae    L430
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L419
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L419
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L419
L430:
  mov    -0x28(%rbp),%rax
  cmp    -0x40(%rbp),%rax
  jb     L176
  mov    -0x8(%rbp),%rax
  jmp    L402
L176:
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5b,%al
  je     L403
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x28,%al
  je     L403
  cmpq   $0x0,-0x8(%rbp)
  je     L406
  mov    -0x8(%rbp),%rax
  jmp    L402
L403:
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x29(%rbp)
  addq   $0x1,-0x28(%rbp)
  jmp    L35
L292:
  cmpq   $0x0,-0x8(%rbp)
  jne    L247
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    %al,-0x44(%rbp)
  jne    L247
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x8(%rbp)
L247:
  addq   $0x1,-0x28(%rbp)
L35:
  mov    -0x28(%rbp),%rax
  cmp    -0x40(%rbp),%rax
  jae    L51
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    %al,-0x29(%rbp)
  jne    L292
L51:
  mov    -0x28(%rbp),%rax
  cmp    -0x40(%rbp),%rax
  jb     L318
  mov    -0x8(%rbp),%rax
  jmp    L402
L318:
  addq   $0x1,-0x28(%rbp)
L406:
  mov    -0x28(%rbp),%rax
  cmp    -0x40(%rbp),%rax
  jb     L209
  mov    $0x0,%eax
L402:
  pop    %rbp
  ret
```

assistant: ```c
size_t find_emph_char(char *data, size_t size, char c) {
  size_t i = 1;
  while (i < size) {
    while (i < size && data[i] != c && data[i] != '`' && data[i] != '[')
      i += 1;
    if (i >= size)
      return 0;
    if (data[i] == c)
      return i;
    if (i && data[i - 1] == '\\') {
      i += 1;
      continue;
    }
    if (data[i] == '`') {
      size_t span_nb = 0, bt;
      size_t tmp_i = 0;
      while (i < size && data[i] == '`') {
        i += 1;
        span_nb += 1;
      }
      if (i >= size)
        return 0;
      bt = 0;
      while (i < size && bt < span_nb) {
        if (!tmp_i && data[i] == c)
          tmp_i = i;
        if (data[i] == '`')
          bt += 1;
        else
          bt = 0;
        i += 1;
      }
      if (i >= size)
        return tmp_i;
      i += 1;
    } else if (data[i] == '[') {
      size_t tmp_i = 0;
      char cc;
      i += 1;
      while (i < size && data[i] != ']') {
        if (!tmp_i && data[i] == c)
          tmp_i = i;
        i += 1;
      }
      i += 1;
      while (i < size && (data[i] == ' ' || data[i] == '\t' || data[i] == '\n'))
        i += 1;
      if (i >= size)
        return tmp_i;
      if (data[i] != '[' && data[i] != '(') {
        if (tmp_i)
          return tmp_i;
        else
          continue;
      }
      cc = data[i];
      i += 1;
      while (i < size && data[i] != cc) {
        if (!tmp_i && data[i] == c)
          tmp_i = i;
        i += 1;
      }
      if (i >= size)
        return tmp_i;
      i += 1;
    }
  }
  return 0;
}
```