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

```asm
<Draw_Mark>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %edx,-0x20(%rbp)
  mov    %ecx,-0x24(%rbp)
  mov    %r8d,-0x28(%rbp)
  mov    %r9d,-0x2c(%rbp)
  mov    -0x1c(%rbp),%eax
  sub    $0x4,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x20(%rbp),%eax
  sub    $0x4,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x1c(%rbp),%eax
  add    $0x4,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x20(%rbp),%eax
  add    $0x4,%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0x0,-0x1c(%rbp)
  js     L102
  mov    -0x1c(%rbp),%eax
  cmp    %eax,-0x28(%rbp)
  jbe    L102
  cmpl   $0x0,-0x20(%rbp)
  js     L102
  mov    -0x20(%rbp),%eax
  cmp    %eax,-0x2c(%rbp)
  jbe    L102
  cmpl   $0x0,-0x10(%rbp)
  jns    L21
  movl   $0x0,-0x10(%rbp)
L21:
  cmpl   $0x0,-0xc(%rbp)
  jns    L62
  movl   $0x0,-0xc(%rbp)
L62:
  mov    -0x8(%rbp),%eax
  cmp    %eax,-0x28(%rbp)
  ja     L24
  mov    -0x28(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x8(%rbp)
L24:
  mov    -0x4(%rbp),%eax
  cmp    %eax,-0x2c(%rbp)
  ja     L79
  mov    -0x2c(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x4(%rbp)
L79:
  cmpl   $0x1,-0x20(%rbp)
  jle    L42
  mov    -0x20(%rbp),%eax
  lea    -0x1(%rax),%r9d
  mov    -0x20(%rbp),%eax
  lea    -0x1(%rax),%ecx
  mov    -0x8(%rbp),%r8d
  mov    -0x10(%rbp),%edx
  mov    -0x28(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x24(%rbp),%edi
  push   %rdi
  mov    %rax,%rdi
  call   <Draw_HV_Line@plt>
  add    $0x10,%rsp
L42:
  mov    -0x2c(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x20(%rbp),%eax
  cmp    %eax,%edx
  jbe    L101
  mov    -0x20(%rbp),%eax
  lea    0x1(%rax),%r9d
  mov    -0x20(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0x8(%rbp),%r8d
  mov    -0x10(%rbp),%edx
  mov    -0x28(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x24(%rbp),%edi
  push   %rdi
  mov    %rax,%rdi
  call   <Draw_HV_Line@plt>
  add    $0x10,%rsp
L101:
  cmpl   $0x1,-0x1c(%rbp)
  jle    L50
  mov    -0x1c(%rbp),%eax
  lea    -0x1(%rax),%r10d
  mov    -0x1c(%rbp),%eax
  lea    -0x1(%rax),%edi
  mov    -0x4(%rbp),%r8d
  mov    -0xc(%rbp),%edx
  mov    -0x28(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x24(%rbp),%ecx
  push   %rcx
  mov    %r8d,%r9d
  mov    %r10d,%r8d
  mov    %edx,%ecx
  mov    %edi,%edx
  mov    %rax,%rdi
  call   <Draw_HV_Line@plt>
  add    $0x10,%rsp
L50:
  mov    -0x28(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x1c(%rbp),%eax
  cmp    %eax,%edx
  jbe    L47
  mov    -0x1c(%rbp),%eax
  lea    0x1(%rax),%r10d
  mov    -0x1c(%rbp),%eax
  lea    0x1(%rax),%edi
  mov    -0x4(%rbp),%r8d
  mov    -0xc(%rbp),%edx
  mov    -0x28(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x24(%rbp),%ecx
  push   %rcx
  mov    %r8d,%r9d
  mov    %r10d,%r8d
  mov    %edx,%ecx
  mov    %edi,%edx
  mov    %rax,%rdi
  call   <Draw_HV_Line@plt>
  add    $0x10,%rsp
L47:
  mov    -0x20(%rbp),%r8d
  mov    -0x8(%rbp),%edi
  mov    -0x20(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x28(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x0
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <Draw_HV_Line@plt>
  add    $0x10,%rsp
  mov    -0x4(%rbp),%r8d
  mov    -0x1c(%rbp),%edi
  mov    -0xc(%rbp),%ecx
  mov    -0x1c(%rbp),%edx
  mov    -0x28(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x0
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <Draw_HV_Line@plt>
  add    $0x10,%rsp
L102:
  nop
  leave
  ret
```

assistant: ```c
void Draw_Mark(unsigned char *Frame, int X, int Y, int Color, unsigned int Width, unsigned int Height) {
  int MinX = X - 4, MinY = Y - 4, MaxX = X + 4, MaxY = Y + 4;
  if (X >= 0 && X < Width && Y >= 0 && Y < Height) {
    if (MinX < 0)
      MinX = 0;
    if (MinY < 0)
      MinY = 0;
    if (MaxX >= Width)
      MaxX = Width - 1;
    if (MaxY >= Height)
      MaxY = Height - 1;
    if (Y > 1)
      Draw_HV_Line(Frame, Width, MinX, Y - 1, MaxX, Y - 1, Color);
    if (Y < Height - 1)
      Draw_HV_Line(Frame, Width, MinX, Y + 1, MaxX, Y + 1, Color);
    if (X > 1)
      Draw_HV_Line(Frame, Width, X - 1, MinY, X - 1, MaxY, Color);
    if (X < Width - 1)
      Draw_HV_Line(Frame, Width, X + 1, MinY, X + 1, MaxY, Color);
    Draw_HV_Line(Frame, Width, MinX, Y, MaxX, Y, 0);
    Draw_HV_Line(Frame, Width, X, MinY, X, MaxY, 0);
  }
}
```