user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  lea    D144(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0xce4,%eax
  je     L57
  lea    D144(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0xce4,%ecx
  mov    %eax,%edx
  lea    D144(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L57:
  lea    D113(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0xce4,%eax
  je     L88
  lea    D113(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0xce4,%ecx
  mov    %eax,%edx
  lea    D113(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L88:
  lea    D354(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0xce4,%eax
  je     L127
  lea    D354(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0xce4,%ecx
  mov    %eax,%edx
  lea    D354(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L127:
  lea    D31(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0x1388,%eax
  je     L0
  lea    D31(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0x1388,%ecx
  mov    %eax,%edx
  lea    D31(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L0:
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0x1388,%eax
  je     L7
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0x1388,%ecx
  mov    %eax,%edx
  lea    D26(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L7:
  lea    D238(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0x1388,%eax
  je     L34
  lea    D238(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0x1388,%ecx
  mov    %eax,%edx
  lea    D238(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L34:
  lea    D105(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0x1388,%eax
  je     L29
  lea    D105(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0x1388,%ecx
  mov    %eax,%edx
  lea    D105(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L29:
  lea    D320(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0x1,%eax
  je     L59
  lea    D320(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0x1,%ecx
  mov    %eax,%edx
  lea    D320(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L59:
  lea    D559(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0xa,%eax
  je     L67
  lea    D559(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0xa,%ecx
  mov    %eax,%edx
  lea    D559(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L67:
  lea    D424(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0x64,%eax
  je     L136
  lea    D424(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0x64,%ecx
  mov    %eax,%edx
  lea    D424(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L136:
  lea    D286(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0x457,%eax
  je     L84
  lea    D286(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0x457,%ecx
  mov    %eax,%edx
  lea    D286(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L84:
  lea    D402(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0x9,%eax
  je     L23
  lea    D402(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0x9,%ecx
  mov    %eax,%edx
  lea    D402(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L23:
  lea    D566(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0x5a,%eax
  je     L110
  lea    D566(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0x5a,%ecx
  mov    %eax,%edx
  lea    D566(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L110:
  lea    D107(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0x384,%eax
  je     L20
  lea    D107(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0x384,%ecx
  mov    %eax,%edx
  lea    D107(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L20:
  lea    D417(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  cmp    $0x270f,%eax
  je     L111
  lea    D417(%rip),%rax
  mov    %rax,%rdi
  call   <parse_millinum@plt>
  mov    $0x270f,%ecx
  mov    %eax,%edx
  lea    D417(%rip),%rax
  mov    %rax,%rsi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L111:
  mov    $0x0,%eax
  pop    %rbp
  ret
```

tool_calls: name: parse_data
arguments: tag: D144
type_infered: string
name: parse_data
arguments: tag: D116
type_infered: string
name: parse_data
arguments: tag: D113
type_infered: string
name: parse_data
arguments: tag: D354
type_infered: string
name: parse_data
arguments: tag: D31
type_infered: string
name: parse_data
arguments: tag: D26
type_infered: string
name: parse_data
arguments: tag: D238
type_infered: string
name: parse_data
arguments: tag: D105
type_infered: string
name: parse_data
arguments: tag: D320
type_infered: string
name: parse_data
arguments: tag: D559
type_infered: string
name: parse_data
arguments: tag: D424
type_infered: string
name: parse_data
arguments: tag: D286
type_infered: string
name: parse_data
arguments: tag: D402
type_infered: string
name: parse_data
arguments: tag: D566
type_infered: string
name: parse_data
arguments: tag: D107
type_infered: string
name: parse_data
arguments: tag: D417
type_infered: string

tool: D144: 3.3

tool: D116: Parsing of %s yielded %u but expected %u


tool: D113: 3.30

tool: D354: 3.300

tool: D31: 5

tool: D26: 5.0

tool: D238: 5.00

tool: D105: 5.000

tool: D320: 0.001

tool: D559: 0.010

tool: D424: 0.100

tool: D286: 1.111

tool: D402: 0.009

tool: D566: 0.090

tool: D107: 0.900

tool: D417: 9.999

assistant: ```c
int main() {
  if (parse_millinum((uint8_t *)"3.3") != 3300) {
    printf("Parsing of %s yielded %u but expected %u\n", "3.3", parse_millinum((uint8_t *)"3.3"), 3300);
  };
  if (parse_millinum((uint8_t *)"3.30") != 3300) {
    printf("Parsing of %s yielded %u but expected %u\n", "3.30", parse_millinum((uint8_t *)"3.30"), 3300);
  };
  if (parse_millinum((uint8_t *)"3.300") != 3300) {
    printf("Parsing of %s yielded %u but expected %u\n", "3.300", parse_millinum((uint8_t *)"3.300"), 3300);
  };
  if (parse_millinum((uint8_t *)"5") != 5000) {
    printf("Parsing of %s yielded %u but expected %u\n", "5", parse_millinum((uint8_t *)"5"), 5000);
  };
  if (parse_millinum((uint8_t *)"5.0") != 5000) {
    printf("Parsing of %s yielded %u but expected %u\n", "5.0", parse_millinum((uint8_t *)"5.0"), 5000);
  };
  if (parse_millinum((uint8_t *)"5.00") != 5000) {
    printf("Parsing of %s yielded %u but expected %u\n", "5.00", parse_millinum((uint8_t *)"5.00"), 5000);
  };
  if (parse_millinum((uint8_t *)"5.000") != 5000) {
    printf("Parsing of %s yielded %u but expected %u\n", "5.000", parse_millinum((uint8_t *)"5.000"), 5000);
  };
  if (parse_millinum((uint8_t *)"0.001") != 1) {
    printf("Parsing of %s yielded %u but expected %u\n", "0.001", parse_millinum((uint8_t *)"0.001"), 1);
  };
  if (parse_millinum((uint8_t *)"0.010") != 10) {
    printf("Parsing of %s yielded %u but expected %u\n", "0.010", parse_millinum((uint8_t *)"0.010"), 10);
  };
  if (parse_millinum((uint8_t *)"0.100") != 100) {
    printf("Parsing of %s yielded %u but expected %u\n", "0.100", parse_millinum((uint8_t *)"0.100"), 100);
  };
  if (parse_millinum((uint8_t *)"1.111") != 1111) {
    printf("Parsing of %s yielded %u but expected %u\n", "1.111", parse_millinum((uint8_t *)"1.111"), 1111);
  };
  if (parse_millinum((uint8_t *)"0.009") != 9) {
    printf("Parsing of %s yielded %u but expected %u\n", "0.009", parse_millinum((uint8_t *)"0.009"), 9);
  };
  if (parse_millinum((uint8_t *)"0.090") != 90) {
    printf("Parsing of %s yielded %u but expected %u\n", "0.090", parse_millinum((uint8_t *)"0.090"), 90);
  };
  if (parse_millinum((uint8_t *)"0.900") != 900) {
    printf("Parsing of %s yielded %u but expected %u\n", "0.900", parse_millinum((uint8_t *)"0.900"), 900);
  };
  if (parse_millinum((uint8_t *)"9.999") != 9999) {
    printf("Parsing of %s yielded %u but expected %u\n", "9.999", parse_millinum((uint8_t *)"9.999"), 9999);
  };
  return 0;
}
```