user: 请将以下的汇编代码转换成C语言代码:

```asm
<printScreen>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %esi,-0x18(%rbp)
  mov    %edx,-0x1c(%rbp)
  mov    %ecx,-0x20(%rbp)
  mov    %r8d,-0x24(%rbp)
  movsd  %xmm0,-0x30(%rbp)
  movsd  %xmm1,-0x38(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  jns    L182
  mov    $0x2d,%eax
  jmp    L153
L182:
  mov    $0x2b,%eax
L153:
  mov    %al,-0x3(%rbp)
  cmpl   $0x0,-0x18(%rbp)
  jns    L475
  mov    $0x2d,%eax
  jmp    L464
L475:
  mov    $0x2b,%eax
L464:
  mov    %al,-0x2(%rbp)
  cmpl   $0x0,-0x1c(%rbp)
  jns    L434
  mov    $0x2d,%eax
  jmp    L25
L434:
  mov    $0x2b,%eax
L25:
  mov    %al,-0x1(%rbp)
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpl   $0x3,-0x20(%rbp)
  je     L479
  cmpl   $0x3,-0x20(%rbp)
  jg     L435
  cmpl   $0x1,-0x20(%rbp)
  je     L63
  cmpl   $0x2,-0x20(%rbp)
  je     L112
  jmp    L435
L63:
  mov    -0x14(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  cmp    $0x1,%eax
  je     L78
  mov    -0x18(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  cmp    $0x1,%eax
  je     L78
  cmpl   $0x0,-0x18(%rbp)
  jne    L96
  cmpl   $0x0,-0x1c(%rbp)
  jne    L96
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D57(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L233
L96:
  cmpl   $0x0,-0x18(%rbp)
  jne    L313
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,%ecx
  movsbl -0x1(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D217(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L233
L313:
  cmpl   $0x0,-0x1c(%rbp)
  jne    L317
  mov    -0x18(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,%ecx
  movsbl -0x2(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D202(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L233
L317:
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,%edi
  movsbl -0x1(%rbp),%esi
  mov    -0x18(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,%ecx
  movsbl -0x2(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %edi,%r9d
  mov    %esi,%r8d
  mov    %eax,%esi
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L233
L78:
  mov    -0x14(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  cmp    $0x1,%eax
  je     L217
  mov    -0x18(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  cmp    $0x1,%eax
  jne    L233
L217:
  mov    -0x14(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  cmp    $0x1,%eax
  jne    L485
  mov    -0x18(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  cmp    $0x1,%eax
  jne    L485
  cmpb   $0x2d,-0x3(%rbp)
  jne    L187
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,%ecx
  movsbl -0x1(%rbp),%edx
  movsbl -0x2(%rbp),%eax
  mov    %eax,%esi
  lea    D146(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L233
L187:
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,%ecx
  movsbl -0x1(%rbp),%edx
  movsbl -0x2(%rbp),%eax
  mov    %eax,%esi
  lea    D166(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L233
L485:
  mov    -0x14(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  cmp    %eax,-0x14(%rbp)
  je     L264
  cmpl   $0x0,-0x14(%rbp)
  jns    L265
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,%esi
  movsbl -0x1(%rbp),%ecx
  mov    -0x18(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovs  %eax,%edx
  movsbl -0x2(%rbp),%eax
  mov    %esi,%r8d
  mov    %eax,%esi
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L233
L265:
  cmpl   $0x0,-0x14(%rbp)
  jle    L233
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,%esi
  movsbl -0x1(%rbp),%ecx
  mov    -0x18(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovs  %eax,%edx
  movsbl -0x2(%rbp),%eax
  mov    %esi,%r8d
  mov    %eax,%esi
  lea    D159(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L233
L264:
  mov    -0x18(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  cmp    %eax,-0x18(%rbp)
  je     L233
  cmpl   $0x0,-0x18(%rbp)
  jns    L295
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,%ecx
  movsbl -0x1(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L233
L295:
  cmpl   $0x0,-0x18(%rbp)
  jle    L233
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,%ecx
  movsbl -0x1(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D96(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L233:
  cmpb   $0x2d,-0x3(%rbp)
  jne    L62
  lea    D107(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L132
L62:
  cmpb   $0x2b,-0x3(%rbp)
  jne    L132
  lea    D110(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L132:
  cmpl   $0x1,-0x24(%rbp)
  jne    L246
  lea    D63(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movsd  -0x38(%rbp),%xmm0
  mov    -0x30(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D259(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  jmp    L435
L246:
  lea    D147(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpl   $0x0,-0x18(%rbp)
  jne    L325
  cmpl   $0x0,-0x1c(%rbp)
  jne    L325
  mov    -0x30(%rbp),%rax
  movq   %rax,%xmm0
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L435
L325:
  movsd  -0x38(%rbp),%xmm0
  movq   D123(%rip),%xmm1
  movapd %xmm0,%xmm2
  andpd  %xmm1,%xmm2
  movsd  -0x38(%rbp),%xmm0
  movq   D123(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  -0x30(%rbp),%xmm1
  mov    -0x30(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D163(%rip),%rax
  mov    %rax,%rdi
  mov    $0x4,%eax
  call   <printf@plt>
  jmp    L435
L112:
  cmpl   $0x0,-0x1c(%rbp)
  jne    L251
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D114(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L49
L251:
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,%ecx
  movsbl -0x1(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D126(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L49:
  mov    -0x30(%rbp),%rax
  movq   %rax,%xmm0
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L435
L479:
  mov    -0x1c(%rbp),%eax
  mov    %eax,%esi
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D135(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  nop
L435:
  lea    D179(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D86
type: string
name: extract_symbolic_data
arguments: data_tag: D57
type: string
name: extract_symbolic_data
arguments: data_tag: D217
type: string
name: extract_symbolic_data
arguments: data_tag: D202
type: string
name: extract_symbolic_data
arguments: data_tag: D3
type: string
name: extract_symbolic_data
arguments: data_tag: D146
type: string
name: extract_symbolic_data
arguments: data_tag: D166
type: string
name: extract_symbolic_data
arguments: data_tag: D50
type: string
name: extract_symbolic_data
arguments: data_tag: D159
type: string
name: extract_symbolic_data
arguments: data_tag: D6
type: string
name: extract_symbolic_data
arguments: data_tag: D96
type: string
name: extract_symbolic_data
arguments: data_tag: D107
type: string
name: extract_symbolic_data
arguments: data_tag: D110
type: string
name: extract_symbolic_data
arguments: data_tag: D63
type: string
name: extract_symbolic_data
arguments: data_tag: D259
type: string
name: extract_symbolic_data
arguments: data_tag: D147
type: string
name: extract_symbolic_data
arguments: data_tag: D22
type: string
name: extract_symbolic_data
arguments: data_tag: D123
type: qword
name: extract_symbolic_data
arguments: data_tag: D163
type: string
name: extract_symbolic_data
arguments: data_tag: D114
type: string
name: extract_symbolic_data
arguments: data_tag: D126
type: string
name: extract_symbolic_data
arguments: data_tag: D49
type: string
name: extract_symbolic_data
arguments: data_tag: D65
type: string
name: extract_symbolic_data
arguments: data_tag: D135
type: string
name: extract_symbolic_data
arguments: data_tag: D179
type: string

tool: D86: 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

tool: D57: 
The equation is y = %dx^2

tool: D217: 
The equation is y = %dx^2 %c %d

tool: D202: 
The equation is y = %dx^2 %c %dx

tool: D3: 
The equation is y = %dx^2 %c %dx %c %d

tool: D146: 
The equation is y = -x^2 %c x %c %d

tool: D166: 
The equation is y = x^2 %c x %c %d

tool: D50: 
The equation is y = -x^2 %c %dx %c %d

tool: D159: 
The equation is y = x^2 %c %dx %c %d

tool: D6: 
The equation is y = %dx^2 - x %c %d

tool: D96: 
The equation is y = %dx^2 + x %c %d

tool: D107: 
The parabola opens downward.

tool: D110: 
The parabola opens upward.

tool: D63: 
The parabola has two real roots.

tool: D259: 
Roots are %.3f and %.3f

tool: D147: 
The parabola has two complex roots.

tool: D22: 
Root at x = %.3f

tool: D123: 9223372036854775807

tool: D163: 
Roots are %.3f + %.3fi and %.3f - %.3fi

tool: D114: 
The equation is y = %dx

tool: D126: 
The equation is y = %dx %c %d

tool: D49: 
The line has a zero at x = %.3f

tool: D65: 
The equation is y = %d

tool: D135: 
The line has no zeros.

tool: D179: 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


assistant: ```c
void printScreen(int a, int b, int c, int curTyp, int rcRoot, double r1, double r2) {
  char ac = (a < 0) ? '-' : '+';
  char bc = (b < 0) ? '-' : '+';
  char cc = (c < 0) ? '-' : '+';
  printf("\n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
  switch (curTyp) {
  case 1:
    if (abs(a) != 1 && abs(b) != 1) {
      if (b == 0 && c == 0)
        printf("\nThe equation is y = %dx^2", a);
      else if (b == 0)
        printf("\nThe equation is y = %dx^2 %c %d", a, cc, abs(c));
      else if (c == 0)
        printf("\nThe equation is y = %dx^2 %c %dx", a, bc, abs(b));
      else
        printf("\nThe equation is y = %dx^2 %c %dx %c %d", a, bc, abs(b), cc, abs(c));
    } else if (abs(a) == 1 || abs(b) == 1) {
      if (abs(a) == 1 && abs(b) == 1) {
        if (ac == '-')
          printf("\nThe equation is y = -x^2 %c x %c %d", bc, cc, abs(c));
        else
          printf("\nThe equation is y = x^2 %c x %c %d", bc, cc, abs(c));
      } else if (abs(a) != a) {
        if (a < 0)
          printf("\nThe equation is y = -x^2 %c %dx %c %d", bc, abs(b), cc, abs(c));
        else if (a > 0)
          printf("\nThe equation is y = x^2 %c %dx %c %d", bc, abs(b), cc, abs(c));
      } else if (abs(b) != b) {
        if (b < 0)
          printf("\nThe equation is y = %dx^2 - x %c %d", a, cc, abs(c));
        else if (b > 0)
          printf("\nThe equation is y = %dx^2 + x %c %d", a, cc, abs(c));
      }
    }
    if (ac == '-')
      printf("\nThe parabola opens downward.");
    else if (ac == '+')
      printf("\nThe parabola opens upward.");
    if (rcRoot == 1) {
      printf("\nThe parabola has two real roots.");
      printf("\nRoots are %.3f and %.3f", r1, r2);
    } else {
      printf("\nThe parabola has two complex roots.");
      if (b == 0 && c == 0)
        printf("\nRoot at x = %.3f", r1);
      else
        printf("\nRoots are %.3f + %.3fi and %.3f - %.3fi", r1, fabs(r2), r1, fabs(r2));
    }
    break;
  case 2:
    if (c == 0)
      printf("\nThe equation is y = %dx", b);
    else
      printf("\nThe equation is y = %dx %c %d", b, cc, abs(c));
    printf("\nThe line has a zero at x = %.3f", r1);
    break;
  case 3:
    printf("\nThe equation is y = %d", c);
    printf("\nThe line has no zeros.");
    break;
  }
  printf("\n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n");
  return;
}
```