user: Demonstrate the C code that generates the assembly output below:

```asm
<Deplacement>:
  endbr64
  mov    %rdi,%rcx
  mov    %rsi,%rax
  cmp    $0x47,%dl
  je     L87
  cmp    $0x44,%dl
  jne    L375
  movslq 0x4(%rsi),%rdx
  lea    (%rdx,%rdx,4),%rdx
  lea    (%rdx,%rdx,4),%rdx
  lea    (%rdi,%rdx,4),%r9
  mov    (%rsi),%edi
  lea    0x1(%rdi),%edx
  movslq %edx,%rdx
  mov    (%r9,%rdx,4),%esi
  cmp    $0x3,%esi
  mov    %esi,%r10d
  sete   %r8b
  and    $0xfffffffb,%r10d
  mov    %r8d,%r11d
  test   %esi,%esi
  je     L65
  test   %r8b,%r8b
  jne    L65
  xor    %r8d,%r8d
  cmp    $0x2,%r10d
  jne    L91
  add    $0x2,%edi
  movslq %edi,%rdi
  mov    (%r9,%rdi,4),%edx
  test   %edx,%edx
  je     L390
  cmp    $0x3,%edx
  jne    L91
L180:
  movl   $0x6,(%r9,%rdi,4)
  jmp    L115
  nopl   0x0(%rax,%rax,1)
L375:
  cmp    $0x48,%dl
  jne    L56
  movslq 0x4(%rsi),%rdx
  lea    (%rdx,%rdx,4),%rdx
  lea    (%rdx,%rdx,4),%rsi
  shl    $0x2,%rsi
  lea    -0x64(%rdi,%rsi,1),%r8
  movslq (%rax),%rdi
  mov    (%r8,%rdi,4),%edx
  cmp    $0x3,%edx
  mov    %edx,%r10d
  sete   %r9b
  and    $0xfffffffb,%r10d
  mov    %r9d,%r11d
  test   %edx,%edx
  je     L155
  test   %r9b,%r9b
  jne    L155
  xor    %r8d,%r8d
  cmp    $0x2,%r10d
  jne    L91
  lea    -0xc8(%rcx,%rsi,1),%rdx
  mov    (%rdx,%rdi,4),%esi
  test   %esi,%esi
  je     L116
  cmp    $0x3,%esi
  jne    L91
L69:
  movl   $0x6,(%rdx,%rdi,4)
  jmp    L417
  nopl   0x0(%rax)
L87:
  movslq 0x4(%rsi),%rdx
  lea    (%rdx,%rdx,4),%rdx
  lea    (%rdx,%rdx,4),%rdx
  lea    (%rdi,%rdx,4),%r9
  mov    (%rsi),%edi
  lea    -0x1(%rdi),%edx
  movslq %edx,%rdx
  mov    (%r9,%rdx,4),%esi
  cmp    $0x3,%esi
  mov    %esi,%r10d
  sete   %r8b
  and    $0xfffffffb,%r10d
  mov    %r8d,%r11d
  test   %esi,%esi
  je     L206
  test   %r8b,%r8b
  jne    L206
  xor    %r8d,%r8d
  cmp    $0x2,%r10d
  jne    L91
  sub    $0x2,%edi
  movslq %edi,%rdi
  mov    (%r9,%rdi,4),%edx
  test   %edx,%edx
  je     L234
  cmp    $0x3,%edx
  jne    L91
L19:
  movl   $0x6,(%r9,%rdi,4)
  jmp    L204
L56:
  cmp    $0x42,%dl
  jne    L394
  movslq 0x4(%rsi),%rdx
  lea    0x5(%rdx,%rdx,4),%rdx
  lea    (%rdx,%rdx,4),%rsi
  shl    $0x2,%rsi
  lea    (%rdi,%rsi,1),%r8
  movslq (%rax),%rdi
  mov    (%r8,%rdi,4),%edx
  cmp    $0x3,%edx
  mov    %edx,%r10d
  sete   %r9b
  and    $0xfffffffb,%r10d
  mov    %r9d,%r11d
  test   %edx,%edx
  je     L350
  test   %r9b,%r9b
  jne    L350
  xor    %r8d,%r8d
  cmp    $0x2,%r10d
  jne    L91
  lea    0x64(%rcx,%rsi,1),%rdx
  mov    (%rdx,%rdi,4),%esi
  test   %esi,%esi
  je     L305
  cmp    $0x3,%esi
  jne    L91
L323:
  movl   $0x6,(%rdx,%rdi,4)
  jmp    L339
L206:
  cmp    $0x2,%r10d
  je     L340
L9:
  cmp    $0x6,%esi
  sete   %sil
  or     %r11d,%esi
  movzbl %sil,%esi
  add    $0x4,%esi
  mov    %esi,(%r9,%rdx,4)
L266:
  movslq 0x4(%rax),%rdx
  movslq (%rax),%rax
  lea    (%rdx,%rdx,4),%rdx
  lea    (%rdx,%rdx,4),%rdx
  lea    (%rcx,%rdx,4),%rdx
  cmpl   $0x5,(%rdx,%rax,4)
  je     L198
  movl   $0x0,(%rdx,%rax,4)
  mov    $0x1,%r8d
L91:
  mov    %r8d,%eax
  ret
  nopl   (%rax)
L350:
  cmp    $0x2,%r10d
  je     L239
L228:
  cmp    $0x6,%edx
  sete   %dl
  or     %r11d,%edx
  movzbl %dl,%edx
  add    $0x4,%edx
  mov    %edx,(%r8,%rdi,4)
  jmp    L266
  nop
L155:
  cmp    $0x2,%r10d
  jne    L228
  lea    -0xc8(%rcx,%rsi,1),%rdx
  mov    (%rdx,%rdi,4),%esi
L116:
  cmp    $0x3,%esi
  je     L69
  movl   $0x2,(%rdx,%rdi,4)
L417:
  movslq 0x4(%rax),%rdx
  movslq (%rax),%rdi
  lea    (%rdx,%rdx,4),%rdx
  lea    (%rdx,%rdx,4),%rdx
  lea    -0x64(%rcx,%rdx,4),%r8
  mov    (%r8,%rdi,4),%edx
  cmp    $0x3,%edx
  sete   %r11b
  jmp    L228
  nopw   0x0(%rax,%rax,1)
L65:
  cmp    $0x2,%r10d
  jne    L9
  add    $0x2,%edi
  movslq %edi,%rdi
  mov    (%r9,%rdi,4),%edx
L390:
  cmp    $0x3,%edx
  je     L180
  movl   $0x2,(%r9,%rdi,4)
L115:
  movslq 0x4(%rax),%rdx
  mov    (%rax),%edi
  lea    (%rdx,%rdx,4),%rdx
  lea    (%rdx,%rdx,4),%rdx
  lea    (%rcx,%rdx,4),%r9
  lea    0x1(%rdi),%edx
  movslq %edx,%rdx
  mov    (%r9,%rdx,4),%esi
  cmp    $0x3,%esi
  sete   %r11b
  jmp    L9
  nopl   (%rax)
L198:
  mov    $0x1,%r8d
  movl   $0x3,(%rdx,%rax,4)
  mov    %r8d,%eax
  ret
  nopl   0x0(%rax)
L340:
  sub    $0x2,%edi
  movslq %edi,%rdi
  mov    (%r9,%rdi,4),%edx
L234:
  cmp    $0x3,%edx
  je     L19
  movl   $0x2,(%r9,%rdi,4)
L204:
  movslq 0x4(%rax),%rdx
  mov    (%rax),%edi
  lea    (%rdx,%rdx,4),%rdx
  lea    (%rdx,%rdx,4),%rdx
  lea    (%rcx,%rdx,4),%r9
  lea    -0x1(%rdi),%edx
  movslq %edx,%rdx
  mov    (%r9,%rdx,4),%esi
  cmp    $0x3,%esi
  sete   %r11b
  jmp    L9
  nopl   0x0(%rax,%rax,1)
L239:
  lea    0x64(%rcx,%rsi,1),%rdx
  mov    (%rdx,%rdi,4),%esi
L305:
  cmp    $0x3,%esi
  je     L323
  movl   $0x2,(%rdx,%rdi,4)
L339:
  movslq 0x4(%rax),%rdx
  movslq (%rax),%rdi
  lea    0x5(%rdx,%rdx,4),%rdx
  lea    (%rdx,%rdx,4),%rdx
  lea    (%rcx,%rdx,4),%r8
  mov    (%r8,%rdi,4),%edx
  cmp    $0x3,%edx
  sete   %r11b
  jmp    L228
L394:
  xor    %r8d,%r8d
  jmp    L91
```

