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

```asm
<Decode_Trame_Brute>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  movzbl (%rdi),%eax
  mov    %rsi,(%rsp)
  mov    0xa8(%rsp),%rbp
  mov    %rdx,0x8(%rsp)
  mov    0xb0(%rsp),%rbx
  mov    %rcx,0x18(%rsp)
  mov    %r8,0x10(%rsp)
  mov    %r9,0x20(%rsp)
  test   %al,%al
  je     L89
  mov    %rdi,%r13
  xor    %r14d,%r14d
  xor    %r15d,%r15d
  jmp    L231
L334:
  cmp    $0x41,%al
  je     L305
  cmp    $0x4f,%al
  je     L218
  cmp    $0x42,%al
  je     L196
  cmp    $0x49,%al
  jne    L220
  movzbl 0x1(%r13,%r15,1),%eax
  cmp    $0x4d,%al
  je     L243
  cmp    $0x53,%al
  je     L82
  cmp    $0x49,%al
  je     L10
  xchg   %ax,%ax
L315:
  add    $0x1,%r14d
  movslq %r14d,%r15
  lea    0x0(%r13,%r15,1),%r12
L260:
  movzbl (%r12),%eax
  test   %al,%al
  je     L89
L231:
  cmp    $0x4d,%al
  jne    L334
  cmpb   $0x4f,0x1(%r13,%r15,1)
  jne    L315
  mov    (%rsp),%rcx
  mov    %r14d,%esi
  mov    $0x9,%edx
  mov    %r13,%rdi
  call   <Extraire@plt>
  mov    %r14d,%esi
  mov    %r13,%rdi
  movslq %eax,%r15
  lea    0x0(%r13,%r15,1),%r12
  mov    %r15,%rdx
  mov    %r15d,0x2c(%rsp)
  movzbl (%r12),%eax
  mov    %al,0x0(%rbp)
  call   <Statu_Checksum@plt>
  mov    0x2c(%rsp),%r14d
  mov    %ax,(%rbx)
  movzbl (%r12),%eax
  test   %al,%al
  jne    L231
L89:
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L305:
  cmpb   $0x44,0x1(%r13,%r15,1)
  jne    L315
  mov    0x8(%rsp),%rcx
  mov    %r14d,%esi
  mov    $0x5,%edx
  mov    %r13,%rdi
  call   <Extraire@plt>
  mov    %r14d,%esi
  mov    %r13,%rdi
  movslq %eax,%r15
  lea    0x0(%r13,%r15,1),%r12
  mov    %r15,%rdx
  mov    %r15d,0x2c(%rsp)
  movzbl (%r12),%eax
  mov    %al,0x1(%rbp)
  call   <Statu_Checksum@plt>
  mov    0x2c(%rsp),%r14d
  mov    %ax,0x2(%rbx)
  jmp    L260
  nopw   0x0(%rax,%rax,1)
L218:
  cmpb   $0x50,0x1(%r13,%r15,1)
  jne    L315
  mov    0x18(%rsp),%rcx
  mov    %r14d,%esi
  mov    $0x8,%edx
  mov    %r13,%rdi
  call   <Extraire@plt>
  mov    %r14d,%esi
  mov    %r13,%rdi
  movslq %eax,%r15
  lea    0x0(%r13,%r15,1),%r12
  mov    %r15,%rdx
  mov    %r15d,0x2c(%rsp)
  movzbl (%r12),%eax
  mov    %al,0x2(%rbp)
  call   <Statu_Checksum@plt>
  mov    0x2c(%rsp),%r14d
  mov    %ax,0x4(%rbx)
  jmp    L260
  nopw   0x0(%rax,%rax,1)
L220:
  cmp    $0x48,%al
  jne    L276
  movzbl 0x3(%r13,%r15,1),%eax
  cmp    $0x48,%al
  je     L173
  cmp    $0x50,%al
  je     L69
  cmp    $0x43,%al
  jne    L315
  mov    0x70(%rsp),%rcx
  mov    %r14d,%esi
  mov    $0x5,%edx
  mov    %r13,%rdi
  call   <Extraire@plt>
  mov    %r14d,%esi
  mov    %r13,%rdi
  movslq %eax,%r15
  lea    0x0(%r13,%r15,1),%r12
  mov    %r15,%rdx
  mov    %r15d,0x2c(%rsp)
  movzbl (%r12),%eax
  mov    %al,0x5(%rbp)
  call   <Statu_Checksum@plt>
  mov    0x2c(%rsp),%r14d
  mov    %ax,0xa(%rbx)
  jmp    L260
  nopl   0x0(%rax)
L196:
  cmpb   $0x41,0x1(%r13,%r15,1)
  jne    L315
  mov    0x20(%rsp),%rcx
  mov    %r14d,%esi
  mov    $0x5,%edx
  mov    %r13,%rdi
  call   <Extraire@plt>
  mov    %r14d,%esi
  mov    %r13,%rdi
  movslq %eax,%r15
  lea    0x0(%r13,%r15,1),%r12
  mov    %r15,%rdx
  mov    %r15d,0x2c(%rsp)
  movzbl (%r12),%eax
  mov    %al,0x4(%rbp)
  call   <Statu_Checksum@plt>
  mov    0x2c(%rsp),%r14d
  mov    %ax,0x8(%rbx)
  jmp    L260
  nopw   0x0(%rax,%rax,1)
L276:
  cmp    $0x50,%al
  jne    L315
  movzbl 0x1(%r13,%r15,1),%eax
  cmp    $0x41,%al
  je     L116
  cmp    $0x54,%al
  jne    L315
  mov    0x80(%rsp),%rcx
  mov    %r14d,%esi
  mov    $0x5,%edx
  mov    %r13,%rdi
  call   <Extraire@plt>
  mov    %r14d,%esi
  mov    %r13,%rdi
  movslq %eax,%r15
  lea    0x0(%r13,%r15,1),%r12
  mov    %r15,%rdx
  mov    %r15d,0x2c(%rsp)
  movzbl (%r12),%eax
  mov    %al,0x7(%rbp)
  call   <Statu_Checksum@plt>
  mov    0x2c(%rsp),%r14d
  mov    %ax,0xe(%rbx)
  jmp    L260
  nop
L10:
  mov    0x88(%rsp),%rcx
  mov    %r14d,%esi
  mov    $0x6,%edx
  mov    %r13,%rdi
  call   <Extraire@plt>
  mov    %r14d,%esi
  mov    %r13,%rdi
  movslq %eax,%r15
  lea    0x0(%r13,%r15,1),%r12
  mov    %r15,%rdx
  mov    %r15d,0x2c(%rsp)
  movzbl (%r12),%eax
  mov    %al,0x8(%rbp)
  call   <Statu_Checksum@plt>
  mov    0x2c(%rsp),%r14d
  mov    %ax,0x10(%rbx)
  jmp    L260
  nopl   0x0(%rax)
L82:
  mov    0x10(%rsp),%rcx
  mov    %r14d,%esi
  mov    $0x7,%edx
  mov    %r13,%rdi
  call   <Extraire@plt>
  mov    %r14d,%esi
  mov    %r13,%rdi
  movslq %eax,%r15
  lea    0x0(%r13,%r15,1),%r12
  mov    %r15,%rdx
  mov    %r15d,0x2c(%rsp)
  movzbl (%r12),%eax
  mov    %al,0x3(%rbp)
  call   <Statu_Checksum@plt>
  mov    0x2c(%rsp),%r14d
  mov    %ax,0x6(%rbx)
  jmp    L260
  cs nopw 0x0(%rax,%rax,1)
L243:
  mov    0x90(%rsp),%rcx
  mov    %r14d,%esi
  mov    $0x5,%edx
  mov    %r13,%rdi
  call   <Extraire@plt>
  mov    %r14d,%esi
  mov    %r13,%rdi
  movslq %eax,%r15
  lea    0x0(%r13,%r15,1),%r12
  mov    %r15,%rdx
  mov    %r15d,0x2c(%rsp)
  movzbl (%r12),%eax
  mov    %al,0x9(%rbp)
  call   <Statu_Checksum@plt>
  mov    0x2c(%rsp),%r14d
  mov    %ax,0x12(%rbx)
  jmp    L260
  nopl   0x0(%rax)
L69:
  mov    0x78(%rsp),%rcx
  mov    %r14d,%esi
  mov    $0x5,%edx
  mov    %r13,%rdi
  call   <Extraire@plt>
  mov    %r14d,%esi
  mov    %r13,%rdi
  movslq %eax,%r15
  lea    0x0(%r13,%r15,1),%r12
  mov    %r15,%rdx
  mov    %r15d,0x2c(%rsp)
  movzbl (%r12),%eax
  mov    %al,0x6(%rbp)
  call   <Statu_Checksum@plt>
  mov    0x2c(%rsp),%r14d
  mov    %ax,0xc(%rbx)
  jmp    L260
  cs nopw 0x0(%rax,%rax,1)
L173:
  mov    0xa0(%rsp),%rcx
  mov    %r14d,%esi
  mov    $0x6,%edx
  mov    %r13,%rdi
  call   <Extraire@plt>
  mov    %r14d,%esi
  mov    %r13,%rdi
  movslq %eax,%r15
  lea    0x0(%r13,%r15,1),%r12
  mov    %r15,%rdx
  mov    %r15d,0x2c(%rsp)
  movzbl (%r12),%eax
  mov    %al,0xb(%rbp)
  call   <Statu_Checksum@plt>
  mov    0x2c(%rsp),%r14d
  mov    %ax,0x16(%rbx)
  jmp    L260
  nopl   0x0(%rax)
L116:
  mov    0x98(%rsp),%rcx
  mov    %r14d,%esi
  mov    $0x5,%edx
  mov    %r13,%rdi
  call   <Extraire@plt>
  mov    %r14d,%esi
  mov    %r13,%rdi
  movslq %eax,%r15
  lea    0x0(%r13,%r15,1),%r12
  mov    %r15,%rdx
  mov    %r15d,0x2c(%rsp)
  movzbl (%r12),%eax
  mov    %al,0xa(%rbp)
  call   <Statu_Checksum@plt>
  mov    0x2c(%rsp),%r14d
  mov    %ax,0x14(%rbx)
  jmp    L260
```

