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

```asm
<fill_array_spiral>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  mov    %edi,-0x34(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    -0x34(%rbp),%eax
  movslq %eax,%rdx
  sub    $0x1,%rdx
  mov    %rdx,-0x18(%rbp)
  movslq %eax,%rdx
  mov    %rdx,%rcx
  mov    $0x0,%ebx
  mov    -0x34(%rbp),%edx
  sub    $0x1,%edx
  mov    %edx,-0x2c(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    %edx,-0x30(%rbp)
  movl   $0x1,-0x28(%rbp)
  movl   $0x0,-0x24(%rbp)
  movl   $0x0,-0x20(%rbp)
  jmp    L33
L79:
  mov    -0x20(%rbp),%edx
  mov    %edx,-0x1c(%rbp)
  jmp    L70
L90:
  mov    -0x24(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x40(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rsi
  mov    -0x1c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x28(%rbp),%ecx
  mov    %ecx,(%rsi,%rdx,4)
  addl   $0x1,-0x28(%rbp)
  addl   $0x1,-0x1c(%rbp)
L70:
  mov    -0x1c(%rbp),%edx
  cmp    -0x2c(%rbp),%edx
  jle    L90
  addl   $0x1,-0x24(%rbp)
  mov    -0x24(%rbp),%edx
  mov    %edx,-0x1c(%rbp)
  jmp    L60
L45:
  mov    -0x1c(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x40(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rsi
  mov    -0x2c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x28(%rbp),%ecx
  mov    %ecx,(%rsi,%rdx,4)
  addl   $0x1,-0x28(%rbp)
  addl   $0x1,-0x1c(%rbp)
L60:
  mov    -0x1c(%rbp),%edx
  cmp    -0x30(%rbp),%edx
  jle    L45
  subl   $0x1,-0x2c(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    %edx,-0x1c(%rbp)
  jmp    L73
L44:
  mov    -0x30(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x40(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rsi
  mov    -0x1c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x28(%rbp),%ecx
  mov    %ecx,(%rsi,%rdx,4)
  addl   $0x1,-0x28(%rbp)
  subl   $0x1,-0x1c(%rbp)
L73:
  mov    -0x1c(%rbp),%edx
  cmp    -0x20(%rbp),%edx
  jge    L44
  subl   $0x1,-0x30(%rbp)
  mov    -0x30(%rbp),%edx
  mov    %edx,-0x1c(%rbp)
  jmp    L72
L75:
  mov    -0x1c(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  imul   %rcx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x40(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rsi
  mov    -0x20(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x28(%rbp),%ecx
  mov    %ecx,(%rsi,%rdx,4)
  addl   $0x1,-0x28(%rbp)
  subl   $0x1,-0x1c(%rbp)
L72:
  mov    -0x1c(%rbp),%edx
  cmp    -0x24(%rbp),%edx
  jge    L75
  addl   $0x1,-0x20(%rbp)
L33:
  mov    -0x34(%rbp),%edx
  imul   %edx,%edx
  cmp    %edx,-0x28(%rbp)
  jle    L79
  nop
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
void fill_array_spiral(int n, int arr[][n]) {
  int maxRow, maxCol;
  maxRow = maxCol = n - 1;
  int ctr = 1;
  int row = 0, col = 0;
  int i;
  while (ctr <= n * n) {
    for (i = col; i <= maxCol; i++) {
      arr[row][i] = ctr;
      ctr++;
    }
    row++;
    for (i = row; i <= maxRow; i++) {
      arr[i][maxCol] = ctr;
      ctr++;
    }
    maxCol--;
    for (i = maxCol; i >= col; i--) {
      arr[maxRow][i] = ctr;
      ctr++;
    }
    maxRow--;
    for (i = maxRow; i >= row; i--) {
      arr[i][col] = ctr;
      ctr++;
    }
    col++;
  }
}
```