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

```asm
<colocaordem>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %ecx,-0x2c(%rbp)
  movl   $0x0,-0xc(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L96
L137:
  addl   $0x1,-0x10(%rbp)
L96:
  mov    -0x10(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jge    L61
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  je     L137
  jmp    L61
L115:
  addl   $0x1,-0x10(%rbp)
  mov    -0x10(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jge    L66
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  je     L115
L66:
  mov    -0x10(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jge    L11
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L115
L11:
  mov    -0x10(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jge    L61
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  jle    L61
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movl   $0x1,(%rax)
  movl   $0x1,-0xc(%rbp)
L114:
  addl   $0x1,-0x10(%rbp)
  mov    -0x10(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jge    L61
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  je     L114
L61:
  mov    -0x10(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jge    L20
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  jge    L66
L20:
  mov    -0xc(%rbp),%eax
  pop    %rbp
  ret
```

assistant: ```c
int colocaordem(char *vetora, char *vetorb, void *remov, int m) {
  int i, removeu = 0;
  int *removidos = (int *)remov;
  if (0) {
    printf("vetor removidos recebido em colocaordem:\n");
    for (i = 0; i < m; i++) {
      printf("%d ", removidos[i]);
    }
    printf("\n");
  }
  i = 0;
  while (i < m && removidos[i] == 1)
    i++;
  if (0) {
    printf("%d<=0== i\n", i);
  }
  while (i < m && vetora[i] >= vetorb[i]) {
    if (0) {
      printf("%d<=1== i\n", i);
      printf("teste executado: %c == %c\n", vetora[i], vetorb[i]);
      printf("resultado: %d\n", vetora[i] == vetorb[i]);
    }
    while (i < m && vetora[i] == vetorb[i])
      do {
        i++;
      } while (i < m && removidos[i] == 1);
    if (0) {
      printf("%d<=2== i\n", i);
    }
    if (i < m && vetora[i] > vetorb[i]) {
      removidos[i] = 1;
      removeu = 1;
      do {
        i++;
      } while (i < m && removidos[i] == 1);
    }
    if (0) {
      printf("%d<=3== i\n", i);
      printf("teste executado: %c >= %c\n", vetora[i], vetorb[i]);
      printf("resultado: %d\n", vetora[i] >= vetorb[i]);
    }
  }
  return removeu;
}
```