user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<gen_run_length_table>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %esi,-0x18(%rbp)
  mov    %rdx,-0x20(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  je     L66
  lea    D64(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L66:
  mov    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpl   $0x0,-0x14(%rbp)
  je     L59
  lea    D32(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L34
L59:
  lea    D19(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D55(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x8(%rbp)
  jmp    L104
L27:
  lea    D57(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x4(%rbp)
  jmp    L64
L110:
  mov    -0x4(%rbp),%eax
  and    $0xf,%eax
  test   %eax,%eax
  jne    L13
  lea    D68(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L13:
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%ecx
  mov    -0x4(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <count_run@plt>
  mov    %eax,%esi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpl   $0xff,-0x4(%rbp)
  je     L38
  mov    $0x2c,%edi
  call   <putchar@plt>
L38:
  mov    -0x4(%rbp),%eax
  and    $0xf,%eax
  cmp    $0xf,%eax
  jne    L57
  mov    $0xa,%edi
  call   <putchar@plt>
  jmp    L67
L57:
  mov    $0x20,%edi
  call   <putchar@plt>
L67:
  addl   $0x1,-0x4(%rbp)
L64:
  cmpl   $0xff,-0x4(%rbp)
  jle    L110
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpl   $0x7,-0x8(%rbp)
  je     L37
  mov    $0x2c,%edi
  call   <putchar@plt>
L37:
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x8(%rbp)
L104:
  cmpl   $0x7,-0x8(%rbp)
  jle    L27
  lea    D84(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L34:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D64
type: string
name: unpack_data
arguments: data_label: D40
type: string
name: unpack_data
arguments: data_label: D32
type: string
name: unpack_data
arguments: data_label: D19
type: string
name: unpack_data
arguments: data_label: D55
type: string
name: unpack_data
arguments: data_label: D57
type: string
name: unpack_data
arguments: data_label: D68
type: string
name: unpack_data
arguments: data_label: D28
type: string
name: unpack_data
arguments: data_label: D30
type: string
name: unpack_data
arguments: data_label: D84
type: string

tool: D64: extern 

tool: D40: const uint8_t %s [8][256]

tool: D32: ;

tool: D19:  =

tool: D55: {

tool: D57:   {

tool: D68:   

tool: D28: %d

tool: D30:   }

tool: D84: };

assistant: ```c
void gen_run_length_table(bool header, int val, char *name) {
  int i, j;
  if (header)
    printf("extern ");
  printf("const uint8_t %s [8][256]", name);
  if (header) {
    printf(";\n");
    return;
  }
  printf(" =\n");
  printf("{\n");
  for (i = 0; i < 8; i++) {
    printf("  {\n");
    for (j = 0; j < 256; j++) {
      if ((j & 15) == 0)
        printf("  ");
      printf("%d", count_run(j, i, val));
      if (j != 0xff)
        printf(",");
      if ((j & 15) == 15)
        printf("\n");
      else
        printf(" ");
    }
    printf("  }");
    if (i != 7)
      printf(",");
    printf("\n");
  }
  printf("};\n");
}
```