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

```asm
<get_closeless>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,0x18(%rsp)
  mov    %rsi,0x10(%rsp)
  call   <str_len@plt>
  mov    0x10(%rsp),%rdi
  mov    %eax,%ebx
  call   <str_len@plt>
  cmp    %eax,%ebx
  jne    L234
  mov    0x18(%rsp),%r8
  movss  D3(%rip),%xmm0
  xor    %ebx,%ebx
  movzbl (%r8),%esi
  test   %sil,%sil
  je     L116
L229:
  mov    0x10(%rsp),%r9
  movss  D10(%rip),%xmm1
  xor    %edi,%edi
  jmp    L78
  xchg   %ax,%ax
L23:
  addss  %xmm1,%xmm0
L186:
  add    $0x1,%rdi
  movzbl (%r8,%rdi,1),%esi
  test   %sil,%sil
  je     L114
L78:
  movzbl (%r9,%rdi,1),%ecx
  cmp    %sil,%cl
  je     L23
  movzbl (%r8),%eax
  lea    0x1(%r8),%rdx
  test   %al,%al
  jne    L138
  jmp    L160
  nopw   0x0(%rax,%rax,1)
L4:
  movzbl (%rdx),%eax
  add    $0x1,%rdx
  test   %al,%al
  je     L160
L138:
  cmp    %al,%cl
  jne    L4
L160:
  movzbl (%r9),%edx
  lea    0x1(%r9),%rcx
  test   %dl,%dl
  jne    L187
  jmp    L186
  nopl   (%rax)
L171:
  movzbl (%rcx),%edx
  add    $0x1,%rcx
  test   %dl,%dl
  je     L186
L187:
  cmp    %sil,%dl
  jne    L171
  test   %al,%al
  je     L186
  add    $0x1,%rdi
  addss  D23(%rip),%xmm0
  movzbl (%r8,%rdi,1),%esi
  test   %sil,%sil
  jne    L78
  nopw   0x0(%rax,%rax,1)
L114:
  cmp    $0x1,%ebx
  je     L244
L116:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L244:
  lea    0x10(%rsp),%rsi
  lea    0x18(%rsp),%rdi
  movss  %xmm0,0xc(%rsp)
  call   <add_swap@plt>
  movss  0xc(%rsp),%xmm0
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  cs nopw 0x0(%rax,%rax,1)
L234:
  mov    0x10(%rsp),%rdi
  xor    %ebx,%ebx
  call   <str_len@plt>
  mov    0x18(%rsp),%rdi
  mov    %eax,%ebp
  call   <str_len@plt>
  cmp    %eax,%ebp
  jl     L127
L177:
  mov    0x18(%rsp),%rdi
  call   <str_len@plt>
  mov    0x10(%rsp),%rdi
  pxor   %xmm0,%xmm0
  movslq %eax,%r12
  mov    %r12,%rbp
  mov    %r12,%r13
  nopl   0x0(%rax)
L223:
  movss  %xmm0,0xc(%rsp)
  call   <str_len@plt>
  movss  0xc(%rsp),%xmm0
  mov    %eax,%r8d
  mov    %ebp,%eax
  sub    %r12d,%eax
  add    %r13d,%eax
  cmp    %eax,%r8d
  jle    L75
  mov    0x18(%rsp),%rax
  mov    0x10(%rsp),%rdi
  movzbl (%rax),%edx
  test   %dl,%dl
  je     L9
  movzbl (%rdi,%r13,1),%ecx
  add    $0x1,%rax
  jmp    L97
  nopl   (%rax)
L215:
  movzbl (%rax),%edx
  add    $0x1,%rax
  test   %dl,%dl
  je     L9
L97:
  cmp    %dl,%cl
  jne    L215
  addss  D23(%rip),%xmm0
L9:
  add    $0x1,%r13
  jmp    L223
  nopl   (%rax)
L75:
  mov    0x18(%rsp),%r8
  movzbl (%r8),%esi
  test   %sil,%sil
  jne    L229
  jmp    L114
L127:
  lea    0x10(%rsp),%rsi
  lea    0x18(%rsp),%rdi
  mov    $0x1,%ebx
  call   <add_swap@plt>
  jmp    L177
```

tool_calls: name: disassemble_data
arguments: data_label: D3
type_infered: byte[4]
name: disassemble_data
arguments: data_label: D10
type_infered: byte[4]
name: disassemble_data
arguments: data_label: D23
type_infered: f32

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

tool: {"D10": [0x00,0x00,0x00,0x40]}

tool: D23: 0.5

assistant: ```c
float get_closeless(char *word1, char *word2) {
  int i, j, k, flag = 0;
  float close = 0;
  if (str_len(word1) == str_len(word2))
    close++;
  else {
    if (str_len(word2) < str_len(word1)) {
      add_swap(&word1, &word2);
      flag = 1;
    }
    for (i = str_len(word1); i < str_len(word2); i++) {
      for (j = 0; word1[j] != '\0'; j++) {
        if (word2[i] == word1[j]) {
          close += 0.5;
          break;
        }
      }
    }
  }
  for (i = 0; word1[i] != '\0'; i++) {
    if (word1[i] == word2[i])
      close += 2;
    else {
      for (j = 0; word1[j] != '\0'; j++) {
        if (word2[i] == word1[j])
          break;
      }
      for (k = 0; word2[k] != '\0'; k++) {
        if (word1[i] == word2[k])
          break;
      }
      if ((word1[j] != '\0') && (word2[k] != '\0'))
        close += 0.5;
    }
  }
  if (flag == 1) {
    add_swap(&word1, &word2);
  }
  return close;
}
```