user: Translate the below assembly code into C programming language:

```asm
<printScreen>:
  endbr64
  push   %r15
  mov    %edi,%r15d
  push   %r14
  mov    %edx,%r14d
  push   %r13
  mov    %r8d,%r13d
  push   %r12
  mov    %edi,%r12d
  lea    D69(%rip),%rdi
  sar    $0x1f,%r12d
  push   %rbp
  mov    %esi,%ebp
  push   %rbx
  and    $0x2,%r12d
  mov    %ecx,%ebx
  lea    0x2b(%r12),%eax
  mov    %esi,%r12d
  sar    $0x1f,%r12d
  sub    $0x28,%rsp
  and    $0x2,%r12d
  mov    %al,0x17(%rsp)
  add    $0x2b,%r12d
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  movsd  %xmm1,0x18(%rsp)
  test   %edx,%edx
  js     L165
  call   <printf@plt>
  cmp    $0x2,%ebx
  je     L180
  cmp    $0x3,%ebx
  je     L360
  mov    $0x2b,%edx
  cmp    $0x1,%ebx
  je     L273
L219:
  add    $0x28,%rsp
  lea    D16(%rip),%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1060 <puts@plt>
  cs nopw 0x0(%rax,%rax,1)
L165:
  call   <printf@plt>
  cmp    $0x2,%ebx
  je     L108
  cmp    $0x3,%ebx
  je     L360
  cmp    $0x1,%ebx
  jne    L219
  mov    $0x2d,%edx
L273:
  mov    %r15d,%esi
  mov    %ebp,%eax
  neg    %esi
  cmovs  %r15d,%esi
  neg    %eax
  cmovs  %ebp,%eax
  mov    %eax,%r11d
  cmp    $0x1,%esi
  je     L178
  cmp    $0x1,%eax
  je     L78
  mov    %ebp,%eax
  or     %r14d,%eax
  je     L133
  test   %ebp,%ebp
  je     L262
  test   %r14d,%r14d
  jne    L224
  mov    %r11d,%ecx
  mov    %r12d,%edx
  mov    %r15d,%esi
  xor    %eax,%eax
  lea    D10(%rip),%rdi
  call   <printf@plt>
  nopl   0x0(%rax)
L37:
  cmpb   $0x2d,0x17(%rsp)
  jne    L40
L115:
  lea    D80(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L339
  xchg   %ax,%ax
L360:
  mov    %r14d,%esi
  lea    D219(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D233(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L219
  nopl   0x0(%rax)
L180:
  test   %r14d,%r14d
  jne    L349
  mov    %ebp,%esi
  lea    D64(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L395:
  movsd  0x8(%rsp),%xmm0
  lea    D66(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L219
  nopl   (%rax)
L108:
  mov    $0x2d,%edx
L282:
  mov    %r14d,%ecx
  mov    %ebp,%esi
  lea    D143(%rip),%rdi
  neg    %ecx
  cmovs  %r14d,%ecx
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L395
L78:
  cmp    %r15d,%esi
  je     L269
  test   %r15d,%r15d
  js     L344
  je     L37
  mov    %r14d,%r8d
  mov    %edx,%ecx
  mov    %r12d,%esi
  mov    %r11d,%edx
  neg    %r8d
  lea    D156(%rip),%rdi
  cmovs  %r14d,%r8d
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L37
  nopl   (%rax)
L178:
  cmp    $0x1,%eax
  jne    L78
  mov    %r14d,%ecx
  mov    %r12d,%esi
  neg    %ecx
  cmovs  %r14d,%ecx
  cmpb   $0x2d,0x17(%rsp)
  je     L238
  lea    D94(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  nopw   0x0(%rax,%rax,1)
L40:
  lea    D168(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L339:
  cmp    $0x1,%r13d
  je     L393
  xor    %eax,%eax
  lea    D187(%rip),%rdi
  call   <printf@plt>
  or     %ebp,%r14d
  jne    L155
  movsd  0x8(%rsp),%xmm0
  lea    D115(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L219
  nopl   0x0(%rax,%rax,1)
L262:
  mov    %r14d,%ecx
  mov    %r15d,%esi
  lea    D176(%rip),%rdi
  neg    %ecx
  cmovs  %r14d,%ecx
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L37
  nop
L269:
  cmp    %r11d,%ebp
  je     L37
  test   %ebp,%ebp
  js     L389
  je     L37
  mov    %r14d,%ecx
  lea    D17(%rip),%rdi
  neg    %ecx
  cmovs  %r14d,%ecx
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L37
  nopl   0x0(%rax,%rax,1)
L393:
  lea    D7(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  movsd  0x18(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm0
  lea    D96(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  jmp    L219
  nopl   0x0(%rax,%rax,1)
L155:
  movsd  0x18(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm2
  mov    $0x4,%eax
  lea    D83(%rip),%rdi
  andpd  D105(%rip),%xmm1
  movapd %xmm2,%xmm0
  movapd %xmm1,%xmm3
  call   <printf@plt>
  jmp    L219
  nopw   0x0(%rax,%rax,1)
L133:
  mov    %r15d,%esi
  lea    D28(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L37
  xchg   %ax,%ax
L224:
  mov    %r14d,%r9d
  mov    %edx,%r8d
  mov    %r11d,%ecx
  mov    %r12d,%edx
  neg    %r9d
  mov    %r15d,%esi
  lea    D92(%rip),%rdi
  cmovs  %r14d,%r9d
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L37
  nopl   0x0(%rax)
L349:
  mov    $0x2b,%edx
  jmp    L282
  nopw   0x0(%rax,%rax,1)
L344:
  mov    %r14d,%r8d
  mov    %edx,%ecx
  mov    %r12d,%esi
  mov    %r11d,%edx
  neg    %r8d
  lea    D109(%rip),%rdi
  cmovs  %r14d,%r8d
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L37
L389:
  mov    %r14d,%ecx
  lea    D158(%rip),%rdi
  neg    %ecx
  cmovs  %r14d,%ecx
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L37
L238:
  lea    D84(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L115
```

