user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<vector_madd>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %rcx,-0x30(%rbp)
  mov    %r8d,-0x34(%rbp)
  mov    -0x34(%rbp),%eax
  shr    $0x2,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x34(%rbp),%eax
  and    $0x3,%eax
  mov    %eax,-0x4(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L28
L32:
  mov    -0x10(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%eax
  lea    0x0(,%rax,4),%rcx
  mov    -0x28(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  mov    -0x10(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%eax
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x10(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rcx
  mov    -0x28(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  mov    -0x10(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x10(%rbp),%eax
  add    $0x2,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%eax
  add    $0x2,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rcx
  mov    -0x28(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  mov    -0x10(%rbp),%eax
  add    $0x2,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%eax
  add    $0x2,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x10(%rbp),%eax
  add    $0x3,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%eax
  add    $0x3,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rcx
  mov    -0x28(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  mov    -0x10(%rbp),%eax
  add    $0x3,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%eax
  add    $0x3,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
  addl   $0x4,-0x10(%rbp)
L28:
  mov    -0x8(%rbp),%eax
  shl    $0x2,%eax
  cmp    %eax,-0x10(%rbp)
  jb     L32
  movl   $0x0,-0xc(%rbp)
  jmp    L35
L16:
  mov    -0x10(%rbp),%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%ecx
  mov    -0xc(%rbp),%eax
  add    %ecx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rcx
  mov    -0x28(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  mov    -0x10(%rbp),%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%esi
  mov    -0xc(%rbp),%eax
  add    %esi,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
  addl   $0x1,-0xc(%rbp)
L35:
  mov    -0xc(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jb     L16
  nop
  nop
  pop    %rbp
  ret
```

assistant: ```c
void vector_madd(int *res, int *a, int *b, int *c, unsigned int length) {
  unsigned int i, j;
  unsigned int num_blocks = length / 4;
  unsigned int rem = length % 4;
  for (i = 0; i < num_blocks * 4; i += 4) {
    res[i + 0] = (a[i + 0] * b[i + 0] + c[i + 0]);
    res[i + 1] = (a[i + 1] * b[i + 1] + c[i + 1]);
    res[i + 2] = (a[i + 2] * b[i + 2] + c[i + 2]);
    res[i + 3] = (a[i + 3] * b[i + 3] + c[i + 3]);
  }
  for (j = 0; j < rem; j++)
    res[i + j] = (a[i + j] * b[i + j] + c[i + j]);
}
```