user: Demonstrate the C code that generates the assembly output below:

```asm
<_SHAMD5DataWriteMultiple>:
  endbr64
  push   %r15
  lea    0x3f(%rdx),%r15d
  push   %r14
  mov    %rsi,%r14
  push   %r13
  mov    %edi,%r13d
  push   %r12
  mov    %edx,%r12d
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  test   %edx,%edx
  cmovns %edx,%r15d
  sar    $0x6,%r15d
  cmp    $0x3f,%edx
  jle    L18
  mov    %rsi,%rbp
  xor    %ebx,%ebx
  nopl   0x0(%rax,%rax,1)
L145:
  mov    %rbp,%rsi
  mov    %r13d,%edi
  add    $0x1,%ebx
  add    $0x40,%rbp
  call   <SHAMD5DataWrite@plt>
  cmp    %ebx,%r15d
  jg     L145
  lea    -0x1(%r15),%eax
  mov    $0x40,%edx
  add    $0x1,%rax
  shl    $0x6,%rax
  cmp    $0x3f,%r12d
  cmovle %rdx,%rax
  add    %rax,%r14
L18:
  test   $0x3f,%r12b
  je     L139
  lea    0x118(%r13),%edx
  movslq %edx,%rdx
  nop
L120:
  mov    (%rdx),%rax
  test   $0x2,%al
  je     L120
  mov    %r12d,%eax
  sar    $0x1f,%eax
  shr    $0x1a,%eax
  add    %eax,%r12d
  and    $0x3f,%r12d
  sub    %eax,%r12d
  test   %r12d,%r12d
  jle    L139
  movslq (%r14),%rdx
  lea    0x80(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0x4,%r12d
  jle    L139
  movslq 0x4(%r14),%rdx
  lea    0x84(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0x8,%r12d
  jle    L139
  movslq 0x8(%r14),%rdx
  lea    0x88(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0xc,%r12d
  jle    L139
  movslq 0xc(%r14),%rdx
  lea    0x8c(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0x10,%r12d
  jle    L139
  movslq 0x10(%r14),%rdx
  lea    0x90(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0x14,%r12d
  jle    L139
  movslq 0x14(%r14),%rdx
  lea    0x94(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0x18,%r12d
  jle    L139
  movslq 0x18(%r14),%rdx
  lea    0x98(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0x1c,%r12d
  jle    L139
  movslq 0x1c(%r14),%rdx
  lea    0x9c(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0x20,%r12d
  jle    L139
  movslq 0x20(%r14),%rdx
  lea    0xa0(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0x24,%r12d
  jle    L139
  movslq 0x24(%r14),%rdx
  lea    0xa4(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0x28,%r12d
  jle    L139
  movslq 0x28(%r14),%rdx
  lea    0xa8(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0x2c,%r12d
  jle    L139
  movslq 0x2c(%r14),%rdx
  lea    0xac(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0x30,%r12d
  jle    L139
  movslq 0x30(%r14),%rdx
  lea    0xb0(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0x34,%r12d
  jle    L139
  movslq 0x34(%r14),%rdx
  lea    0xb4(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0x38,%r12d
  jle    L139
  movslq 0x38(%r14),%rdx
  lea    0xb8(%r13),%eax
  cltq
  mov    %rdx,(%rax)
  cmp    $0x3c,%r12d
  jle    L139
  movslq 0x3c(%r14),%rdx
  lea    0xbc(%r13),%eax
  cltq
  mov    %rdx,(%rax)
L139:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
void _SHAMD5DataWriteMultiple(uint32_t ui32Base, uint32_t *pui32DataSrc, uint32_t ui32DataLength) {
  uint32_t ui32Idx, ui32Count;
  ;
  ui32Count = ui32DataLength / 64;
  for (ui32Idx = 0; ui32Idx < ui32Count; ui32Idx++) {
    SHAMD5DataWrite(ui32Base, pui32DataSrc);
    pui32DataSrc += 16;
  }
  ui32Count = ui32DataLength % 64;
  if (ui32Count) {
    while (((*((volatile unsigned long *)(ui32Base + 0x00000118))) & 0x00000002) == 0) {
    }
    for (ui32Idx = 0; ui32Idx < ui32Count; ui32Idx += 4) {
      (*((volatile unsigned long *)(ui32Base + 0x00000080 + ui32Idx))) = *pui32DataSrc++;
    }
  }
}
```