tool_calls: name: unpack_data
arguments: label: D69
type: string
name: unpack_data
arguments: label: D16
type: string
name: unpack_data
arguments: label: D10
type: string
name: unpack_data
arguments: label: D80
type: string
name: unpack_data
arguments: label: D219
type: string
name: unpack_data
arguments: label: D233
type: string
name: unpack_data
arguments: label: D64
type: string
name: unpack_data
arguments: label: D66
type: string
name: unpack_data
arguments: label: D143
type: string
name: unpack_data
arguments: label: D156
type: string
name: unpack_data
arguments: label: D94
type: string
name: unpack_data
arguments: label: D168
type: string
name: unpack_data
arguments: label: D187
type: string
name: unpack_data
arguments: label: D115
type: string
name: unpack_data
arguments: label: D176
type: string
name: unpack_data
arguments: label: D17
type: string
name: unpack_data
arguments: label: D7
type: string
name: unpack_data
arguments: label: D96
type: string
name: unpack_data
arguments: label: D83
type: string
name: unpack_data
arguments: label: D105
type: qword[2]
name: unpack_data
arguments: label: D28
type: string
name: unpack_data
arguments: label: D92
type: string
name: unpack_data
arguments: label: D109
type: string
name: unpack_data
arguments: label: D158
type: string
name: unpack_data
arguments: label: D84
type: string

tool: D69: 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

tool: D16: 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


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

tool: D80: 
The parabola opens downward.

tool: D219: 
The equation is y = %d

tool: D233: 
The line has no zeros.

tool: D64: 
The equation is y = %dx

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

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

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

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

tool: D168: 
The parabola opens upward.

tool: D187: 
The parabola has two complex roots.

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

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

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

tool: D7: 
The parabola has two real roots.

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

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

tool: {"D105": [0x7fffffffffffffff,0x0000000000000000]}

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

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

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

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

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

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;
}
```