user: Translate the below assembly code into C programming language:

```asm
<plot8>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x108,%rsp
  mov    %edi,-0x104(%rbp)
  mov    %esi,-0x108(%rbp)
  mov    %rdx,-0x110(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  mov    -0x108(%rbp),%eax
  movslq %eax,%rdx
  sub    $0x1,%rdx
  mov    %rdx,-0xe8(%rbp)
  movslq %eax,%rdx
  mov    %rdx,%rcx
  mov    $0x0,%ebx
  movl   $0x0,-0xf8(%rbp)
  movl   $0x0,-0xf4(%rbp)
  mov    -0x104(%rbp),%edx
  mov    %edx,-0xf0(%rbp)
  movl   $0x0,-0xe0(%rbp)
  movl   $0x0,-0xdc(%rbp)
  movl   $0x0,-0xd8(%rbp)
  movl   $0x0,-0xd4(%rbp)
  movl   $0x0,-0xd0(%rbp)
  movl   $0x1,-0xcc(%rbp)
  movl   $0x1,-0xc8(%rbp)
  movl   $0x2,-0xc4(%rbp)
  movl   $0x2,-0xc0(%rbp)
  movl   $0x3,-0xbc(%rbp)
  movl   $0x3,-0xb8(%rbp)
  movl   $0x3,-0xb4(%rbp)
  movl   $0x3,-0xb0(%rbp)
  movl   $0x3,-0xac(%rbp)
  movl   $0x4,-0xa8(%rbp)
  movl   $0x4,-0xa4(%rbp)
  movl   $0x5,-0xa0(%rbp)
  movl   $0x5,-0x9c(%rbp)
  movl   $0x6,-0x98(%rbp)
  movl   $0x6,-0x94(%rbp)
  movl   $0x6,-0x90(%rbp)
  movl   $0x6,-0x8c(%rbp)
  movl   $0x6,-0x88(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x1,%edx
  mov    %edx,-0x80(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x2,%edx
  mov    %edx,-0x7c(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x3,%edx
  mov    %edx,-0x78(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x4,%edx
  mov    %edx,-0x74(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x5,%edx
  mov    %edx,-0x70(%rbp)
  mov    -0xf0(%rbp),%edx
  mov    %edx,-0x6c(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x6,%edx
  mov    %edx,-0x68(%rbp)
  mov    -0xf0(%rbp),%edx
  mov    %edx,-0x64(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x6,%edx
  mov    %edx,-0x60(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x1,%edx
  mov    %edx,-0x5c(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x2,%edx
  mov    %edx,-0x58(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x3,%edx
  mov    %edx,-0x54(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x4,%edx
  mov    %edx,-0x50(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x5,%edx
  mov    %edx,-0x4c(%rbp)
  mov    -0xf0(%rbp),%edx
  mov    %edx,-0x48(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x6,%edx
  mov    %edx,-0x44(%rbp)
  mov    -0xf0(%rbp),%edx
  mov    %edx,-0x40(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x6,%edx
  mov    %edx,-0x3c(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x1,%edx
  mov    %edx,-0x38(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x2,%edx
  mov    %edx,-0x34(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x3,%edx
  mov    %edx,-0x30(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x4,%edx
  mov    %edx,-0x2c(%rbp)
  mov    -0xf0(%rbp),%edx
  add    $0x5,%edx
  mov    %edx,-0x28(%rbp)
  movl   $0x17,-0xec(%rbp)
  movl   $0x0,-0xf8(%rbp)
  jmp    L26
L16:
  mov    -0xf8(%rbp),%edx
  movslq %edx,%rdx
  mov    -0xe0(%rbp,%rdx,4),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rdx,%rcx
  mov    -0x110(%rbp),%rdx
  add    %rdx,%rcx
  mov    -0xf8(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x80(%rbp,%rdx,4),%edx
  movslq %edx,%rdx
  movb   $0x38,(%rcx,%rdx,1)
  addl   $0x1,-0xf8(%rbp)
L26:
  mov    -0xf8(%rbp),%edx
  cmp    -0xec(%rbp),%edx
  jl     L16
  nop
  mov    -0x18(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L19
  call   <__stack_chk_fail@plt>
L19:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
void plot8(int posicao, int colunas, char matriz[7][colunas]) {
  int cx = 0;
  int cy = 0;
  int p = posicao;
  int x[] = {0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 6, 6};
  int y[] = {p + 1, p + 2, p + 3, p + 4, p + 5, p + 0, p + 6, p + 0, p + 6, p + 1, p + 2, p + 3, p + 4, p + 5, p + 0, p + 6, p + 0, p + 6, p + 1, p + 2, p + 3, p + 4, p + 5};
  int points = sizeof(x) / sizeof(int);
  for (cx = 0; cx < points; ++cx) {
    matriz[x[cx]][y[cx]] = '8';
  }
}
```