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

```asm
<print_words_aux>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x1a8,%rsp
  mov    %rdi,0x20(%rsp)
  mov    %rdx,0x10(%rsp)
  cmp    $0x7,%rsi
  je     L158
  mov    0x10(%rsp),%rax
  lea    (%rdi,%rsi,4),%rdx
  lea    (%rax,%rcx,1),%rbx
  lea    0x1(%rcx),%rax
  mov    %rax,%r11
  mov    %rbx,%rcx
  mov    %rsi,%rax
  sub    %rsi,%r11
  jmp    L423
  nopl   0x0(%rax,%rax,1)
L38:
  add    $0x30,%edi
  add    $0x4,%rdx
  add    $0x1,%rcx
  mov    %dil,-0x1(%rcx)
  cmp    $0x7,%rax
  je     L239
L423:
  mov    (%rdx),%edi
  lea    (%rax,%r11,1),%rsi
  add    $0x1,%rax
  cmp    $0x1,%edi
  jle    L38
  mov    %rsi,0x170(%rsp)
  mov    0x20(%rsp),%rsi
  mov    %rax,0x180(%rsp)
  lea    (%rsi,%rax,4),%rax
  mov    %rdx,0x198(%rsp)
  mov    %rcx,0x190(%rsp)
  mov    %rax,0x188(%rsp)
  movq   $0x1,0x138(%rsp)
L52:
  mov    0x138(%rsp),%rsi
  mov    %r11,0x8(%rsp)
  call   <get_char_key@plt>
  mov    0x190(%rsp),%rsi
  mov    0x8(%rsp),%r11
  mov    %al,(%rsi)
  mov    0x10(%rsp),%rax
  add    0x170(%rsp),%rax
  mov    %rax,0x150(%rsp)
  mov    0x188(%rsp),%rax
  mov    %rax,0x158(%rsp)
  mov    0x180(%rsp),%rax
  cmp    $0x7,%rax
  mov    %rax,0x148(%rsp)
  je     L245
  mov    0x158(%rsp),%rdx
  mov    0x150(%rsp),%rcx
  jmp    L509
  nopw   0x0(%rax,%rax,1)
L298:
  add    $0x30,%edi
  add    $0x4,%rdx
  add    $0x1,%rcx
  mov    %dil,-0x1(%rcx)
  cmp    $0x7,%rax
  je     L316
L509:
  mov    (%rdx),%edi
  lea    (%rax,%r11,1),%rsi
  add    $0x1,%rax
  cmp    $0x1,%edi
  jle    L298
  mov    %rdx,0x158(%rsp)
  mov    0x20(%rsp),%rdx
  mov    %rax,0x148(%rsp)
  lea    (%rdx,%rax,4),%rax
  mov    %rsi,0x160(%rsp)
  mov    %rcx,0x150(%rsp)
  mov    %rax,0x178(%rsp)
  movq   $0x1,0x100(%rsp)
L428:
  mov    0x100(%rsp),%rsi
  mov    %r11,0x8(%rsp)
  call   <get_char_key@plt>
  mov    0x150(%rsp),%rsi
  mov    0x8(%rsp),%r11
  mov    %al,(%rsi)
  mov    0x10(%rsp),%rax
  add    0x160(%rsp),%rax
  mov    %rax,0x118(%rsp)
  mov    0x178(%rsp),%rax
  mov    %rax,0x128(%rsp)
  mov    0x148(%rsp),%rax
  cmp    $0x7,%rax
  mov    %rax,0x120(%rsp)
  je     L528
  mov    0x118(%rsp),%rcx
  mov    0x128(%rsp),%rdx
  jmp    L209
  nopw   0x0(%rax,%rax,1)
L201:
  add    $0x30,%edi
  add    $0x4,%rdx
  add    $0x1,%rcx
  mov    %dil,-0x1(%rcx)
  cmp    $0x7,%rax
  je     L410
L209:
  mov    (%rdx),%edi
  lea    (%rax,%r11,1),%rsi
  add    $0x1,%rax
  cmp    $0x1,%edi
  jle    L201
  mov    %rcx,0x118(%rsp)
  mov    0x20(%rsp),%rcx
  mov    %rax,0x120(%rsp)
  lea    (%rcx,%rax,4),%rax
  mov    %rdx,0x128(%rsp)
  mov    %rsi,0x130(%rsp)
  mov    %rax,0x168(%rsp)
  movq   $0x1,0xd0(%rsp)
L602:
  mov    0xd0(%rsp),%rsi
  mov    %r11,0x8(%rsp)
  call   <get_char_key@plt>
  mov    0x118(%rsp),%rsi
  mov    0x8(%rsp),%r11
  mov    %al,(%rsi)
  mov    0x10(%rsp),%rax
  add    0x130(%rsp),%rax
  mov    %rax,0xe8(%rsp)
  mov    0x168(%rsp),%rax
  mov    %rax,0xf8(%rsp)
  mov    0x120(%rsp),%rax
  cmp    $0x7,%rax
  mov    %rax,0xf0(%rsp)
  je     L257
  mov    0xe8(%rsp),%rcx
  mov    0xf8(%rsp),%rdx
  jmp    L616
  nopw   0x0(%rax,%rax,1)
L189:
  add    $0x30,%edi
  add    $0x4,%rdx
  add    $0x1,%rcx
  mov    %dil,-0x1(%rcx)
  cmp    $0x7,%rax
  je     L469
L616:
  mov    (%rdx),%edi
  lea    (%r11,%rax,1),%rsi
  add    $0x1,%rax
  cmp    $0x1,%edi
  jle    L189
  mov    %rcx,0xe8(%rsp)
  mov    0x20(%rsp),%rcx
  mov    %rax,0xf0(%rsp)
  lea    (%rcx,%rax,4),%rax
  mov    %rsi,0x108(%rsp)
  mov    %rdx,0xf8(%rsp)
  mov    %rax,0x140(%rsp)
  movq   $0x1,0x90(%rsp)
L490:
  mov    0x90(%rsp),%rsi
  mov    %r11,0x8(%rsp)
  call   <get_char_key@plt>
  mov    0xe8(%rsp),%rdx
  mov    0x8(%rsp),%r11
  mov    %al,(%rdx)
  mov    0x10(%rsp),%rax
  add    0x108(%rsp),%rax
  mov    %rax,0xb8(%rsp)
  mov    0x140(%rsp),%rax
  mov    %rax,0xc0(%rsp)
  mov    0xf0(%rsp),%rax
  cmp    $0x7,%rax
  mov    %rax,0xb0(%rsp)
  je     L526
  mov    0xc0(%rsp),%rdx
  mov    0xb8(%rsp),%rcx
  jmp    L436
  nopw   0x0(%rax,%rax,1)
L382:
  add    $0x30,%edi
  add    $0x4,%rdx
  add    $0x1,%rcx
  mov    %dil,-0x1(%rcx)
  cmp    $0x7,%rax
  je     L35
L436:
  mov    (%rdx),%edi
  lea    (%r11,%rax,1),%rsi
  add    $0x1,%rax
  cmp    $0x1,%edi
  jle    L382
  mov    %rcx,0xb8(%rsp)
  mov    0x20(%rsp),%rcx
  mov    %rax,0xb0(%rsp)
  lea    (%rcx,%rax,4),%rax
  mov    %rdx,0xc0(%rsp)
  mov    %rsi,0xd8(%rsp)
  mov    %rax,0x110(%rsp)
  movq   $0x1,0x38(%rsp)
L589:
  mov    0x38(%rsp),%rsi
  mov    %r11,0x8(%rsp)
  call   <get_char_key@plt>
  mov    0xb8(%rsp),%rsi
  mov    0x8(%rsp),%r11
  mov    %al,(%rsi)
  mov    0x10(%rsp),%rax
  add    0xd8(%rsp),%rax
  mov    %rax,0x60(%rsp)
  mov    0x110(%rsp),%rax
  mov    %rax,0x70(%rsp)
  mov    0xb0(%rsp),%rax
  cmp    $0x7,%rax
  mov    %rax,0x68(%rsp)
  je     L86
  mov    0x60(%rsp),%rcx
  mov    0x70(%rsp),%rdx
  jmp    L282
  nopw   0x0(%rax,%rax,1)
L167:
  add    $0x30,%edi
  add    $0x4,%rdx
  add    $0x1,%rcx
  mov    %dil,-0x1(%rcx)
  cmp    $0x7,%rax
  je     L4
L282:
  mov    (%rdx),%edi
  lea    (%r11,%rax,1),%rsi
  add    $0x1,%rax
  cmp    $0x1,%edi
  jle    L167
  mov    %rdx,0x70(%rsp)
  mov    0x20(%rsp),%rdx
  mov    %r11,%r15
  mov    %rax,0x68(%rsp)
  lea    (%rdx,%rax,4),%rax
  mov    %rcx,0x60(%rsp)
  mov    %rsi,0x88(%rsp)
  mov    %rax,0xe0(%rsp)
  movq   $0x1,0x28(%rsp)
L104:
  mov    0x28(%rsp),%rsi
  call   <get_char_key@plt>
  mov    0x60(%rsp),%rdx
  mov    0x10(%rsp),%r11
  mov    0xe0(%rsp),%r10
  add    0x88(%rsp),%r11
  mov    %al,(%rdx)
  mov    0x68(%rsp),%rax
  mov    %rax,%r14
  cmp    $0x7,%rax
  jne    L588
  jmp    L403
  nopl   (%rax)
L401:
  add    $0x30,%edi
  add    $0x4,%r10
  add    $0x1,%r11
  mov    %dil,-0x1(%r11)
  cmp    $0x7,%r14
  je     L99
L588:
  mov    (%r10),%edi
  lea    (%r15,%r14,1),%rax
  add    $0x1,%r14
  cmp    $0x1,%edi
  jle    L401
  mov    %rax,0x30(%rsp)
  mov    0x20(%rsp),%rax
  movq   $0x1,0x18(%rsp)
  lea    (%rax,%r14,4),%rax
  mov    %r10,0xc8(%rsp)
  mov    %rax,0x98(%rsp)
  mov    %r11,0xa0(%rsp)
  mov    %r14,0xa8(%rsp)
L119:
  mov    0x18(%rsp),%rsi
  call   <get_char_key@plt>
  mov    0xa0(%rsp),%rcx
  mov    0x10(%rsp),%r8
  mov    0x98(%rsp),%r14
  add    0x30(%rsp),%r8
  mov    %al,(%rcx)
  mov    0xa8(%rsp),%rax
  mov    %rax,%r13
  cmp    $0x7,%rax
  jne    L74
  jmp    L354
  nopl   0x0(%rax)
L128:
  add    $0x30,%edi
  add    $0x4,%r14
  add    $0x1,%r8
  mov    %dil,-0x1(%r8)
  cmp    $0x7,%r13
  je     L433
L74:
  mov    (%r14),%edi
  lea    (%r15,%r13,1),%r10
  add    $0x1,%r13
  cmp    $0x1,%edi
  jle    L128
  mov    0x20(%rsp),%rax
  mov    %r14,0x78(%rsp)
  movq   $0x1,0x8(%rsp)
  mov    0x10(%rsp),%r12
  lea    (%rax,%r13,4),%rax
  mov    %r8,0x50(%rsp)
  mov    %rax,0x48(%rsp)
  mov    %r10,0x40(%rsp)
  mov    %r13,0x58(%rsp)
L168:
  mov    0x8(%rsp),%rsi
  call   <get_char_key@plt>
  mov    0x50(%rsp),%rsi
  mov    0x48(%rsp),%r8
  mov    %al,(%rsi)
  mov    0x40(%rsp),%rax
  lea    (%r12,%rax,1),%rbp
  mov    0x58(%rsp),%rax
  mov    %rax,%rbx
  cmp    $0x7,%rax
  jne    L314
  jmp    L567
  nopl   0x0(%rax,%rax,1)
L276:
  add    $0x30,%edi
  add    $0x4,%r8
  add    $0x1,%rbp
  mov    %dil,-0x1(%rbp)
  cmp    $0x7,%rbx
  je     L617
L314:
  mov    (%r8),%edi
  lea    (%r15,%rbx,1),%r13
  add    $0x1,%rbx
  cmp    $0x1,%edi
  jle    L276
  mov    $0x1,%r14d
  mov    %r15,0x80(%rsp)
  mov    %r14,%r15
  mov    %r8,%r14
L241:
  mov    %r15,%rsi
  add    $0x1,%r15
  call   <get_char_key@plt>
  mov    0x20(%rsp),%rdi
  mov    %r13,%rcx
  mov    %r12,%rdx
  mov    %al,0x0(%rbp)
  mov    %rbx,%rsi
  call   <print_words_aux>
  cmp    $0x4,%r15
  je     L499
  mov    (%r14),%edi
  jmp    L241
L567:
  mov    0x40(%rsp),%r13
  nop
L617:
  movb   $0x0,(%r12,%r13,1)
  mov    %r12,%rsi
  lea    D89(%rip),%rdi
  call   <printf@plt>
L429:
  addq   $0x1,0x8(%rsp)
  mov    0x8(%rsp),%rax
  cmp    $0x4,%rax
  je     L386
  mov    0x78(%rsp),%rax
  mov    (%rax),%edi
  jmp    L168
L354:
  mov    0x30(%rsp),%r10
  cs nopw 0x0(%rax,%rax,1)
L433:
  mov    0x10(%rsp),%rax
  lea    D89(%rip),%rdi
  movb   $0x0,(%rax,%r10,1)
  mov    %rax,%rsi
  call   <printf@plt>
L386:
  addq   $0x1,0x18(%rsp)
  mov    0x18(%rsp),%rax
  cmp    $0x4,%rax
  je     L560
  mov    0xc8(%rsp),%rax
  mov    (%rax),%edi
  jmp    L119
  nopl   0x0(%rax)
L499:
  mov    0x80(%rsp),%r15
  jmp    L429
L403:
  mov    0x88(%rsp),%rax
  nopw   0x0(%rax,%rax,1)
L99:
  mov    %rax,%rsi
  mov    %rax,0x30(%rsp)
  mov    0x10(%rsp),%rax
  lea    D89(%rip),%rdi
  movb   $0x0,(%rax,%rsi,1)
  mov    %rax,%rsi
  call   <printf@plt>
L560:
  addq   $0x1,0x28(%rsp)
  mov    0x28(%rsp),%rax
  cmp    $0x4,%rax
  je     L317
  mov    0x70(%rsp),%rax
  mov    (%rax),%edi
  jmp    L104
  nopl   (%rax)
L317:
  mov    %r15,%r11
L66:
  addq   $0x1,0x38(%rsp)
  mov    0x38(%rsp),%rax
  cmp    $0x4,%rax
  je     L203
  mov    0xc0(%rsp),%rax
  mov    (%rax),%edi
  jmp    L589
  nopl   0x0(%rax,%rax,1)
L35:
  mov    %rsi,0xd8(%rsp)
  mov    %rsi,%rcx
L600:
  mov    0x10(%rsp),%rax
  lea    D89(%rip),%rdi
  mov    %r11,0x8(%rsp)
  movb   $0x0,(%rax,%rcx,1)
  mov    %rax,%rsi
  call   <printf@plt>
  mov    0x8(%rsp),%r11
L203:
  addq   $0x1,0x90(%rsp)
  mov    0x90(%rsp),%rax
  cmp    $0x4,%rax
  je     L144
  mov    0xf8(%rsp),%rax
  mov    (%rax),%edi
  jmp    L490
L469:
  mov    %rsi,0x108(%rsp)
  mov    %rsi,%rdx
L608:
  mov    0x10(%rsp),%rax
  lea    D89(%rip),%rdi
  mov    %r11,0x8(%rsp)
  movb   $0x0,(%rax,%rdx,1)
  mov    %rax,%rsi
  call   <printf@plt>
  mov    0x8(%rsp),%r11
L144:
  addq   $0x1,0xd0(%rsp)
  mov    0xd0(%rsp),%rax
  cmp    $0x4,%rax
  je     L55
  mov    0x128(%rsp),%rax
  mov    (%rax),%edi
  jmp    L602
  cs nopw 0x0(%rax,%rax,1)
L4:
  mov    %rsi,0x88(%rsp)
  mov    %rsi,%rcx
L207:
  mov    0x10(%rsp),%rax
  lea    D89(%rip),%rdi
  mov    %r11,0x8(%rsp)
  movb   $0x0,(%rax,%rcx,1)
  mov    %rax,%rsi
  call   <printf@plt>
  mov    0x8(%rsp),%r11
  jmp    L66
L410:
  mov    %rsi,0x130(%rsp)
L584:
  mov    0x10(%rsp),%rax
  lea    D89(%rip),%rdi
  mov    %r11,0x8(%rsp)
  movb   $0x0,(%rax,%rsi,1)
  mov    %rax,%rsi
  call   <printf@plt>
  mov    0x8(%rsp),%r11
L55:
  addq   $0x1,0x100(%rsp)
  mov    0x100(%rsp),%rax
  cmp    $0x4,%rax
  je     L0
  mov    0x158(%rsp),%rax
  mov    (%rax),%edi
  jmp    L428
L316:
  mov    %rsi,0x160(%rsp)
L122:
  mov    0x10(%rsp),%rax
  lea    D89(%rip),%rdi
  mov    %r11,0x8(%rsp)
  movb   $0x0,(%rax,%rsi,1)
  mov    %rax,%rsi
  call   <printf@plt>
  mov    0x8(%rsp),%r11
L0:
  addq   $0x1,0x138(%rsp)
  mov    0x138(%rsp),%rax
  cmp    $0x4,%rax
  je     L457
  mov    0x198(%rsp),%rax
  mov    (%rax),%edi
  jmp    L52
L457:
  add    $0x1a8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L239:
  mov    %rsi,0x170(%rsp)
  mov    %rsi,%rcx
L498:
  mov    0x10(%rsp),%rax
  lea    D89(%rip),%rdi
  movb   $0x0,(%rax,%rcx,1)
  add    $0x1a8,%rsp
  mov    %rax,%rsi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1070 <printf@plt>
L86:
  mov    0xd8(%rsp),%rax
  mov    %rax,0x88(%rsp)
  mov    %rax,%rcx
  jmp    L207
L526:
  mov    0x108(%rsp),%rax
  mov    %rax,0xd8(%rsp)
  mov    %rax,%rcx
  jmp    L600
L257:
  mov    0x130(%rsp),%rax
  mov    %rax,0x108(%rsp)
  mov    %rax,%rdx
  jmp    L608
L528:
  mov    0x160(%rsp),%rax
  mov    %rax,0x130(%rsp)
  mov    %rax,%rsi
  jmp    L584
L245:
  mov    0x170(%rsp),%rax
  mov    %rax,0x160(%rsp)
  mov    %rax,%rsi
  jmp    L122
L158:
  mov    %rcx,0x170(%rsp)
  jmp    L498
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D89
data_type: string

tool: D89: %s


assistant: ```c
void print_words_aux(int number[], size_t number_i, char *buff, size_t buff_i) {
  if (number_i == 7) {
    buff[buff_i] = '\0';
    printf("%s\n", buff);
    return;
  }
  if (number[number_i] < 2) {
    buff[buff_i] = '0' + number[number_i];
    print_words_aux(number, number_i + 1, buff, buff_i + 1);
  } else {
    size_t i;
    for (i = 1; i <= 3; i++) {
      buff[buff_i] = get_char_key(number[number_i], i);
      print_words_aux(number, number_i + 1, buff, buff_i + 1);
    }
  }
}
```