user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<Stem_score>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %ecx,-0x2c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x4(%rbp)
  movl   $0x0,-0x8(%rbp)
  jmp    L5
L61:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movb   $0x20,(%rax)
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x4,%al
  je     L8
  mov    -0x2c(%rbp),%eax
  sub    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x4,%al
  jne    L6
L8:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movb   $0x3f,(%rax)
  movss  -0x4(%rbp),%xmm1
  movss  D10(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rbp)
  jmp    L15
L6:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%edx
  mov    -0x2c(%rbp),%eax
  sub    -0x8(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  add    %edx,%eax
  cmp    $0x3,%eax
  jne    L37
  movss  -0x4(%rbp),%xmm1
  movss  D7(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movb   $0x7c,(%rax)
L37:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%ecx
  mov    -0x2c(%rbp),%eax
  sub    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %eax,%edx
  mov    %ecx,%eax
  sub    %edx,%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <abs@plt>
  cmp    $0x2,%eax
  jne    L15
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%edx
  mov    -0x2c(%rbp),%eax
  sub    -0x8(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  add    %edx,%eax
  cmp    $0x2,%eax
  jne    L15
  movss  -0x4(%rbp),%xmm1
  movss  D14(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movb   $0x2e,(%rax)
L15:
  addl   $0x1,-0x8(%rbp)
L5:
  mov    -0x8(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jle    L61
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  movss  -0x4(%rbp),%xmm0
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D10
type: byte[4]
name: retrieve_data
arguments: label: D7
type: byte[4]
name: retrieve_data
arguments: label: D14
type: f32

tool: {"D10": [0x00,0x00,0xc0,0x3e]}

tool: {"D7": [0x00,0x00,0x80,0x3f]}

tool: D14: 0.5

assistant: ```c
float Stem_score(const char *a, const char *b, char sym_app[], int n) {
  int i;
  float s_score = 0;
  for (i = 0; i <= n; i++) {
    sym_app[i] = ' ';
    if (a[i] == 4 || b[n - i] == 4) {
      sym_app[i] = '?';
      s_score += (1.5) / 4.0;
    } else {
      if (a[i] + b[n - i] == 3) {
        s_score++;
        sym_app[i] = '|';
      }
      if (abs(a[i] - b[n - i]) == 2 && a[i] + b[n - i] == 2) {
        s_score += 0.5;
        sym_app[i] = '.';
      }
    }
  }
  sym_app[i] = 0;
  return s_score;
}
```