user: 下面的汇编指令对应的C源代码是什么:

```asm
<BcdToAsciiString>:
  endbr64
  mov    %rdi,%rax
  mov    %edx,%ecx
  test   %edx,%edx
  je     L59
  mov    %edx,%edx
  lea    (%rsi,%rdx,2),%rdi
  lea    (%rax,%rdx,1),%r8
  cmp    %rdi,%rax
  setae  %dil
  cmp    %r8,%rsi
  setae  %r8b
  or     %r8b,%dil
  je     L168
  lea    -0x1(%rcx),%edi
  cmp    $0xe,%edi
  jbe    L168
  mov    %ecx,%edi
  movdqa D13(%rip),%xmm3
  movdqa D18(%rip),%xmm2
  xor    %edx,%edx
  shr    $0x4,%edi
  shl    $0x4,%rdi
  nopl   0x0(%rax)
L147:
  movdqu (%rax,%rdx,1),%xmm1
  movdqa %xmm1,%xmm0
  pand   %xmm3,%xmm1
  psrlw  $0x4,%xmm0
  por    %xmm2,%xmm1
  pand   %xmm3,%xmm0
  por    %xmm2,%xmm0
  movdqa %xmm0,%xmm4
  punpckhbw %xmm1,%xmm0
  punpcklbw %xmm1,%xmm4
  movups %xmm0,0x10(%rsi,%rdx,2)
  movups %xmm4,(%rsi,%rdx,2)
  add    $0x10,%rdx
  cmp    %rdi,%rdx
  jne    L147
  mov    %ecx,%edi
  and    $0xfffffff0,%edi
  mov    %edi,%edx
  add    %rdx,%rax
  lea    (%rsi,%rdx,2),%rdx
  cmp    %edi,%ecx
  je     L59
  movzbl (%rax),%esi
  shr    $0x4,%sil
  or     $0x30,%esi
  mov    %sil,(%rdx)
  movzbl (%rax),%esi
  and    $0xf,%esi
  or     $0x30,%esi
  mov    %sil,0x1(%rdx)
  lea    0x1(%rdi),%esi
  cmp    %esi,%ecx
  jbe    L59
  movzbl 0x1(%rax),%esi
  shr    $0x4,%sil
  or     $0x30,%esi
  mov    %sil,0x2(%rdx)
  movzbl 0x1(%rax),%esi
  and    $0xf,%esi
  or     $0x30,%esi
  mov    %sil,0x3(%rdx)
  lea    0x2(%rdi),%esi
  cmp    %esi,%ecx
  jbe    L59
  movzbl 0x2(%rax),%esi
  shr    $0x4,%sil
  or     $0x30,%esi
  mov    %sil,0x4(%rdx)
  movzbl 0x2(%rax),%esi
  and    $0xf,%esi
  or     $0x30,%esi
  mov    %sil,0x5(%rdx)
  lea    0x3(%rdi),%esi
  cmp    %esi,%ecx
  jbe    L59
  movzbl 0x3(%rax),%esi
  shr    $0x4,%sil
  or     $0x30,%esi
  mov    %sil,0x6(%rdx)
  movzbl 0x3(%rax),%esi
  and    $0xf,%esi
  or     $0x30,%esi
  mov    %sil,0x7(%rdx)
  lea    0x4(%rdi),%esi
  cmp    %esi,%ecx
  jbe    L59
  movzbl 0x4(%rax),%esi
  shr    $0x4,%sil
  or     $0x30,%esi
  mov    %sil,0x8(%rdx)
  movzbl 0x4(%rax),%esi
  and    $0xf,%esi
  or     $0x30,%esi
  mov    %sil,0x9(%rdx)
  lea    0x5(%rdi),%esi
  cmp    %esi,%ecx
  jbe    L59
  movzbl 0x5(%rax),%esi
  shr    $0x4,%sil
  or     $0x30,%esi
  mov    %sil,0xa(%rdx)
  movzbl 0x5(%rax),%esi
  and    $0xf,%esi
  or     $0x30,%esi
  mov    %sil,0xb(%rdx)
  lea    0x6(%rdi),%esi
  cmp    %esi,%ecx
  jbe    L59
  movzbl 0x6(%rax),%esi
  shr    $0x4,%sil
  or     $0x30,%esi
  mov    %sil,0xc(%rdx)
  movzbl 0x6(%rax),%esi
  and    $0xf,%esi
  or     $0x30,%esi
  mov    %sil,0xd(%rdx)
  lea    0x7(%rdi),%esi
  cmp    %esi,%ecx
  jbe    L59
  movzbl 0x7(%rax),%esi
  shr    $0x4,%sil
  or     $0x30,%esi
  mov    %sil,0xe(%rdx)
  movzbl 0x7(%rax),%esi
  and    $0xf,%esi
  or     $0x30,%esi
  mov    %sil,0xf(%rdx)
  lea    0x8(%rdi),%esi
  cmp    %esi,%ecx
  jbe    L59
  movzbl 0x8(%rax),%esi
  shr    $0x4,%sil
  or     $0x30,%esi
  mov    %sil,0x10(%rdx)
  movzbl 0x8(%rax),%esi
  and    $0xf,%esi
  or     $0x30,%esi
  mov    %sil,0x11(%rdx)
  lea    0x9(%rdi),%esi
  cmp    %esi,%ecx
  jbe    L59
  movzbl 0x9(%rax),%esi
  shr    $0x4,%sil
  or     $0x30,%esi
  mov    %sil,0x12(%rdx)
  movzbl 0x9(%rax),%esi
  and    $0xf,%esi
  or     $0x30,%esi
  mov    %sil,0x13(%rdx)
  lea    0xa(%rdi),%esi
  cmp    %esi,%ecx
  jbe    L59
  movzbl 0xa(%rax),%esi
  shr    $0x4,%sil
  or     $0x30,%esi
  mov    %sil,0x14(%rdx)
  movzbl 0xa(%rax),%esi
  and    $0xf,%esi
  or     $0x30,%esi
  mov    %sil,0x15(%rdx)
  lea    0xb(%rdi),%esi
  cmp    %esi,%ecx
  jbe    L59
  movzbl 0xb(%rax),%esi
  shr    $0x4,%sil
  or     $0x30,%esi
  mov    %sil,0x16(%rdx)
  movzbl 0xb(%rax),%esi
  and    $0xf,%esi
  or     $0x30,%esi
  mov    %sil,0x17(%rdx)
  lea    0xc(%rdi),%esi
  cmp    %esi,%ecx
  jbe    L59
  movzbl 0xc(%rax),%esi
  shr    $0x4,%sil
  or     $0x30,%esi
  mov    %sil,0x18(%rdx)
  movzbl 0xc(%rax),%esi
  and    $0xf,%esi
  or     $0x30,%esi
  mov    %sil,0x19(%rdx)
  lea    0xd(%rdi),%esi
  cmp    %esi,%ecx
  jbe    L59
  movzbl 0xd(%rax),%esi
  add    $0xe,%edi
  shr    $0x4,%sil
  or     $0x30,%esi
  mov    %sil,0x1a(%rdx)
  movzbl 0xd(%rax),%esi
  and    $0xf,%esi
  or     $0x30,%esi
  mov    %sil,0x1b(%rdx)
  cmp    %edi,%ecx
  jbe    L59
  movzbl 0xe(%rax),%ecx
  shr    $0x4,%cl
  or     $0x30,%ecx
  mov    %cl,0x1c(%rdx)
  movzbl 0xe(%rax),%eax
  and    $0xf,%eax
  or     $0x30,%eax
  mov    %al,0x1d(%rdx)
  ret
  nopw   0x0(%rax,%rax,1)
L168:
  lea    (%rax,%rdx,1),%rcx
  nopl   0x0(%rax)
L21:
  movzbl (%rax),%edx
  add    $0x2,%rsi
  add    $0x1,%rax
  shr    $0x4,%dl
  or     $0x30,%edx
  mov    %dl,-0x2(%rsi)
  movzbl -0x1(%rax),%edx
  and    $0xf,%edx
  or     $0x30,%edx
  mov    %dl,-0x1(%rsi)
  cmp    %rcx,%rax
  jne    L21
L59:
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D13
data_type: byte[16]
name: disassemble_data
arguments: tag: D18
data_type: byte[16]

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

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

assistant: ```c
void BcdToAsciiString(unsigned char *pBcd, unsigned char *pAscii, unsigned int size) {
  unsigned int i;
  unsigned char vNible;
  for (i = 0; i < size; i++) {
    vNible = (((*pBcd) & 0xF0) >> 4) | 0x30;
    *pAscii++ = vNible;
    vNible = ((*pBcd) & 0x0F) | 0x30;
    *pAscii++ = vNible;
    pBcd++;
  }
}
```