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

```asm
<draw_color>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x4(%rbp)
  mov    %esi,-0x8(%rbp)
  mov    %ecx,%eax
  mov    %r8d,%ecx
  mov    %dl,-0xc(%rbp)
  mov    %al,-0x10(%rbp)
  mov    %ecx,%eax
  mov    %al,-0x14(%rbp)
  mov    -0x8(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L13
  movsbl -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x20184e60,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0x10(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x20184e61,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0xc(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x20184e62,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x201cb370,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0x10(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x201cb371,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0xc(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x201cb372,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x20282160,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0x10(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x20282161,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0xc(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x20282162,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x202c8670,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0x10(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x202c8671,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0xc(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x202c8672,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
L13:
  mov    -0x8(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L11
  movsbl -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x202118e0,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0x10(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x202118e1,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0xc(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x202118e2,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x20249cf0,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0x10(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x20249cf1,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
  movsbl -0xc(%rbp),%eax
  mov    -0x4(%rbp),%edx
  add    $0x20249cf2,%edx
  mov    %eax,%esi
  mov    %edx,%edi
  call   <write_byte@plt>
L11:
  nop
  leave
  ret
```

assistant: ```c
void draw_color(int offset, int screen, char r, char g, char b) {
  if (screen & 1) {
    write_byte(offset + 0x20184E60, b);
    write_byte(offset + 0x20184E60 + 1, g);
    write_byte(offset + 0x20184E60 + 2, r);
    write_byte(offset + 0x201CB370, b);
    write_byte(offset + 0x201CB370 + 1, g);
    write_byte(offset + 0x201CB370 + 2, r);
    write_byte(offset + 0x20282160, b);
    write_byte(offset + 0x20282160 + 1, g);
    write_byte(offset + 0x20282160 + 2, r);
    write_byte(offset + 0x202C8670, b);
    write_byte(offset + 0x202C8670 + 1, g);
    write_byte(offset + 0x202C8670 + 2, r);
  }
  if (screen & 2) {
    write_byte(offset + 0x202118E0, b);
    write_byte(offset + 0x202118E0 + 1, g);
    write_byte(offset + 0x202118E0 + 2, r);
    write_byte(offset + 0X20249CF0, b);
    write_byte(offset + 0X20249CF0 + 1, g);
    write_byte(offset + 0X20249CF0 + 2, r);
  }
}
```