assistant: ```c
int Deplacement(int (*m)[25], int *pos, char direction) {
  int retour = 0;
  if (direction == 'G') {
    if (((m[pos[1]][pos[0] - 1] == 0) || (m[pos[1]][pos[0] - 1] == 3)) || (((m[pos[1]][pos[0] - 1] == 2) || (m[pos[1]][pos[0] - 1] == 6)) && ((m[pos[1]][pos[0] - 2] == 0) || (m[pos[1]][pos[0] - 2] == 3)))) {
      if ((m[pos[1]][pos[0] - 1] == 2) || (m[pos[1]][pos[0] - 1] == 6)) {
        if (m[pos[1]][pos[0] - 2] == 3)
          m[pos[1]][pos[0] - 2] = 6;
        else
          m[pos[1]][pos[0] - 2] = 2;
      }
      if ((m[pos[1]][pos[0] - 1] == 3) || (m[pos[1]][pos[0] - 1] == 6))
        m[pos[1]][pos[0] - 1] = 5;
      else
        m[pos[1]][pos[0] - 1] = 4;
      if (m[pos[1]][pos[0]] == 5)
        m[pos[1]][pos[0]] = 3;
      else
        m[pos[1]][pos[0]] = 0;
      retour = 1;
    }
  }
  if (direction == 'D') {
    if (((m[pos[1]][pos[0] + 1] == 0) || (m[pos[1]][pos[0] + 1] == 3)) || (((m[pos[1]][pos[0] + 1] == 2) || (m[pos[1]][pos[0] + 1] == 6)) && ((m[pos[1]][pos[0] + 2] == 0) || (m[pos[1]][pos[0] + 2] == 3)))) {
      if ((m[pos[1]][pos[0] + 1] == 2) || (m[pos[1]][pos[0] + 1] == 6)) {
        if (m[pos[1]][pos[0] + 2] == 3)
          m[pos[1]][pos[0] + 2] = 6;
        else
          m[pos[1]][pos[0] + 2] = 2;
      }
      if ((m[pos[1]][pos[0] + 1] == 3) || (m[pos[1]][pos[0] + 1] == 6))
        m[pos[1]][pos[0] + 1] = 5;
      else
        m[pos[1]][pos[0] + 1] = 4;
      if (m[pos[1]][pos[0]] == 5)
        m[pos[1]][pos[0]] = 3;
      else
        m[pos[1]][pos[0]] = 0;
      retour = 1;
    }
  }
  if (direction == 'H') {
    if (((m[pos[1] - 1][pos[0]] == 0) || (m[pos[1] - 1][pos[0]] == 3)) || (((m[pos[1] - 1][pos[0]] == 2) || (m[pos[1] - 1][pos[0]] == 6)) && ((m[pos[1] - 2][pos[0]] == 0) || (m[pos[1] - 2][pos[0]] == 3)))) {
      if ((m[pos[1] - 1][pos[0]] == 2) || (m[pos[1] - 1][pos[0]] == 6)) {
        if (m[pos[1] - 2][pos[0]] == 3)
          m[pos[1] - 2][pos[0]] = 6;
        else
          m[pos[1] - 2][pos[0]] = 2;
      }
      if ((m[pos[1] - 1][pos[0]] == 3) || (m[pos[1] - 1][pos[0]] == 6))
        m[pos[1] - 1][pos[0]] = 5;
      else
        m[pos[1] - 1][pos[0]] = 4;
      if (m[pos[1]][pos[0]] == 5)
        m[pos[1]][pos[0]] = 3;
      else
        m[pos[1]][pos[0]] = 0;
      retour = 1;
    }
  }
  if (direction == 'B') {
    if (((m[pos[1] + 1][pos[0]] == 0) || (m[pos[1] + 1][pos[0]] == 3)) || (((m[pos[1] + 1][pos[0]] == 2) || (m[pos[1] + 1][pos[0]] == 6)) && ((m[pos[1] + 2][pos[0]] == 0) || (m[pos[1] + 2][pos[0]] == 3)))) {
      if ((m[pos[1] + 1][pos[0]] == 2) || (m[pos[1] + 1][pos[0]] == 6)) {
        if (m[pos[1] + 2][pos[0]] == 3)
          m[pos[1] + 2][pos[0]] = 6;
        else
          m[pos[1] + 2][pos[0]] = 2;
      }
      if ((m[pos[1] + 1][pos[0]] == 3) || (m[pos[1] + 1][pos[0]] == 6))
        m[pos[1] + 1][pos[0]] = 5;
      else
        m[pos[1] + 1][pos[0]] = 4;
      if (m[pos[1]][pos[0]] == 5)
        m[pos[1]][pos[0]] = 3;
      else
        m[pos[1]][pos[0]] = 0;
      retour = 1;
    }
  }
  return retour;
}
```