user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<line>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %edi,-0x34(%rbp)
  mov    %esi,-0x38(%rbp)
  mov    %edx,-0x3c(%rbp)
  mov    %ecx,-0x40(%rbp)
  mov    %r8d,-0x44(%rbp)
  mov    %r9d,-0x48(%rbp)
  mov    -0x34(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x38(%rbp),%eax
  sub    -0x40(%rbp),%eax
  mov    %eax,-0x24(%rbp)
  cmpl   $0x0,-0x28(%rbp)
  jne    L62
  cmpl   $0x0,-0x24(%rbp)
  jne    L62
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x38(%rbp),%esi
  mov    -0x34(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  jmp    L71
L62:
  cmpl   $0x0,-0x28(%rbp)
  jne    L446
  cmpl   $0x0,-0x24(%rbp)
  jns    L232
  mov    -0x38(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  jmp    L39
L54:
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x20(%rbp),%esi
  mov    -0x34(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  addl   $0x1,-0x20(%rbp)
L39:
  mov    -0x20(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jle    L54
  jmp    L71
L232:
  mov    -0x40(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  jmp    L195
L335:
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x20(%rbp),%esi
  mov    -0x34(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  addl   $0x1,-0x20(%rbp)
L195:
  mov    -0x20(%rbp),%eax
  cmp    -0x38(%rbp),%eax
  jle    L335
  jmp    L71
L446:
  cmpl   $0x0,-0x24(%rbp)
  jne    L387
  cmpl   $0x0,-0x28(%rbp)
  jns    L175
  mov    -0x34(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  jmp    L278
L88:
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x38(%rbp),%esi
  mov    -0x20(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  addl   $0x1,-0x20(%rbp)
L278:
  mov    -0x20(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jle    L88
  jmp    L71
L175:
  mov    -0x3c(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  jmp    L404
L447:
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x38(%rbp),%esi
  mov    -0x20(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  addl   $0x1,-0x20(%rbp)
L404:
  mov    -0x20(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jle    L447
  jmp    L71
L387:
  mov    -0x38(%rbp),%eax
  mov    %eax,%edi
  call   <abs@plt>
  cmp    $0x3e8,%rax
  jg     L132
  mov    -0x40(%rbp),%eax
  mov    %eax,%edi
  call   <abs@plt>
  cmp    $0x3e8,%rax
  jg     L393
  cmpl   $0x0,-0x28(%rbp)
  jns    L323
  movl   $0x1,-0x1c(%rbp)
  negl   -0x28(%rbp)
  jmp    L265
L323:
  movl   $0xffffffff,-0x1c(%rbp)
L265:
  cmpl   $0x0,-0x24(%rbp)
  jns    L95
  movl   $0x1,-0x18(%rbp)
  negl   -0x24(%rbp)
  jmp    L173
L95:
  movl   $0xffffffff,-0x18(%rbp)
L173:
  mov    -0x28(%rbp),%eax
  mov    %eax,%edi
  call   <abs@plt>
  mov    %rax,%rbx
  mov    -0x24(%rbp),%eax
  mov    %eax,%edi
  call   <abs@plt>
  cmp    %rax,%rbx
  jl     L187
  mov    -0x28(%rbp),%eax
  cltd
  shr    $0x1f,%edx
  add    %edx,%eax
  and    $0x1,%eax
  sub    %edx,%eax
  cmp    $0x1,%eax
  jne    L333
  movl   $0x1,-0x14(%rbp)
  jmp    L291
L333:
  movl   $0x2,-0x14(%rbp)
L291:
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x38(%rbp),%esi
  mov    -0x34(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x40(%rbp),%esi
  mov    -0x3c(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  movl   $0x2,-0x14(%rbp)
  mov    -0x24(%rbp),%eax
  add    %eax,%eax
  sub    -0x28(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  jmp    L24
L193:
  cmpl   $0x0,-0x20(%rbp)
  js     L136
  mov    -0x18(%rbp),%eax
  add    %eax,-0x38(%rbp)
  mov    -0x18(%rbp),%eax
  sub    %eax,-0x40(%rbp)
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  add    %eax,%eax
  add    %eax,-0x20(%rbp)
  jmp    L270
L136:
  mov    -0x24(%rbp),%eax
  add    %eax,%eax
  add    %eax,-0x20(%rbp)
L270:
  mov    -0x1c(%rbp),%eax
  add    %eax,-0x34(%rbp)
  mov    -0x1c(%rbp),%eax
  sub    %eax,-0x3c(%rbp)
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x38(%rbp),%esi
  mov    -0x34(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x40(%rbp),%esi
  mov    -0x3c(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  addl   $0x2,-0x14(%rbp)
L24:
  mov    -0x14(%rbp),%eax
  cmp    -0x28(%rbp),%eax
  jl     L193
  mov    -0x28(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  jne    L71
  cmpl   $0x0,-0x20(%rbp)
  js     L184
  mov    -0x18(%rbp),%eax
  add    %eax,-0x38(%rbp)
L184:
  mov    -0x1c(%rbp),%eax
  add    %eax,-0x34(%rbp)
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x38(%rbp),%esi
  mov    -0x34(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  jmp    L71
L187:
  mov    -0x24(%rbp),%eax
  cltd
  shr    $0x1f,%edx
  add    %edx,%eax
  and    $0x1,%eax
  sub    %edx,%eax
  cmp    $0x1,%eax
  jne    L76
  movl   $0x1,-0x14(%rbp)
  jmp    L61
L76:
  movl   $0x2,-0x14(%rbp)
L61:
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x38(%rbp),%esi
  mov    -0x34(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x40(%rbp),%esi
  mov    -0x3c(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  mov    -0x28(%rbp),%eax
  add    %eax,%eax
  sub    -0x24(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  jmp    L252
L343:
  cmpl   $0x0,-0x20(%rbp)
  js     L66
  mov    -0x1c(%rbp),%eax
  add    %eax,-0x34(%rbp)
  mov    -0x1c(%rbp),%eax
  sub    %eax,-0x3c(%rbp)
  mov    -0x28(%rbp),%eax
  sub    -0x24(%rbp),%eax
  add    %eax,%eax
  add    %eax,-0x20(%rbp)
  jmp    L108
L66:
  mov    -0x28(%rbp),%eax
  add    %eax,%eax
  add    %eax,-0x20(%rbp)
L108:
  mov    -0x18(%rbp),%eax
  add    %eax,-0x38(%rbp)
  mov    -0x18(%rbp),%eax
  sub    %eax,-0x40(%rbp)
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x38(%rbp),%esi
  mov    -0x34(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x40(%rbp),%esi
  mov    -0x3c(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  addl   $0x2,-0x14(%rbp)
L252:
  mov    -0x14(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jl     L343
  mov    -0x24(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  jne    L71
  cmpl   $0x0,-0x20(%rbp)
  js     L152
  mov    -0x1c(%rbp),%eax
  add    %eax,-0x34(%rbp)
L152:
  mov    -0x18(%rbp),%eax
  add    %eax,-0x38(%rbp)
  mov    -0x48(%rbp),%ecx
  mov    -0x44(%rbp),%edx
  mov    -0x38(%rbp),%esi
  mov    -0x34(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%edi
  call   <dot1@plt>
  jmp    L71
L132:
  nop
  jmp    L71
L393:
  nop
L71:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
void line(int x1, int y1, int x2, int y2, int r, int g, int b) {
  int dx, dy, p, s, st, n;
  dx = x1 - x2;
  dy = y1 - y2;
  if ((dx == 0) && (dy == 0)) {
    dot1(x1, y1, r, g, b);
    return;
  }
  if (dx == 0) {
    if (dy < 0) {
      for (p = y1; p <= y2; p++)
        dot1(x1, p, r, g, b);
    } else {
      for (p = y2; p <= y1; p++)
        dot1(x1, p, r, g, b);
    }
    return;
  }
  if (dy == 0) {
    if (dx < 0) {
      for (p = x1; p <= x2; p++)
        dot1(p, y1, r, g, b);
    } else {
      for (p = x2; p <= x1; p++)
        dot1(p, y1, r, g, b);
    }
    return;
  }
  if (abs(y1) > 1000)
    return;
  if (abs(y2) > 1000)
    return;
  if (dx < 0) {
    s = 1;
    dx = -dx;
  } else
    s = -1;
  if (dy < 0) {
    st = 1;
    dy = -dy;
  } else
    st = -1;
  if (abs(dx) >= abs(dy)) {
    if (dx % 2 == 1)
      n = 1;
    else
      n = 2;
    dot1(x1, y1, r, g, b);
    dot1(x2, y2, r, g, b);
    n = 2;
    p = 2 * dy - dx;
    while (n < dx) {
      if (p >= 0) {
        y1 = y1 + st;
        y2 = y2 - st;
        p = p + 2 * (dy - dx);
      } else
        p = p + 2 * dy;
      x1 = x1 + s;
      x2 = x2 - s;
      dot1(x1, y1, r, g, b);
      dot1(x2, y2, r, g, b);
      n = n + 2;
    }
    if (dx % 2 == 0) {
      if (p >= 0)
        y1 = y1 + st;
      x1 = x1 + s;
      dot1(x1, y1, r, g, b);
    }
  } else {
    if (dy % 2 == 1)
      n = 1;
    else
      n = 2;
    dot1(x1, y1, r, g, b);
    dot1(x2, y2, r, g, b);
    p = 2 * dx - dy;
    while (n < dy) {
      if (p >= 0) {
        x1 = x1 + s;
        x2 = x2 - s;
        p = p + 2 * (dx - dy);
      } else
        p = p + 2 * dx;
      y1 = y1 + st;
      y2 = y2 - st;
      dot1(x1, y1, r, g, b);
      dot1(x2, y2, r, g, b);
      n = n + 2;
    }
    if (dy % 2 == 0) {
      if (p >= 0)
        x1 = x1 + s;
      y1 = y1 + st;
      dot1(x1, y1, r, g, b);
    }
  }
}
```