assistant: ```c
void Decode_Trame_Brute(char *tab_recu_brut, char *Motdetat, char *Adeco, char *Optarif, char *Isousc, char *Base, char *Hchc, char *Hchp, char *Ptec, char *Iinst, char *Imax, char *Papp, char *Hhphc, char *Checksum, short *Statu_chcksm) {
  int indice = 0;
  int indice_deb = 0;
  while (tab_recu_brut[indice] != '\0') {
    indice_deb = indice;
    if (tab_recu_brut[indice] == 'M' && tab_recu_brut[indice + 1] == 'O') {
      indice = Extraire(tab_recu_brut, indice, 9, Motdetat);
      Checksum[0] = tab_recu_brut[indice];
      Statu_chcksm[0] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
    } else if (tab_recu_brut[indice] == 'A' && tab_recu_brut[indice + 1] == 'D') {
      indice = Extraire(tab_recu_brut, indice, 5, Adeco);
      Checksum[1] = tab_recu_brut[indice];
      Statu_chcksm[1] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
    } else if (tab_recu_brut[indice] == 'O' && tab_recu_brut[indice + 1] == 'P') {
      indice = Extraire(tab_recu_brut, indice, 8, Optarif);
      Checksum[2] = tab_recu_brut[indice];
      Statu_chcksm[2] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
    } else if (tab_recu_brut[indice] == 'B' && tab_recu_brut[indice + 1] == 'A') {
      indice = Extraire(tab_recu_brut, indice, 5, Base);
      Checksum[4] = tab_recu_brut[indice];
      Statu_chcksm[4] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
    } else if (tab_recu_brut[indice] == 'I') {
      switch (tab_recu_brut[indice + 1]) {
      case 'S':
        indice = Extraire(tab_recu_brut, indice, 7, Isousc);
        Checksum[3] = tab_recu_brut[indice];
        Statu_chcksm[3] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      case 'I':
        indice = Extraire(tab_recu_brut, indice, 6, Iinst);
        Checksum[8] = tab_recu_brut[indice];
        Statu_chcksm[8] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      case 'M':
        indice = Extraire(tab_recu_brut, indice, 5, Imax);
        Checksum[9] = tab_recu_brut[indice];
        Statu_chcksm[9] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      default:
        indice++;
      }
    } else if (tab_recu_brut[indice] == 'H') {
      switch (tab_recu_brut[indice + 3]) {
      case 'C':
        indice = Extraire(tab_recu_brut, indice, 5, Hchc);
        Checksum[5] = tab_recu_brut[indice];
        Statu_chcksm[5] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      case 'P':
        indice = Extraire(tab_recu_brut, indice, 5, Hchp);
        Checksum[6] = tab_recu_brut[indice];
        Statu_chcksm[6] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      case 'H':
        indice = Extraire(tab_recu_brut, indice, 6, Hhphc);
        Checksum[11] = tab_recu_brut[indice];
        Statu_chcksm[11] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      default:
        indice++;
      }
    } else if (tab_recu_brut[indice] == 'P') {
      switch (tab_recu_brut[indice + 1]) {
      case 'T':
        indice = Extraire(tab_recu_brut, indice, 5, Ptec);
        Checksum[7] = tab_recu_brut[indice];
        Statu_chcksm[7] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      case 'A':
        indice = Extraire(tab_recu_brut, indice, 5, Papp);
        Checksum[10] = tab_recu_brut[indice];
        Statu_chcksm[10] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      default:
        indice++;
      }
    } else {
      indice++;
    }
  }
}
```