user: 请将以下的汇编代码转换成C语言代码:

```asm
<MultiplyData>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %ecx,-0x20(%rbp)
  mov    %r8d,%eax
  mov    %r9d,-0x30(%rbp)
  mov    %al,-0x2c(%rbp)
  movsbl -0x2c(%rbp),%eax
  sub    $0x53,%eax
  cmp    $0x22,%eax
  ja     L118
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D25(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D25(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  movl   $0x0,-0x4(%rbp)
  jmp    L108
L221:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%ecx
  mov    -0x4(%rbp),%eax
  imul   -0x20(%rbp),%eax
  cltd
  idivl  -0x1c(%rbp)
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%edx
  mov    %ecx,%eax
  imul   %edx,%eax
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
  addl   $0x1,-0x4(%rbp)
L108:
  mov    -0x4(%rbp),%eax
  cmp    -0x30(%rbp),%eax
  jl     L221
  jmp    L116
  movl   $0x0,-0x4(%rbp)
  jmp    L101
L14:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  mov    -0x4(%rbp),%eax
  imul   -0x20(%rbp),%eax
  cltd
  idivl  -0x1c(%rbp)
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    -0x4(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rsi
  mov    -0x18(%rbp),%rdx
  add    %rsi,%rdx
  imul   %ecx,%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x4(%rbp)
L101:
  mov    -0x4(%rbp),%eax
  cmp    -0x30(%rbp),%eax
  jl     L14
  jmp    L116
  movl   $0x0,-0x4(%rbp)
  jmp    L71
L223:
  mov    -0x4(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  mov    %eax,%ecx
  mov    -0x4(%rbp),%eax
  imul   -0x20(%rbp),%eax
  cltd
  idivl  -0x1c(%rbp)
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  imul   %eax,%ecx
  mov    %ecx,%edx
  mov    -0x4(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  mov    %dx,(%rax)
  addl   $0x1,-0x4(%rbp)
L71:
  mov    -0x4(%rbp),%eax
  cmp    -0x30(%rbp),%eax
  jl     L223
  jmp    L116
  movl   $0x0,-0x4(%rbp)
  jmp    L58
L45:
  mov    -0x4(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%ecx
  mov    -0x4(%rbp),%eax
  imul   -0x20(%rbp),%eax
  cltd
  idivl  -0x1c(%rbp)
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  mov    -0x4(%rbp),%edx
  movslq %edx,%rdx
  lea    (%rdx,%rdx,1),%rsi
  mov    -0x18(%rbp),%rdx
  add    %rsi,%rdx
  imul   %ecx,%eax
  mov    %ax,(%rdx)
  addl   $0x1,-0x4(%rbp)
L58:
  mov    -0x4(%rbp),%eax
  cmp    -0x30(%rbp),%eax
  jl     L45
  jmp    L116
  movl   $0x0,-0x4(%rbp)
  jmp    L130
L197:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  mov    -0x4(%rbp),%eax
  imul   -0x20(%rbp),%eax
  cltd
  idivl  -0x1c(%rbp)
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    -0x4(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rsi
  mov    -0x18(%rbp),%rdx
  add    %rsi,%rdx
  imul   %ecx,%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x4(%rbp)
L130:
  mov    -0x4(%rbp),%eax
  cmp    -0x30(%rbp),%eax
  jl     L197
  jmp    L116
  movl   $0x0,-0x4(%rbp)
  jmp    L177
L9:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x4(%rbp),%eax
  imul   -0x20(%rbp),%eax
  cltd
  idivl  -0x1c(%rbp)
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L177:
  mov    -0x4(%rbp),%eax
  cmp    -0x30(%rbp),%eax
  jl     L9
  jmp    L116
  movl   $0x0,-0x4(%rbp)
  jmp    L220
L98:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x4(%rbp),%eax
  imul   -0x20(%rbp),%eax
  cltd
  idivl  -0x1c(%rbp)
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L220:
  mov    -0x4(%rbp),%eax
  cmp    -0x30(%rbp),%eax
  jl     L98
  jmp    L116
L118:
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L116
  nop
L116:
  nop
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D20
type_guessed: string

tool: D20: Unexpected bad type error in MultiplyData


assistant: ```c
void MultiplyData(void *A, int spfA, void *B, int spfB, char type, int n) {
  int i;
  switch (type) {
  case 'n':
    break;
  case 'c':
    for (i = 0; i < n; i++) {
      ((char *)A)[i] *= ((char *)B)[i * spfB / spfA];
    }
    break;
  case 'S':
  case 'i':
    for (i = 0; i < n; i++) {
      ((int *)A)[i] *= ((int *)B)[i * spfB / spfA];
    }
    break;
  case 's':
    for (i = 0; i < n; i++) {
      ((short *)A)[i] *= ((short *)B)[i * spfB / spfA];
    }
    break;
  case 'u':
    for (i = 0; i < n; i++) {
      ((unsigned short *)A)[i] *= ((unsigned short *)B)[i * spfB / spfA];
    }
    break;
  case 'U':
    for (i = 0; i < n; i++) {
      ((unsigned *)A)[i] *= ((unsigned *)B)[i * spfB / spfA];
    }
    break;
  case 'f':
    for (i = 0; i < n; i++) {
      ((float *)A)[i] *= ((float *)B)[i * spfB / spfA];
    }
    break;
  case 'd':
    for (i = 0; i < n; i++) {
      ((double *)A)[i] *= ((double *)B)[i * spfB / spfA];
    }
    break;
  default:
    printf("Unexpected bad type error in MultiplyData\n");
    abort();
    break;
  }
}
```