user: 请从给定的汇编指令推导出C源代码:

```asm
<parlcd_hx8357_init>:
  endbr64
  push   %rbx
  mov    %rdi,%rbx
  mov    $0x1,%esi
  call   <parlcd_write_cmd@plt>
  mov    $0x1e,%edi
  call   <parlcd_delay@plt>
  mov    $0xb9,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_cmd@plt>
  mov    $0xff,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x83,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x57,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x32,%edi
  call   <parlcd_delay@plt>
  mov    $0xb6,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_cmd@plt>
  mov    $0x52,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x11,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_cmd@plt>
  mov    $0xc8,%edi
  call   <parlcd_delay@plt>
  mov    $0x35,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_cmd@plt>
  mov    $0x0,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x3a,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_cmd@plt>
  mov    $0x55,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0xb1,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_cmd@plt>
  mov    $0x0,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x15,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0xd,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0xd,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x83,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x48,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0xc0,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_cmd@plt>
  mov    $0x24,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x24,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x3c,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0xc8,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x8,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0xb4,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_cmd@plt>
  mov    $0x2,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x40,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x0,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x2a,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x2a,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0xd,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x4f,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0xe0,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_cmd@plt>
  mov    $0x0,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x15,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x1d,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x2a,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x31,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x42,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x4c,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x53,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x45,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x40,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x3b,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x32,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x2e,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x28,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x24,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x3,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x0,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x15,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x1d,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x2a,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x31,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x42,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x4c,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x53,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x45,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x40,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x3b,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x32,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x2e,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x28,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x24,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x3,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x0,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x36,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_cmd@plt>
  mov    $0xe8,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_data@plt>
  mov    $0x14,%edi
  call   <parlcd_delay@plt>
  mov    $0x21,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_cmd@plt>
  mov    $0x14,%edi
  call   <parlcd_delay@plt>
  mov    $0x29,%esi
  mov    %rbx,%rdi
  call   <parlcd_write_cmd@plt>
  mov    $0x78,%edi
  call   <parlcd_delay@plt>
  pop    %rbx
  ret
```

assistant: ```c
void parlcd_hx8357_init(unsigned char *parlcd_mem_base) {
  parlcd_write_cmd(parlcd_mem_base, 0x1);
  parlcd_delay(30);
  parlcd_write_cmd(parlcd_mem_base, 0xB9);
  parlcd_write_data(parlcd_mem_base, 0xFF);
  parlcd_write_data(parlcd_mem_base, 0x83);
  parlcd_write_data(parlcd_mem_base, 0x57);
  parlcd_delay(50);
  parlcd_write_cmd(parlcd_mem_base, 0xB6);
  parlcd_write_data(parlcd_mem_base, 0x52);
  parlcd_write_cmd(parlcd_mem_base, 0x11);
  parlcd_delay(200);
  parlcd_write_cmd(parlcd_mem_base, 0x35);
  parlcd_write_data(parlcd_mem_base, 0x00);
  parlcd_write_cmd(parlcd_mem_base, 0x3A);
  parlcd_write_data(parlcd_mem_base, 0x55);
  parlcd_write_cmd(parlcd_mem_base, 0xB1);
  parlcd_write_data(parlcd_mem_base, 0x00);
  parlcd_write_data(parlcd_mem_base, 0x15);
  parlcd_write_data(parlcd_mem_base, 0x0D);
  parlcd_write_data(parlcd_mem_base, 0x0D);
  parlcd_write_data(parlcd_mem_base, 0x83);
  parlcd_write_data(parlcd_mem_base, 0x48);
  parlcd_write_cmd(parlcd_mem_base, 0xC0);
  parlcd_write_data(parlcd_mem_base, 0x24);
  parlcd_write_data(parlcd_mem_base, 0x24);
  parlcd_write_data(parlcd_mem_base, 0x01);
  parlcd_write_data(parlcd_mem_base, 0x3C);
  parlcd_write_data(parlcd_mem_base, 0xC8);
  parlcd_write_data(parlcd_mem_base, 0x08);
  parlcd_write_cmd(parlcd_mem_base, 0xB4);
  parlcd_write_data(parlcd_mem_base, 0x02);
  parlcd_write_data(parlcd_mem_base, 0x40);
  parlcd_write_data(parlcd_mem_base, 0x00);
  parlcd_write_data(parlcd_mem_base, 0x2A);
  parlcd_write_data(parlcd_mem_base, 0x2A);
  parlcd_write_data(parlcd_mem_base, 0x0D);
  parlcd_write_data(parlcd_mem_base, 0x4F);
  parlcd_write_cmd(parlcd_mem_base, 0xE0);
  parlcd_write_data(parlcd_mem_base, 0x00);
  parlcd_write_data(parlcd_mem_base, 0x15);
  parlcd_write_data(parlcd_mem_base, 0x1D);
  parlcd_write_data(parlcd_mem_base, 0x2A);
  parlcd_write_data(parlcd_mem_base, 0x31);
  parlcd_write_data(parlcd_mem_base, 0x42);
  parlcd_write_data(parlcd_mem_base, 0x4C);
  parlcd_write_data(parlcd_mem_base, 0x53);
  parlcd_write_data(parlcd_mem_base, 0x45);
  parlcd_write_data(parlcd_mem_base, 0x40);
  parlcd_write_data(parlcd_mem_base, 0x3B);
  parlcd_write_data(parlcd_mem_base, 0x32);
  parlcd_write_data(parlcd_mem_base, 0x2E);
  parlcd_write_data(parlcd_mem_base, 0x28);
  parlcd_write_data(parlcd_mem_base, 0x24);
  parlcd_write_data(parlcd_mem_base, 0x03);
  parlcd_write_data(parlcd_mem_base, 0x00);
  parlcd_write_data(parlcd_mem_base, 0x15);
  parlcd_write_data(parlcd_mem_base, 0x1D);
  parlcd_write_data(parlcd_mem_base, 0x2A);
  parlcd_write_data(parlcd_mem_base, 0x31);
  parlcd_write_data(parlcd_mem_base, 0x42);
  parlcd_write_data(parlcd_mem_base, 0x4C);
  parlcd_write_data(parlcd_mem_base, 0x53);
  parlcd_write_data(parlcd_mem_base, 0x45);
  parlcd_write_data(parlcd_mem_base, 0x40);
  parlcd_write_data(parlcd_mem_base, 0x3B);
  parlcd_write_data(parlcd_mem_base, 0x32);
  parlcd_write_data(parlcd_mem_base, 0x2E);
  parlcd_write_data(parlcd_mem_base, 0x28);
  parlcd_write_data(parlcd_mem_base, 0x24);
  parlcd_write_data(parlcd_mem_base, 0x03);
  parlcd_write_data(parlcd_mem_base, 0x00);
  parlcd_write_data(parlcd_mem_base, 0x01);
  parlcd_write_cmd(parlcd_mem_base, 0x36);
  parlcd_write_data(parlcd_mem_base, 0xE8);
  parlcd_delay(20);
  parlcd_write_cmd(parlcd_mem_base, 0x21);
  parlcd_delay(20);
  parlcd_write_cmd(parlcd_mem_base, 0x29);
  parlcd_delay(120);
}
```