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

```asm
<fig08_04>:
  endbr64
  push   %r15
  mov    $0x25,%edi
  push   %r14
  lea    D37(%rip),%r14
  push   %r13
  mov    %r14,%r15
  push   %r12
  lea    D161(%rip),%r12
  push   %rbp
  lea    D230(%rip),%rbp
  push   %rbx
  mov    %rbp,%r13
  lea    D6(%rip),%rbx
  sub    $0x8,%rsp
  call   <isspace@plt>
  mov    $0x9,%edi
  test   %rax,%rax
  lea    D14(%rip),%rax
  cmove  %rax,%r12
  call   <isspace@plt>
  mov    $0xa,%edi
  test   %rax,%rax
  cmovne %rbx,%r13
  call   <isspace@plt>
  lea    D175(%rip),%r8
  mov    %rbp,%rcx
  push   %r8
  test   %rax,%rax
  lea    D25(%rip),%r9
  lea    D68(%rip),%rsi
  push   %r12
  cmovne %rbx,%rcx
  lea    D3(%rip),%rdi
  xor    %eax,%eax
  push   %r8
  lea    D270(%rip),%r12
  push   %r13
  lea    D121(%rip),%r13
  mov    %r13,%rdx
  call   <printf@plt>
  add    $0x20,%rsp
  mov    $0x24,%edi
  call   <iscntrl@plt>
  mov    $0xa,%edi
  test   %rax,%rax
  cmovne %r12,%r15
  call   <iscntrl@plt>
  mov    %rbp,%rcx
  lea    D168(%rip),%r8
  mov    %r13,%rdx
  test   %rax,%rax
  mov    %r15,%r9
  lea    D34(%rip),%rsi
  cmovne %rbx,%rcx
  sub    $0x8,%rsp
  xor    %eax,%eax
  push   %r8
  lea    D79(%rip),%rdi
  lea    D152(%rip),%r15
  lea    D303(%rip),%r13
  call   <printf@plt>
  mov    $0x23,%edi
  call   <ispunct@plt>
  pop    %rdx
  mov    $0x59,%edi
  pop    %rcx
  test   %rax,%rax
  lea    D117(%rip),%rax
  cmove  %rax,%r15
  call   <ispunct@plt>
  mov    $0x3b,%edi
  test   %rax,%rax
  lea    D122(%rip),%rax
  cmove  %rax,%r13
  call   <ispunct@plt>
  lea    D195(%rip),%rcx
  lea    D209(%rip),%rdx
  push   %rcx
  test   %rax,%rax
  lea    D245(%rip),%rax
  mov    %rcx,%r9
  push   %r15
  cmove  %rax,%rdx
  mov    %r13,%r8
  lea    D85(%rip),%rsi
  lea    D250(%rip),%rdi
  xor    %eax,%eax
  mov    %rbp,%r13
  call   <printf@plt>
  mov    $0x7,%edi
  call   <isprint@plt>
  pop    %rsi
  pop    %rdi
  mov    $0x24,%edi
  test   %rax,%rax
  cmovne %rbx,%r13
  call   <isprint@plt>
  mov    %r14,%rdx
  lea    D35(%rip),%rcx
  test   %rax,%rax
  mov    %r13,%r9
  lea    D259(%rip),%rsi
  cmovne %r12,%rdx
  sub    $0x8,%rsp
  lea    D44(%rip),%r8
  xor    %eax,%eax
  push   %rcx
  lea    D162(%rip),%rdi
  call   <printf@plt>
  mov    $0x20,%edi
  call   <isgraph@plt>
  pop    %r8
  mov    $0x51,%edi
  pop    %r9
  test   %rax,%rax
  cmove  %rbp,%rbx
  call   <isgraph@plt>
  lea    D153(%rip),%rdx
  lea    D272(%rip),%rcx
  test   %rax,%rax
  lea    D199(%rip),%rax
  mov    %rbx,%r9
  cmove  %rax,%rdx
  sub    $0x8,%rsp
  xor    %eax,%eax
  push   %rcx
  lea    D58(%rip),%r8
  lea    D227(%rip),%rsi
  lea    D203(%rip),%rdi
  call   <printf@plt>
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D37
type_infered: string
name: unpack_data
arguments: data_label: D161
type_infered: string
name: unpack_data
arguments: data_label: D230
type_infered: string
name: unpack_data
arguments: data_label: D6
type_infered: string
name: unpack_data
arguments: data_label: D14
type_infered: string
name: unpack_data
arguments: data_label: D175
type_infered: string
name: unpack_data
arguments: data_label: D25
type_infered: string
name: unpack_data
arguments: data_label: D68
type_infered: string
name: unpack_data
arguments: data_label: D3
type_infered: string
name: unpack_data
arguments: data_label: D270
type_infered: string
name: unpack_data
arguments: data_label: D121
type_infered: string
name: unpack_data
arguments: data_label: D168
type_infered: string
name: unpack_data
arguments: data_label: D34
type_infered: string
name: unpack_data
arguments: data_label: D79
type_infered: string
name: unpack_data
arguments: data_label: D152
type_infered: string
name: unpack_data
arguments: data_label: D303
type_infered: string
name: unpack_data
arguments: data_label: D117
type_infered: string
name: unpack_data
arguments: data_label: D122
type_infered: string
name: unpack_data
arguments: data_label: D195
type_infered: string
name: unpack_data
arguments: data_label: D209
type_infered: string
name: unpack_data
arguments: data_label: D245
type_infered: string
name: unpack_data
arguments: data_label: D85
type_infered: string
name: unpack_data
arguments: data_label: D250
type_infered: string
name: unpack_data
arguments: data_label: D35
type_infered: string
name: unpack_data
arguments: data_label: D259
type_infered: string
name: unpack_data
arguments: data_label: D44
type_infered: string
name: unpack_data
arguments: data_label: D162
type_infered: string
name: unpack_data
arguments: data_label: D153
type_infered: string
name: unpack_data
arguments: data_label: D272
type_infered: string
name: unpack_data
arguments: data_label: D199
type_infered: string
name: unpack_data
arguments: data_label: D58
type_infered: string
name: unpack_data
arguments: data_label: D227
type_infered: string
name: unpack_data
arguments: data_label: D203
type_infered: string

tool: D37: $ is not a 

tool: D161: % is a 

tool: D230:  is not a 

tool: D6:  is a 

tool: D14: % is not a 

tool: D175: whitespace character

tool: D25: Horizontal tab

tool: D68: According to isspace:

tool: D3: %s
%s%s%s
%s%s%s
%s%s



tool: D270: $ is a 

tool: D121: Newline

tool: D168: control character

tool: D34: According to iscntrl:

tool: D79: %s
%s%s%s
%s%s



tool: D152: # is a 

tool: D303: Y is a 

tool: D117: # is not a 

tool: D122: Y is not a 

tool: D195: punctuation character

tool: D209: ; is a 

tool: D245: ; is not a 

tool: D85: According to ispunct:

tool: D250: %s
%s%s
%s%s
%s%s



tool: D35: printing character

tool: D259: According to isprint:

tool: D44: Alert

tool: D162: %s
%s%s
%s%s%s



tool: D153: Q is a 

tool: D272: printing character other than a space

tool: D199: Q is not a 

tool: D58: Space

tool: D227: According to isgraph:

tool: D203: %s
%s%s
%s%s%s


assistant: ```c
void fig08_04() {
  printf("%s\n%s%s%s\n%s%s%s\n%s%s\n\n", "According to isspace:", "Newline", isspace('\n') ? " is a " : " is not a ", "whitespace character", "Horizontal tab", isspace('\t') ? " is a " : " is not a ", "whitespace character", isspace('%') ? "% is a " : "% is not a ", "whitespace character");
  printf("%s\n%s%s%s\n%s%s\n\n", "According to iscntrl:", "Newline", iscntrl('\n') ? " is a " : " is not a ", "control character", iscntrl('$') ? "$ is a " : "$ is not a ", "control character");
  printf("%s\n%s%s\n%s%s\n%s%s\n\n", "According to ispunct:", ispunct(';') ? "; is a " : "; is not a ", "punctuation character", ispunct('Y') ? "Y is a " : "Y is not a ", "punctuation character", ispunct('#') ? "# is a " : "# is not a ", "punctuation character");
  printf("%s\n%s%s\n%s%s%s\n\n", "According to isprint:", isprint('$') ? "$ is a " : "$ is not a ", "printing character", "Alert", isprint('\a') ? " is a " : " is not a ", "printing character");
  printf("%s\n%s%s\n%s%s%s\n", "According to isgraph:", isgraph('Q') ? "Q is a " : "Q is not a ", "printing character other than a space", "Space", isgraph(' ') ? " is a " : " is not a ", "printing character other than a space");
}
```