user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<find_emph_char>:
  endbr64
  mov    %rdi,%r8
  mov    %edx,%r9d
  mov    %rsi,%rdi
  cmp    $0x1,%rsi
  jbe    L56
  movzbl 0x1(%r8),%edx
  mov    $0x1,%eax
  jmp    L346
  nopl   0x0(%rax,%rax,1)
L161:
  cmp    $0x5b,%dl
  je     L436
  add    $0x1,%rax
  cmp    %rax,%rdi
  jbe    L56
L80:
  movzbl (%r8,%rax,1),%edx
L346:
  cmp    %dl,%r9b
  setne  %sil
  cmp    $0x60,%dl
  setne  %cl
  test   %cl,%sil
  jne    L161
L436:
  cmp    %rax,%rdi
  jbe    L56
  cmp    %dl,%r9b
  je     L417
  test   %rax,%rax
  je     L183
  cmpb   $0x5c,-0x1(%r8,%rax,1)
  je     L47
L183:
  cmp    $0x60,%dl
  je     L425
  cmp    $0x5b,%dl
  jne    L346
  add    $0x1,%rax
  xor    %r10d,%r10d
  cmp    %rax,%rdi
  ja     L416
  jmp    L341
L162:
  add    $0x1,%rax
  cmp    %rax,%rdi
  jbe    L341
L416:
  movzbl (%r8,%rax,1),%edx
  cmp    $0x5d,%dl
  je     L341
  test   %r10,%r10
  jne    L162
L311:
  cmp    %dl,%r9b
  je     L89
  add    $0x1,%rax
  cmp    %rax,%rdi
  jbe    L341
  movzbl (%r8,%rax,1),%edx
  cmp    $0x5d,%dl
  jne    L311
  nopl   0x0(%rax)
L341:
  add    $0x1,%rax
  cmp    %rax,%rdi
  jbe    L433
  movzbl (%r8,%rax,1),%edx
  lea    -0x9(%rdx),%ecx
  cmp    $0x1,%cl
  jbe    L341
  cmp    $0x20,%dl
  je     L341
  cmp    %rax,%rdi
  jbe    L433
  cmp    $0x5b,%dl
  je     L281
  cmp    $0x28,%dl
  je     L281
  test   %r10,%r10
  je     L80
L433:
  mov    %r10,%rax
  ret
  nop
L232:
  mov    %rax,%r10
  nopl   0x0(%rax,%rax,1)
L281:
  add    $0x1,%rax
  cmp    %rax,%rdi
  jbe    L433
  movzbl (%r8,%rax,1),%ecx
  cmp    %dl,%cl
  je     L159
  test   %r10,%r10
  jne    L281
L237:
  cmp    %cl,%r9b
  je     L232
  add    $0x1,%rax
  cmp    %rax,%rdi
  jbe    L433
  movzbl (%r8,%rax,1),%ecx
  cmp    %cl,%dl
  jne    L237
  nopw   0x0(%rax,%rax,1)
L47:
  add    $0x1,%rax
L386:
  cmp    %rdi,%rax
  jb     L80
L56:
  xor    %r10d,%r10d
  mov    %r10,%rax
  ret
  nopl   0x0(%rax)
L89:
  mov    %rax,%r10
  jmp    L162
L425:
  mov    %rdi,%r10
  lea    0x1(%rax),%rsi
  lea    (%r8,%rax,1),%r11
  xor    %edx,%edx
  sub    %rax,%r10
L381:
  lea    (%rsi,%rdx,1),%rax
  add    $0x1,%rdx
  cmp    %r10,%rdx
  je     L56
  movzbl (%r11,%rdx,1),%ecx
  cmp    $0x60,%cl
  je     L381
  xor    %r10d,%r10d
  xor    %r11d,%r11d
  jmp    L120
  nop
L143:
  mov    $0x1,%ecx
  xor    %r11d,%r11d
L74:
  lea    0x1(%rax),%rsi
  cmp    %rsi,%rdi
  jbe    L433
  test   %cl,%cl
  je     L199
  movzbl (%r8,%rsi,1),%ecx
  mov    %rsi,%rax
L120:
  test   %r10,%r10
  jne    L351
  cmp    %cl,%r9b
  cmove  %rax,%r10
L351:
  cmp    $0x60,%cl
  jne    L143
  add    $0x1,%r11
  cmp    %r11,%rdx
  seta   %cl
  jmp    L74
L199:
  cmp    %rsi,%rdi
  jbe    L433
  add    $0x2,%rax
  jmp    L386
L159:
  cmp    %rax,%rdi
  ja     L47
  jmp    L433
  xchg   %ax,%ax
L417:
  mov    %rax,%r10
  jmp    L433
```

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;
}
```