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

```asm
<dumpio_ednchg>:
  endbr64
  push   %r15
  mov    %edx,%r15d
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %esi,%ebx
  xor    %esi,%esi
  sub    $0x38,%rsp
  mov    %edx,0xc(%rsp)
  lea    0x10(%rsp),%r13
  mov    $0x10,%edx
  mov    %r13,%rdi
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  call   <memset@plt>
  test   %r15d,%r15d
  jle    L119
  lea    -0x1(%rbx),%r14d
  lea    -0x2(%rbx),%r15d
  xor    %r12d,%r12d
  movslq %r14d,%r14
  movslq %r15d,%r15
  nopl   0x0(%rax)
L100:
  mov    %ebx,%edx
  mov    %rbp,%rsi
  mov    %r13,%rdi
  call   <memcpy@plt>
  test   %ebx,%ebx
  jle    L131
  movzbl 0x10(%rsp,%r14,1),%eax
  mov    %al,0x0(%rbp)
  cmp    $0x1,%ebx
  je     L176
  movzbl 0x10(%rsp,%r15,1),%eax
  mov    %al,0x1(%rbp)
  cmp    $0x2,%ebx
  je     L176
  lea    -0x3(%rbx),%eax
  cltq
  movzbl 0x10(%rsp,%rax,1),%eax
  mov    %al,0x2(%rbp)
  cmp    $0x3,%ebx
  je     L176
  lea    -0x4(%rbx),%eax
  cltq
  movzbl 0x10(%rsp,%rax,1),%eax
  mov    %al,0x3(%rbp)
  cmp    $0x4,%ebx
  je     L176
  lea    -0x5(%rbx),%eax
  cltq
  movzbl 0x10(%rsp,%rax,1),%eax
  mov    %al,0x4(%rbp)
  cmp    $0x5,%ebx
  je     L176
  lea    -0x6(%rbx),%eax
  cltq
  movzbl 0x10(%rsp,%rax,1),%eax
  mov    %al,0x5(%rbp)
  cmp    $0x6,%ebx
  je     L176
  lea    -0x7(%rbx),%eax
  cltq
  movzbl 0x10(%rsp,%rax,1),%eax
  mov    %al,0x6(%rbp)
  cmp    $0x7,%ebx
  je     L176
  lea    -0x8(%rbx),%eax
  cltq
  movzbl 0x10(%rsp,%rax,1),%eax
  mov    %al,0x7(%rbp)
  cmp    $0x8,%ebx
  je     L176
  lea    -0x9(%rbx),%eax
  cltq
  movzbl 0x10(%rsp,%rax,1),%eax
  mov    %al,0x8(%rbp)
  cmp    $0x9,%ebx
  je     L176
  lea    -0xa(%rbx),%eax
  cltq
  movzbl 0x10(%rsp,%rax,1),%eax
  mov    %al,0x9(%rbp)
  cmp    $0xa,%ebx
  je     L176
  lea    -0xb(%rbx),%eax
  cltq
  movzbl 0x10(%rsp,%rax,1),%eax
  mov    %al,0xa(%rbp)
  cmp    $0xb,%ebx
  je     L176
  lea    -0xc(%rbx),%eax
  cltq
  movzbl 0x10(%rsp,%rax,1),%eax
  mov    %al,0xb(%rbp)
  cmp    $0xc,%ebx
  je     L176
  lea    -0xd(%rbx),%eax
  cltq
  movzbl 0x10(%rsp,%rax,1),%eax
  mov    %al,0xc(%rbp)
  cmp    $0xd,%ebx
  je     L176
  lea    -0xe(%rbx),%eax
  cltq
  movzbl 0x10(%rsp,%rax,1),%eax
  mov    %al,0xd(%rbp)
  cmp    $0xe,%ebx
  je     L176
  lea    -0xf(%rbx),%eax
  cltq
  movzbl 0x10(%rsp,%rax,1),%eax
  mov    %al,0xe(%rbp)
  cmp    $0xf,%ebx
  je     L176
  lea    -0x10(%rbx),%eax
  cltq
  movzbl 0x10(%rsp,%rax,1),%eax
  mov    %al,0xf(%rbp)
  nopl   0x0(%rax)
L176:
  movslq %ebx,%rax
  add    %rax,%rbp
L131:
  add    $0x1,%r12d
  cmp    %r12d,0xc(%rsp)
  jne    L100
L119:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L26
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L26:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void dumpio_ednchg(void *avp_pointer, const int32_t ai_size, const int32_t ai_num) {
  int ai_csize, ai_cnum;
  char ac_buf[16];
  char *acp_tmp;
  char *acp_local;
  memset(ac_buf, '\0', sizeof(ac_buf));
  acp_tmp = avp_pointer;
  acp_local = avp_pointer;
  for (ai_cnum = 0; ai_cnum < ai_num; ai_cnum++) {
    memcpy(ac_buf, acp_local, ai_size);
    for (ai_csize = 0; ai_csize < ai_size; ai_csize++) {
      *acp_local = ac_buf[ai_size - ai_csize - 1];
      acp_local++;
    }
    acp_tmp += ai_size;
  }
}
```