user: Converte this assembly snippet into its equivalent C code:

```asm
<desas2>:
  endbr64
  push   %rbp
  lea    D380(%rip),%rdx
  lea    D345(%rip),%rcx
  mov    %rsi,%rbp
  push   %rbx
  movq   %rdx,%xmm0
  lea    D162(%rip),%rdx
  lea    D120(%rip),%rbx
  lea    D232(%rip),%rsi
  sub    $0x158,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x148(%rsp)
  lea    D9(%rip),%rax
  movq   %rax,%xmm1
  lea    D354(%rip),%rax
  punpcklqdq %xmm1,%xmm0
  movq   %rax,%xmm2
  lea    D69(%rip),%rax
  movaps %xmm0,0x40(%rsp)
  movq   %rcx,%xmm0
  movq   %rax,%xmm3
  lea    D365(%rip),%rcx
  punpcklqdq %xmm2,%xmm0
  lea    D309(%rip),%rax
  movaps %xmm0,0x50(%rsp)
  movq   %rdx,%xmm0
  movq   %rax,%xmm4
  lea    D234(%rip),%rdx
  punpcklqdq %xmm3,%xmm0
  lea    D247(%rip),%rax
  movaps %xmm0,0x60(%rsp)
  movq   %rcx,%xmm0
  movq   %rax,%xmm5
  lea    D59(%rip),%rcx
  punpcklqdq %xmm4,%xmm0
  lea    D196(%rip),%rax
  movaps %xmm0,0x70(%rsp)
  movq   %rdx,%xmm0
  movq   %rax,%xmm6
  lea    D325(%rip),%rdx
  punpcklqdq %xmm5,%xmm0
  lea    D348(%rip),%rax
  movaps %xmm0,0x80(%rsp)
  movq   %rcx,%xmm0
  movq   %rax,%xmm7
  lea    D253(%rip),%rcx
  punpcklqdq %xmm6,%xmm0
  lea    D200(%rip),%rax
  movaps %xmm0,0x90(%rsp)
  movq   %rdx,%xmm0
  movq   %rax,%xmm1
  lea    D338(%rip),%rax
  punpcklqdq %xmm7,%xmm0
  movq   %rax,%xmm2
  lea    D129(%rip),%rdx
  movaps %xmm0,0xa0(%rsp)
  movq   %rcx,%xmm0
  lea    D356(%rip),%rax
  lea    D96(%rip),%rcx
  punpcklqdq %xmm1,%xmm0
  movq   %rax,%xmm3
  lea    D193(%rip),%rax
  movaps %xmm0,0xb0(%rsp)
  movq   %rbx,%xmm0
  movq   %rax,%xmm4
  lea    D82(%rip),%rax
  punpcklqdq %xmm2,%xmm0
  movq   %rax,%xmm5
  lea    D13(%rip),%rbx
  movaps %xmm0,0xc0(%rsp)
  movq   %rdx,%xmm0
  lea    D188(%rip),%rax
  lea    D122(%rip),%rdx
  punpcklqdq %xmm3,%xmm0
  movq   %rax,%xmm6
  lea    D202(%rip),%rax
  movaps %xmm0,0xd0(%rsp)
  movq   %rcx,%xmm0
  movq   %rax,%xmm7
  lea    D308(%rip),%rcx
  punpcklqdq %xmm4,%xmm0
  lea    D15(%rip),%rax
  movaps %xmm0,0xe0(%rsp)
  movq   %rsi,%xmm0
  movq   %rax,%xmm1
  lea    D35(%rip),%rsi
  punpcklqdq %xmm5,%xmm0
  lea    D277(%rip),%rax
  movaps %xmm0,0xf0(%rsp)
  movq   %rbx,%xmm0
  movq   %rax,%xmm2
  lea    D220(%rip),%rbx
  punpcklqdq %xmm6,%xmm0
  lea    D184(%rip),%rax
  movaps %xmm0,0x100(%rsp)
  movq   %rdx,%xmm0
  movq   %rax,%xmm3
  lea    D222(%rip),%rax
  punpcklqdq %xmm7,%xmm0
  movq   %rax,%xmm4
  lea    D204(%rip),%rdx
  movaps %xmm0,0x110(%rsp)
  movq   %rcx,%xmm0
  lea    D54(%rip),%rax
  lea    D155(%rip),%rcx
  punpcklqdq %xmm1,%xmm0
  movq   %rax,%xmm5
  lea    D161(%rip),%rax
  movaps %xmm0,0x120(%rsp)
  movq   %rsi,%xmm0
  movq   %rax,%xmm6
  lea    D178(%rip),%rsi
  punpcklqdq %xmm2,%xmm0
  movaps %xmm0,0x130(%rsp)
  movq   %rbx,%xmm0
  mov    (%rdi),%ebx
  mov    %rbp,%rdi
  punpcklqdq %xmm3,%xmm0
  movaps %xmm0,(%rsp)
  movq   %rdx,%xmm0
  mov    %ebx,%eax
  sar    $0x2,%ebx
  punpcklqdq %xmm4,%xmm0
  sar    $0x5,%eax
  and    $0x7,%ebx
  movaps %xmm0,0x10(%rsp)
  movq   %rcx,%xmm0
  and    $0x1f,%eax
  punpcklqdq %xmm5,%xmm0
  movaps %xmm0,0x20(%rsp)
  movq   %rsi,%xmm0
  mov    0x40(%rsp,%rax,8),%rsi
  punpcklqdq %xmm6,%xmm0
  movaps %xmm0,0x30(%rsp)
  call   <strcpy@plt>
  mov    (%rsp,%rbx,8),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  mov    0x148(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L6
  add    $0x158,%rsp
  mov    $0x1,%eax
  pop    %rbx
  pop    %rbp
  ret
L6:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_tag: D380
type_guessed: string
name: disassemble_data
arguments: data_tag: D345
type_guessed: string
name: disassemble_data
arguments: data_tag: D162
type_guessed: string
name: disassemble_data
arguments: data_tag: D120
type_guessed: string
name: disassemble_data
arguments: data_tag: D232
type_guessed: string
name: disassemble_data
arguments: data_tag: D9
type_guessed: string
name: disassemble_data
arguments: data_tag: D354
type_guessed: string
name: disassemble_data
arguments: data_tag: D69
type_guessed: string
name: disassemble_data
arguments: data_tag: D365
type_guessed: string
name: disassemble_data
arguments: data_tag: D309
type_guessed: string
name: disassemble_data
arguments: data_tag: D234
type_guessed: string
name: disassemble_data
arguments: data_tag: D247
type_guessed: string
name: disassemble_data
arguments: data_tag: D59
type_guessed: string
name: disassemble_data
arguments: data_tag: D196
type_guessed: string
name: disassemble_data
arguments: data_tag: D325
type_guessed: string
name: disassemble_data
arguments: data_tag: D348
type_guessed: string
name: disassemble_data
arguments: data_tag: D253
type_guessed: string
name: disassemble_data
arguments: data_tag: D200
type_guessed: string
name: disassemble_data
arguments: data_tag: D338
type_guessed: string
name: disassemble_data
arguments: data_tag: D129
type_guessed: string
name: disassemble_data
arguments: data_tag: D356
type_guessed: string
name: disassemble_data
arguments: data_tag: D96
type_guessed: string
name: disassemble_data
arguments: data_tag: D193
type_guessed: string
name: disassemble_data
arguments: data_tag: D82
type_guessed: string
name: disassemble_data
arguments: data_tag: D13
type_guessed: string
name: disassemble_data
arguments: data_tag: D188
type_guessed: string
name: disassemble_data
arguments: data_tag: D122
type_guessed: string
name: disassemble_data
arguments: data_tag: D202
type_guessed: string
name: disassemble_data
arguments: data_tag: D308
type_guessed: string
name: disassemble_data
arguments: data_tag: D15
type_guessed: string
name: disassemble_data
arguments: data_tag: D35
type_guessed: string
name: disassemble_data
arguments: data_tag: D277
type_guessed: string
name: disassemble_data
arguments: data_tag: D220
type_guessed: string
name: disassemble_data
arguments: data_tag: D184
type_guessed: string
name: disassemble_data
arguments: data_tag: D222
type_guessed: string
name: disassemble_data
arguments: data_tag: D204
type_guessed: string
name: disassemble_data
arguments: data_tag: D54
type_guessed: string
name: disassemble_data
arguments: data_tag: D155
type_guessed: string
name: disassemble_data
arguments: data_tag: D161
type_guessed: string
name: disassemble_data
arguments: data_tag: D178
type_guessed: string

tool: D380: A=0   

tool: D345: C=0   

tool: D162: B=A   

tool: D120: C=A+C 

tool: D232: ?B#0  

tool: D9: B=0   

tool: D354: ABEX  

tool: D69: ACEX  

tool: D365: C=B   

tool: D309: BCEX  

tool: D234: A=C   

tool: D247: A=A+B 

tool: D59: A=A+C 

tool: D196: A=A+1 

tool: D325: A=A-B 

tool: D348: A=A-1 

tool: D253: A=A-C 

tool: D200: C=C+C 

tool: D338: C=C+1 

tool: D129: C=A-C 

tool: D356: C=C-1 

tool: D96: C=-C  

tool: D193: C=-C-1

tool: D82: ?C#0  

tool: D13: ?A<C  

tool: D188: ?A<B  

tool: D122: ?A#0  

tool: D202: ?A#C  

tool: D308: ASR   

tool: D15: BSR   

tool: D35: CSR   

tool: D277: ASL   

tool: D220:  PT

tool: D184:  X 

tool: D222:  W 

tool: D204:  WPT

tool: D54:  XS

tool: D155:  PQ

tool: D161:  S 

tool: D178:  M 

assistant: ```c
int desas2(int *codes, char *ligne) {
  int opc, te;
  char *mnemo[] = {"A=0   ", "B=0   ", "C=0   ", "ABEX  ", "B=A   ", "ACEX  ", "C=B   ", "BCEX  ", "A=C   ", "A=A+B ", "A=A+C ", "A=A+1 ", "A=A-B ", "A=A-1 ", "A=A-C ", "C=C+C ", "C=A+C ", "C=C+1 ", "C=A-C ", "C=C-1 ", "C=-C  ", "C=-C-1", "?B#0  ", "?C#0  ", "?A<C  ", "?A<B  ", "?A#0  ", "?A#C  ", "ASR   ", "BSR   ", "CSR   ", "ASL   "};
  char *champ[] = {" PT", " X ", " WPT", " W ", " PQ", " XS", " M ", " S "};
  opc = (codes[0] >> 5) & 0x1f;
  te = (codes[0] >> 2) & 0x07;
  strcpy(ligne, mnemo[opc]);
  strcat(ligne, champ[te]);
  return (1);
}
```