user: 这段汇编代码用C语言表示是什么样的？

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x158,%rsp
  mov    %edi,-0x154(%rbp)
  mov    %rsi,-0x160(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x148(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x144(%rbp)
  movq   $0x0,-0x140(%rbp)
  movq   $0x0,-0x138(%rbp)
  movq   $0x0,-0x130(%rbp)
  cmpl   $0x4,-0x154(%rbp)
  je     L67
  mov    -0x160(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D75(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%edi
  call   <exit@plt>
L67:
  mov    -0x160(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rsi
  mov    -0x160(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rcx
  mov    -0x160(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  lea    -0x120(%rbp),%rax
  mov    %rsi,%r8
  lea    D58(%rip),%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    -0x120(%rbp),%rax
  lea    D11(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <popen@plt>
  mov    %rax,-0x128(%rbp)
  cmpq   $0x0,-0x128(%rbp)
  jne    L45
  lea    -0x120(%rbp),%rax
  mov    %rax,%rsi
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L45
L44:
  lea    -0x120(%rbp),%rax
  mov    $0x3a,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L45
  lea    -0x14c(%rbp),%rsi
  lea    -0x150(%rbp),%rcx
  lea    -0x140(%rbp),%rdx
  lea    -0x120(%rbp),%rax
  mov    %rsi,%r8
  lea    D79(%rip),%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  lea    -0x140(%rbp),%rax
  mov    %rax,%rdi
  call   <ctime@plt>
  mov    %rax,%rdx
  movss  -0x14c(%rbp),%xmm0
  cvtss2sd %xmm0,%xmm0
  movss  -0x150(%rbp),%xmm1
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm1,%xmm2
  movq   %xmm2,%rax
  mov    %rdx,%rsi
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D63(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movss  -0x150(%rbp),%xmm0
  comiss -0x148(%rbp),%xmm0
  jbe    L28
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,-0x148(%rbp)
  mov    -0x140(%rbp),%rax
  mov    %rax,-0x138(%rbp)
L28:
  movss  -0x14c(%rbp),%xmm0
  comiss -0x144(%rbp),%xmm0
  ja     L57
  jmp    L45
L57:
  movss  -0x14c(%rbp),%xmm0
  movss  %xmm0,-0x144(%rbp)
  mov    -0x140(%rbp),%rax
  mov    %rax,-0x130(%rbp)
L45:
  mov    -0x128(%rbp),%rdx
  lea    -0x120(%rbp),%rax
  mov    $0xff,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L44
  mov    -0x138(%rbp),%rax
  test   %rax,%rax
  jne    L105
  mov    -0x130(%rbp),%rax
  test   %rax,%rax
  je     L20
L105:
  mov    -0x138(%rbp),%rbx
  lea    -0x138(%rbp),%rax
  mov    %rax,%rdi
  call   <ctime@plt>
  mov    %rax,%rcx
  pxor   %xmm3,%xmm3
  cvtss2sd -0x148(%rbp),%xmm3
  movq   %xmm3,%rax
  mov    %rbx,%rdx
  mov    %rcx,%rsi
  movq   %rax,%xmm0
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    -0x130(%rbp),%rbx
  lea    -0x130(%rbp),%rax
  mov    %rax,%rdi
  call   <ctime@plt>
  mov    %rax,%rcx
  pxor   %xmm4,%xmm4
  cvtss2sd -0x144(%rbp),%xmm4
  movq   %xmm4,%rax
  mov    %rbx,%rdx
  mov    %rcx,%rsi
  movq   %rax,%xmm0
  lea    D88(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L60
L20:
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L60:
  mov    -0x128(%rbp),%rax
  mov    %rax,%rdi
  call   <pclose@plt>
  mov    $0x0,%edi
  call   <exit@plt>
  mov    $0x0,%eax
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L110
  call   <__stack_chk_fail@plt>
L110:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D75
datatype: string
name: disassemble_data
arguments: tag: D58
datatype: string
name: disassemble_data
arguments: tag: D11
datatype: string
name: disassemble_data
arguments: tag: D43
datatype: string
name: disassemble_data
arguments: tag: D79
datatype: string
name: disassemble_data
arguments: tag: D63
datatype: string
name: disassemble_data
arguments: tag: D48
datatype: string
name: disassemble_data
arguments: tag: D88
datatype: string
name: disassemble_data
arguments: tag: D6
datatype: string

tool: D75: usage: %s <rrd file> <start time> <end time>


tool: D58: rrdtool fetch %.128s AVERAGE -s %.32s -e %.32s

tool: D11: r

tool: D43: error %s


tool: D79: %lu: %f %f

tool: D63: %2.2f %2.2f %s

tool: D48: Max in: %2.2f at %s (%lu)


tool: D88: Max out: %2.2f at %s (%lu)


tool: D6: No valid data found

assistant: ```c
int main(int iArg, char **cArg) {
  FILE *pp;
  float fIn, fOut, fMaxIn = 0.0, fMaxOut = 0.0;
  char cBuf[256];
  long unsigned luDate = 0;
  long unsigned luMaxInDate = 0;
  long unsigned luMaxOutDate = 0;
  if (iArg != 4) {
    printf("usage: %s <rrd file> <start time> <end time>\n", cArg[0]);
    exit(0);
  }
  sprintf(cBuf, "rrdtool fetch %.128s AVERAGE -s %.32s -e %.32s", cArg[1], cArg[2], cArg[3]);
  pp = popen(cBuf, "r");
  if (pp == NULL) {
    printf("error %s\n", cBuf);
    exit(1);
  }
  while (fgets(cBuf, 255, pp) != NULL) {
    if (strchr(cBuf, ':')) {
      sscanf(cBuf, "%lu: %f %f", &luDate, &fIn, &fOut);
      printf("%2.2f %2.2f %s", fIn, fOut, ctime(&luDate));
      if (fIn > fMaxIn) {
        fMaxIn = fIn;
        luMaxInDate = luDate;
      }
      if (fOut > fMaxOut) {
        fMaxOut = fOut;
        luMaxOutDate = luDate;
      }
    }
  }
  if (luMaxInDate || luMaxOutDate) {
    printf("Max in: %2.2f at %s (%lu)\n", fMaxIn, ctime(&luMaxInDate), luMaxInDate);
    printf("Max out: %2.2f at %s (%lu)\n", fMaxOut, ctime(&luMaxOutDate), luMaxOutDate);
  } else {
    printf("No valid data found\n");
  }
  pclose(pp);
  exit(0);
  return (0);
}
```