user: 请将以下的汇编代码转换成C语言代码：

```asm
<find_emph_char>:
  endbr64
  cmp    $0x1,%rsi
  jbe    L69
  mov    %rdi,%r8
  push   %rbx
  mov    %edx,%r9d
  mov    %rsi,%rdi
  movzbl 0x1(%r8),%edx
  mov    $0x1,%eax
  xor    %r11d,%r11d
  jmp    L28
  nopw   0x0(%rax,%rax,1)
L59:
  cmp    $0x5b,%dl
  je     L529
  add    $0x1,%rax
  cmp    %rax,%rdi
  jbe    L438
L305:
  movzbl (%r8,%rax,1),%edx
L28:
  cmp    %r9b,%dl
  setne  %sil
  cmp    $0x60,%dl
  setne  %cl
  test   %cl,%sil
  jne    L59
L529:
  cmp    %rax,%rdi
  jbe    L438
  cmp    %r9b,%dl
  je     L417
  test   %rax,%rax
  je     L130
  cmpb   $0x5c,-0x1(%r8,%rax,1)
  je     L72
L130:
  cmp    $0x60,%dl
  je     L368
  cmp    $0x5b,%dl
  jne    L28
  add    $0x1,%rax
  xor    %r10d,%r10d
  cmp    %rax,%rdi
  ja     L123
  jmp    L472
  nopl   0x0(%rax,%rax,1)
L137:
  add    $0x1,%rax
  cmp    %rax,%rdi
  jbe    L472
L123:
  movzbl (%r8,%rax,1),%edx
  cmp    $0x5d,%dl
  je     L472
  test   %r10,%r10
  jne    L137
L448:
  cmp    %dl,%r9b
  je     L255
  add    $0x1,%rax
  cmp    %rax,%rdi
  jbe    L472
  movzbl (%r8,%rax,1),%edx
  cmp    $0x5d,%dl
  jne    L448
  nopl   0x0(%rax)
L472:
  add    $0x1,%rax
  cmp    %rax,%rdi
  jbe    L155
  movzbl (%r8,%rax,1),%edx
  lea    -0x9(%rdx),%ecx
  cmp    $0x1,%cl
  jbe    L472
  cmp    $0x20,%dl
  je     L472
  cmp    %rax,%rdi
  jbe    L155
  cmp    $0x5b,%dl
  je     L33
  cmp    $0x28,%dl
  je     L33
  test   %r10,%r10
  je     L28
L155:
  mov    %r10,%rax
  pop    %rbx
  ret
L17:
  mov    %rax,%r10
  nopl   0x0(%rax,%rax,1)
L33:
  add    $0x1,%rax
  cmp    %rax,%rdi
  jbe    L155
  movzbl (%r8,%rax,1),%ecx
  cmp    %dl,%cl
  je     L310
  test   %r10,%r10
  jne    L33
L217:
  cmp    %cl,%r9b
  je     L17
  add    $0x1,%rax
  cmp    %rax,%rdi
  jbe    L155
  movzbl (%r8,%rax,1),%ecx
  cmp    %cl,%dl
  jne    L217
  nopw   0x0(%rax,%rax,1)
L72:
  add    $0x1,%rax
  cmp    %rdi,%rax
  jb     L305
L438:
  xor    %r10d,%r10d
  pop    %rbx
  mov    %r10,%rax
  ret
  nopl   (%rax)
L255:
  mov    %rax,%r10
  jmp    L137
L368:
  mov    %rdi,%rsi
  lea    0x1(%rax),%rcx
  lea    (%r8,%rax,1),%r10
  xor    %edx,%edx
  sub    %rax,%rsi
L278:
  lea    (%rcx,%rdx,1),%rax
  add    $0x1,%rdx
  cmp    %rsi,%rdx
  je     L438
  cmpb   $0x60,(%r10,%rdx,1)
  je     L278
  xor    %ecx,%ecx
  xor    %esi,%esi
  jmp    L50
  nopw   0x0(%rax,%rax,1)
L288:
  mov    %r10,%rcx
L50:
  mov    %rcx,%r10
  test   %rcx,%rcx
  jne    L199
  cmp    %r9b,(%r8,%rax,1)
  mov    %r11,%r10
  cmove  %rax,%r10
L199:
  cmpb   $0x60,(%r8,%rax,1)
  je     L280
  mov    $0x1,%ebx
  xor    %esi,%esi
L495:
  add    $0x1,%rax
  cmp    %rax,%rdi
  jbe    L155
  test   %bl,%bl
  je     L310
  test   %rcx,%rcx
  je     L288
L192:
  cmpb   $0x60,(%r8,%rax,1)
  je     L249
L292:
  add    $0x1,%rax
  cmp    %rax,%rdi
  jbe    L155
  xor    %esi,%esi
  cmpb   $0x60,(%r8,%rax,1)
  jne    L292
L249:
  add    $0x1,%rsi
  add    $0x1,%rax
  cmp    %rsi,%rdx
  jbe    L310
  cmp    %rax,%rdi
  ja     L192
  jmp    L155
  xchg   %ax,%ax
L280:
  add    $0x1,%rsi
  cmp    %rsi,%rdx
  seta   %bl
  jmp    L495
L310:
  cmp    %rax,%rdi
  jbe    L155
  add    $0x1,%rax
  cmp    %rdi,%rax
  jb     L305
  jmp    L438
L417:
  mov    %rax,%r10
  jmp    L155
L69:
  xor    %eax,%eax
  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;
}
```