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

```asm
<lin_solve>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %esi,-0x18(%rbp)
  mov    %rdx,-0x20(%rbp)
  mov    %rcx,-0x28(%rbp)
  movss  %xmm0,-0x2c(%rbp)
  movss  %xmm1,-0x30(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L26
L28:
  movl   $0x1,-0xc(%rbp)
  jmp    L51
L27:
  movl   $0x1,-0x8(%rbp)
  jmp    L2
L69:
  movl   $0x1,-0x4(%rbp)
  jmp    L62
L34:
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  imul   -0x8(%rbp),%eax
  mov    %eax,%edx
  mov    -0xc(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x14(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x4(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0xc(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  imul   -0x8(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x14(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x4(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    -0xc(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  imul   -0x8(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x14(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x4(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  addss  %xmm0,%xmm2
  mov    -0x14(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x8(%rbp),%eax
  sub    $0x1,%eax
  imul   %eax,%edx
  mov    -0xc(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x14(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x4(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  addss  %xmm0,%xmm2
  mov    -0x14(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x8(%rbp),%eax
  add    $0x1,%eax
  imul   %eax,%edx
  mov    -0xc(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x14(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x4(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  addss  %xmm0,%xmm2
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  imul   -0x8(%rbp),%eax
  mov    %eax,%edx
  mov    -0xc(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x14(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  mov    -0x4(%rbp),%edx
  sub    $0x1,%edx
  imul   %edx,%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  addss  %xmm0,%xmm2
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  imul   -0x8(%rbp),%eax
  mov    %eax,%edx
  mov    -0xc(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x14(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  mov    -0x4(%rbp),%edx
  add    $0x1,%edx
  imul   %edx,%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  addss  %xmm2,%xmm0
  mulss  -0x2c(%rbp),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  imul   -0x8(%rbp),%eax
  mov    %eax,%edx
  mov    -0xc(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x14(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x4(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  divss  -0x30(%rbp),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L62:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jle    L34
  addl   $0x1,-0x8(%rbp)
L2:
  mov    -0x8(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jle    L69
  addl   $0x1,-0xc(%rbp)
L51:
  mov    -0xc(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jle    L27
  mov    -0x18(%rbp),%edx
  mov    -0x20(%rbp),%rcx
  mov    -0x14(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <boundary_condition@plt>
  addl   $0x1,-0x10(%rbp)
L26:
  cmpl   $0x9,-0x10(%rbp)
  jle    L28
  nop
  nop
  leave
  ret
```

assistant: ```c
void lin_solve(int N, int b, float *value, float *value_prev, float a, float c) {
  int count;
  int count_x;
  int count_y;
  int count_z;
  for (count = 0; count < 10; count++) {
    for (count_x = 1; count_x <= N; count_x++) {
      for (count_y = 1; count_y <= N; count_y++) {
        for (count_z = 1; count_z <= N; count_z++) {
          value[((count_x) + (N + 2) * (count_y) + (N + 2) * (N + 2) * (count_z))] = (value_prev[((count_x) + (N + 2) * (count_y) + (N + 2) * (N + 2) * (count_z))] + a * (value[((count_x - 1) + (N + 2) * (count_y) + (N + 2) * (N + 2) * (count_z))] + value[((count_x + 1) + (N + 2) * (count_y) + (N + 2) * (N + 2) * (count_z))] + value[((count_x) + (N + 2) * (count_y - 1) + (N + 2) * (N + 2) * (count_z))] + value[((count_x) + (N + 2) * (count_y + 1) + (N + 2) * (N + 2) * (count_z))] + value[((count_x) + (N + 2) * (count_y) + (N + 2) * (N + 2) * (count_z - 1))] + value[((count_x) + (N + 2) * (count_y) + (N + 2) * (N + 2) * (count_z + 1))])) / c;
        }
      }
    }
    boundary_condition(N, value, b);
  }
}
```