user: Translate the below assembly code into C programming language:

```asm
<byte_value_from_string>:
  endbr64
  mov    %edx,%ecx
  test   %edx,%edx
  jle    L177
  movslq %edx,%rax
  lea    (%rsi,%rax,4),%rdx
  cmp    %rdx,%rdi
  setae  %dl
  add    %rdi,%rax
  cmp    %rax,%rsi
  setae  %al
  or     %al,%dl
  je     L174
  lea    -0x1(%rcx),%eax
  cmp    $0xe,%eax
  jbe    L174
  mov    %ecx,%r8d
  mov    %rdi,%rdx
  pxor   %xmm3,%xmm3
  mov    %rsi,%rax
  shr    $0x4,%r8d
  movdqa D6(%rip),%xmm6
  movdqa D13(%rip),%xmm5
  pxor   %xmm2,%xmm2
  sub    $0x1,%r8d
  shl    $0x4,%r8
  lea    0x10(%rdi,%r8,1),%r8
  nopw   0x0(%rax,%rax,1)
L124:
  movdqu (%rdx),%xmm0
  add    $0x10,%rdx
  add    $0x40,%rax
  pcmpeqb %xmm6,%xmm0
  pandn  %xmm5,%xmm0
  movdqa %xmm0,%xmm1
  punpckhbw %xmm3,%xmm0
  punpcklbw %xmm3,%xmm1
  movdqa %xmm1,%xmm4
  punpckhwd %xmm2,%xmm1
  movups %xmm1,-0x30(%rax)
  movdqa %xmm0,%xmm1
  punpcklwd %xmm2,%xmm4
  punpckhwd %xmm2,%xmm0
  punpcklwd %xmm2,%xmm1
  movups %xmm4,-0x40(%rax)
  movups %xmm1,-0x20(%rax)
  movups %xmm0,-0x10(%rax)
  cmp    %r8,%rdx
  jne    L124
  mov    %ecx,%eax
  and    $0xfffffff0,%eax
  test   $0xf,%cl
  je     L177
  mov    %eax,%r8d
  xor    %r9d,%r9d
  cmpb   $0x30,(%rdi,%r8,1)
  lea    0x0(,%r8,4),%rdx
  setne  %r9b
  mov    %r9d,(%rsi,%r8,4)
  lea    0x1(%rax),%r8d
  cmp    %r8d,%ecx
  jle    L177
  movslq %r8d,%r8
  cmpb   $0x30,(%rdi,%r8,1)
  setne  %r8b
  movzbl %r8b,%r8d
  mov    %r8d,0x4(%rsi,%rdx,1)
  lea    0x2(%rax),%r8d
  cmp    %r8d,%ecx
  jle    L177
  movslq %r8d,%r8
  cmpb   $0x30,(%rdi,%r8,1)
  setne  %r8b
  movzbl %r8b,%r8d
  mov    %r8d,0x8(%rsi,%rdx,1)
  lea    0x3(%rax),%r8d
  cmp    %r8d,%ecx
  jle    L177
  movslq %r8d,%r8
  cmpb   $0x30,(%rdi,%r8,1)
  setne  %r8b
  movzbl %r8b,%r8d
  mov    %r8d,0xc(%rsi,%rdx,1)
  lea    0x4(%rax),%r8d
  cmp    %r8d,%ecx
  jle    L177
  movslq %r8d,%r8
  cmpb   $0x30,(%rdi,%r8,1)
  setne  %r8b
  movzbl %r8b,%r8d
  mov    %r8d,0x10(%rsi,%rdx,1)
  lea    0x5(%rax),%r8d
  cmp    %r8d,%ecx
  jle    L177
  movslq %r8d,%r8
  cmpb   $0x30,(%rdi,%r8,1)
  setne  %r8b
  movzbl %r8b,%r8d
  mov    %r8d,0x14(%rsi,%rdx,1)
  lea    0x6(%rax),%r8d
  cmp    %r8d,%ecx
  jle    L177
  movslq %r8d,%r8
  cmpb   $0x30,(%rdi,%r8,1)
  setne  %r8b
  movzbl %r8b,%r8d
  mov    %r8d,0x18(%rsi,%rdx,1)
  lea    0x7(%rax),%r8d
  cmp    %r8d,%ecx
  jle    L177
  movslq %r8d,%r8
  cmpb   $0x30,(%rdi,%r8,1)
  setne  %r8b
  movzbl %r8b,%r8d
  mov    %r8d,0x1c(%rsi,%rdx,1)
  lea    0x8(%rax),%r8d
  cmp    %r8d,%ecx
  jle    L177
  movslq %r8d,%r8
  cmpb   $0x30,(%rdi,%r8,1)
  setne  %r8b
  movzbl %r8b,%r8d
  mov    %r8d,0x20(%rsi,%rdx,1)
  lea    0x9(%rax),%r8d
  cmp    %r8d,%ecx
  jle    L177
  movslq %r8d,%r8
  cmpb   $0x30,(%rdi,%r8,1)
  setne  %r8b
  movzbl %r8b,%r8d
  mov    %r8d,0x24(%rsi,%rdx,1)
  lea    0xa(%rax),%r8d
  cmp    %r8d,%ecx
  jle    L177
  movslq %r8d,%r8
  cmpb   $0x30,(%rdi,%r8,1)
  setne  %r8b
  movzbl %r8b,%r8d
  mov    %r8d,0x28(%rsi,%rdx,1)
  lea    0xb(%rax),%r8d
  cmp    %r8d,%ecx
  jle    L177
  movslq %r8d,%r8
  cmpb   $0x30,(%rdi,%r8,1)
  setne  %r8b
  movzbl %r8b,%r8d
  mov    %r8d,0x2c(%rsi,%rdx,1)
  lea    0xc(%rax),%r8d
  cmp    %r8d,%ecx
  jle    L177
  movslq %r8d,%r8
  cmpb   $0x30,(%rdi,%r8,1)
  setne  %r8b
  movzbl %r8b,%r8d
  mov    %r8d,0x30(%rsi,%rdx,1)
  lea    0xd(%rax),%r8d
  cmp    %r8d,%ecx
  jle    L177
  movslq %r8d,%r8
  cmpb   $0x30,(%rdi,%r8,1)
  setne  %r8b
  add    $0xe,%eax
  movzbl %r8b,%r8d
  mov    %r8d,0x34(%rsi,%rdx,1)
  cmp    %eax,%ecx
  jle    L177
  cltq
  cmpb   $0x30,(%rdi,%rax,1)
  setne  %al
  movzbl %al,%eax
  mov    %eax,0x38(%rsi,%rdx,1)
  ret
L174:
  mov    %ecx,%ecx
  xor    %eax,%eax
  nopl   0x0(%rax)
L82:
  xor    %edx,%edx
  cmpb   $0x30,(%rdi,%rax,1)
  setne  %dl
  mov    %edx,(%rsi,%rax,4)
  add    $0x1,%rax
  cmp    %rcx,%rax
  jne    L82
L177:
  ret
```

tool_calls: name: read_data
arguments: data_tag: D6
type_guessed: byte[16]
name: read_data
arguments: data_tag: D13
type_guessed: byte[16]

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

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

assistant: ```c
void byte_value_from_string(char *input, int *output, int length) {
  for (int i = 0; i < length; i++)
    output[i] = (input[i] == '0') ? 0 : 1;
}
```