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

```asm
<HexToAsciiString>:
  endbr64
  mov    %rdi,%rax
  mov    %rsi,%rcx
  mov    %edx,%edi
  test   %edx,%edx
  je     L30
  lea    -0x1(%rdx),%r8d
  mov    %edx,%edx
  lea    (%rsi,%rdx,2),%rsi
  lea    (%rax,%rdx,1),%r9
  cmp    %rsi,%rax
  setae  %sil
  cmp    %r9,%rcx
  setae  %r9b
  or     %r9b,%sil
  je     L20
  cmp    $0xe,%r8d
  jbe    L20
  mov    %edi,%esi
  movdqa D11(%rip),%xmm6
  xor    %edx,%edx
  pxor   %xmm2,%xmm2
  shr    $0x4,%esi
  movdqa D1(%rip),%xmm5
  movdqa D16(%rip),%xmm4
  movdqa D5(%rip),%xmm3
  shl    $0x4,%rsi
  nopw   0x0(%rax,%rax,1)
L2:
  movdqu (%rax,%rdx,1),%xmm1
  movdqa %xmm1,%xmm0
  pand   %xmm6,%xmm1
  psrlw  $0x4,%xmm0
  pand   %xmm6,%xmm0
  movdqa %xmm0,%xmm7
  movdqa %xmm0,%xmm8
  psubusb %xmm5,%xmm0
  pcmpeqb %xmm2,%xmm0
  paddb  %xmm3,%xmm8
  paddb  %xmm4,%xmm7
  pand   %xmm0,%xmm7
  pandn  %xmm8,%xmm0
  movdqa %xmm1,%xmm8
  por    %xmm7,%xmm0
  movdqa %xmm1,%xmm7
  psubusb %xmm5,%xmm1
  pcmpeqb %xmm2,%xmm1
  paddb  %xmm4,%xmm7
  paddb  %xmm3,%xmm8
  pand   %xmm1,%xmm7
  pandn  %xmm8,%xmm1
  por    %xmm7,%xmm1
  movdqa %xmm0,%xmm7
  punpcklbw %xmm1,%xmm7
  punpckhbw %xmm1,%xmm0
  movups %xmm7,(%rcx,%rdx,2)
  movups %xmm0,0x10(%rcx,%rdx,2)
  add    $0x10,%rdx
  cmp    %rdx,%rsi
  jne    L2
  mov    %edi,%esi
  and    $0xfffffff0,%esi
  mov    %esi,%r9d
  lea    (%rax,%r9,1),%rdx
  lea    (%rcx,%r9,2),%rcx
  cmp    %esi,%edi
  je     L30
  sub    %esi,%r8d
  lea    0x1(%rdx,%r8,1),%r8
  xchg   %ax,%ax
L43:
  movzbl (%rdx),%eax
  shr    $0x4,%al
  lea    0x30(%rax),%edi
  cmp    $0x9,%al
  lea    0x37(%rax),%esi
  mov    %edi,%eax
  cmova  %esi,%eax
  mov    %al,(%rcx)
  movzbl (%rdx),%eax
  and    $0xf,%eax
  lea    0x30(%rax),%edi
  cmp    $0x9,%al
  lea    0x37(%rax),%esi
  mov    %edi,%eax
  cmova  %esi,%eax
  add    $0x1,%rdx
  add    $0x2,%rcx
  mov    %al,-0x1(%rcx)
  cmp    %rdx,%r8
  ja     L43
  ret
  nopl   0x0(%rax)
L20:
  lea    (%rcx,%rdx,2),%r8
L37:
  movzbl (%rax),%edx
  shr    $0x4,%dl
  cmp    $0xa,%dl
  lea    0x30(%rdx),%esi
  lea    0x37(%rdx),%edi
  cmovb  %esi,%edi
  mov    %dil,(%rcx)
  movzbl (%rax),%edx
  and    $0xf,%edx
  cmp    $0xa,%dl
  lea    0x37(%rdx),%edi
  lea    0x30(%rdx),%esi
  cmovb  %esi,%edi
  add    $0x2,%rcx
  add    $0x1,%rax
  mov    %dil,-0x1(%rcx)
  cmp    %rcx,%r8
  jne    L37
L30:
  ret
```

tool_calls: name: unpack_data
arguments: tag: D11
data_type: byte[16]
name: unpack_data
arguments: tag: D1
data_type: byte[16]
name: unpack_data
arguments: tag: D16
data_type: byte[16]
name: unpack_data
arguments: tag: D5
data_type: byte[16]

tool: {"D11": [0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f]}

tool: {"D1": [0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09]}

tool: {"D16": [0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30]}

tool: {"D5": [0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37]}

assistant: ```c
void HexToAsciiString(unsigned char *pHex, unsigned char *pAscii, unsigned int size) {
  unsigned int i;
  unsigned char vNible;
  for (i = 0; i < size; i++) {
    vNible = ((*pHex) & 0xF0) >> 4;
    if (vNible > 9) {
      vNible = vNible - 0x0A;
      vNible = vNible + 0x41;
    } else {
      vNible = vNible + 0x30;
    }
    *pAscii++ = vNible;
    vNible = ((*pHex) & 0x0F);
    if (vNible > 9) {
      vNible = vNible - 0x0A;
      vNible = vNible + 0x41;
    } else {
      vNible = vNible + 0x30;
    }
    *pAscii++ = vNible;
    pHex++;
  }
}
```