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

```asm
<draw_korean>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x200,%rsp
  mov    %edi,-0x1f4(%rbp)
  mov    %esi,-0x1f8(%rbp)
  mov    %edx,-0x1fc(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x1e4(%rbp)
  mov    -0x1e4(%rbp),%eax
  add    $0x1300,%eax
  mov    %eax,-0x1e0(%rbp)
  mov    -0x1e0(%rbp),%eax
  add    $0xa80,%eax
  mov    %eax,-0x1dc(%rbp)
  movl   $0x0,-0x1d0(%rbp)
  movl   $0x0,-0x1cc(%rbp)
  movl   $0x0,-0x1c8(%rbp)
  movl   $0x0,-0x1c4(%rbp)
  movl   $0x0,-0x1c0(%rbp)
  movl   $0x0,-0x1bc(%rbp)
  movl   $0x0,-0x1b8(%rbp)
  movl   $0x0,-0x1b4(%rbp)
  movl   $0x1,-0x1b0(%rbp)
  movl   $0x3,-0x1ac(%rbp)
  movl   $0x3,-0x1a8(%rbp)
  movl   $0x3,-0x1a4(%rbp)
  movl   $0x1,-0x1a0(%rbp)
  movl   $0x2,-0x19c(%rbp)
  movl   $0x4,-0x198(%rbp)
  movl   $0x4,-0x194(%rbp)
  movl   $0x4,-0x190(%rbp)
  movl   $0x2,-0x18c(%rbp)
  movl   $0x1,-0x188(%rbp)
  movl   $0x3,-0x184(%rbp)
  movl   $0x0,-0x180(%rbp)
  movl   $0x0,-0x170(%rbp)
  movl   $0x2,-0x16c(%rbp)
  movl   $0x0,-0x168(%rbp)
  movl   $0x2,-0x164(%rbp)
  movl   $0x1,-0x160(%rbp)
  movl   $0x2,-0x15c(%rbp)
  movl   $0x1,-0x158(%rbp)
  movl   $0x2,-0x154(%rbp)
  movl   $0x3,-0x150(%rbp)
  movl   $0x0,-0x14c(%rbp)
  movl   $0x2,-0x148(%rbp)
  movl   $0x1,-0x144(%rbp)
  movl   $0x3,-0x140(%rbp)
  movl   $0x3,-0x13c(%rbp)
  movl   $0x1,-0x138(%rbp)
  movl   $0x2,-0x134(%rbp)
  movl   $0x1,-0x130(%rbp)
  movl   $0x3,-0x12c(%rbp)
  movl   $0x3,-0x128(%rbp)
  movl   $0x1,-0x124(%rbp)
  movl   $0x1,-0x120(%rbp)
  movl   $0xffffffff,-0x1ec(%rbp)
  movl   $0xffffffff,-0x1d8(%rbp)
  movl   $0xffffffff,-0x1d4(%rbp)
  movq   $0x0,-0x110(%rbp)
  movq   $0x0,-0x108(%rbp)
  movq   $0x0,-0x100(%rbp)
  movq   $0x0,-0xf8(%rbp)
  movq   $0x0,-0xf0(%rbp)
  movq   $0x0,-0xe8(%rbp)
  movq   $0x0,-0xe0(%rbp)
  movq   $0x0,-0xd8(%rbp)
  movq   $0x0,-0xd0(%rbp)
  movq   $0x0,-0xc8(%rbp)
  movq   $0x0,-0xc0(%rbp)
  movq   $0x0,-0xb8(%rbp)
  movq   $0x0,-0xb0(%rbp)
  movq   $0x0,-0xa8(%rbp)
  movq   $0x0,-0xa0(%rbp)
  movq   $0x0,-0x98(%rbp)
  movq   $0x0,-0x90(%rbp)
  movq   $0x0,-0x88(%rbp)
  movq   $0x0,-0x80(%rbp)
  movq   $0x0,-0x78(%rbp)
  movq   $0x0,-0x70(%rbp)
  movq   $0x0,-0x68(%rbp)
  movq   $0x0,-0x60(%rbp)
  movq   $0x0,-0x58(%rbp)
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x48(%rbp)
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  mov    -0x1f8(%rbp),%eax
  cltq
  mov    -0x1d0(%rbp,%rax,4),%eax
  mov    %eax,-0x1ec(%rbp)
  cmpl   $0x0,-0x1fc(%rbp)
  je     L208
  cmpl   $0x0,-0x1ec(%rbp)
  jne    L101
  movl   $0x5,-0x1ec(%rbp)
  jmp    L208
L101:
  cmpl   $0x1,-0x1ec(%rbp)
  jne    L115
  movl   $0x6,-0x1ec(%rbp)
  jmp    L208
L115:
  cmpl   $0x2,-0x1ec(%rbp)
  jne    L83
  movl   $0x6,-0x1ec(%rbp)
  jmp    L208
L83:
  cmpl   $0x3,-0x1ec(%rbp)
  jne    L96
  movl   $0x7,-0x1ec(%rbp)
  jmp    L208
L96:
  cmpl   $0x4,-0x1ec(%rbp)
  jne    L208
  movl   $0x7,-0x1ec(%rbp)
L208:
  cmpl   $0x0,-0x1f4(%rbp)
  je     L193
  cmpl   $0x10,-0x1f4(%rbp)
  je     L193
  mov    $0x1,%eax
  jmp    L199
L193:
  mov    $0x0,%eax
L199:
  mov    %eax,-0x1d8(%rbp)
  cmpl   $0x0,-0x1fc(%rbp)
  je     L141
  mov    $0x2,%eax
  jmp    L7
L141:
  mov    $0x0,%eax
L7:
  add    %eax,-0x1d8(%rbp)
  mov    -0x1f8(%rbp),%eax
  cltq
  mov    -0x170(%rbp,%rax,4),%eax
  mov    %eax,-0x1d4(%rbp)
  mov    -0x1ec(%rbp),%eax
  imul   $0x260,%eax,%edx
  mov    -0x1e4(%rbp),%eax
  add    %eax,%edx
  mov    -0x1f4(%rbp),%eax
  shl    $0x5,%eax
  add    %eax,%edx
  lea    -0x110(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <mask_32byte@plt>
  mov    -0x1d8(%rbp),%eax
  imul   $0x2a0,%eax,%edx
  mov    -0x1e0(%rbp),%eax
  add    %eax,%edx
  mov    -0x1f8(%rbp),%eax
  shl    $0x5,%eax
  add    %eax,%edx
  lea    -0x110(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <mask_32byte@plt>
  cmpl   $0x0,-0x1fc(%rbp)
  je     L47
  mov    -0x1d4(%rbp),%eax
  imul   $0x360,%eax,%edx
  mov    -0x1dc(%rbp),%eax
  add    %eax,%edx
  mov    -0x1fc(%rbp),%eax
  sub    $0x1,%eax
  shl    $0x5,%eax
  add    %eax,%edx
  lea    -0x110(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <mask_32byte@plt>
L47:
  movl   $0x0,-0x1e8(%rbp)
  jmp    L178
L204:
  mov    -0x1e8(%rbp),%eax
  cltq
  movzbl -0x110(%rbp,%rax,1),%eax
  cmp    $0x1,%al
  jne    L39
  lea    D8(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L173
L39:
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L173:
  mov    -0x1e8(%rbp),%eax
  cltd
  shr    $0x1c,%edx
  add    %edx,%eax
  and    $0xf,%eax
  sub    %edx,%eax
  cmp    $0xf,%eax
  jne    L40
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L40:
  addl   $0x1,-0x1e8(%rbp)
L178:
  cmpl   $0xff,-0x1e8(%rbp)
  jle    L204
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L139
  call   <__stack_chk_fail@plt>
L139:
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D8
type_infered: string
name: parse_data
arguments: label: D22
type_infered: string
name: parse_data
arguments: label: D23
type_infered: string

tool: D8:  *

tool: D22:   

tool: D23: 


assistant: ```c
void draw_korean(int cho, int jung, int jong) {
  int CHO_IDX = 0;
  int JUNG_IDX = CHO_IDX + 32 * 19 * 8;
  int JONG_IDX = JUNG_IDX + 32 * 21 * 4;
  int CHO_MAP[] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 1, 2, 4, 4, 4, 2, 1, 3, 0};
  int JONG_MAP[] = {0, 2, 0, 2, 1, 2, 1, 2, 3, 0, 2, 1, 3, 3, 1, 2, 1, 3, 3, 1, 1};
  int CHO_TYPE = -1;
  int JUNG_TYPE = -1;
  int JONG_TYPE = -1;
  char out[256] = {
      0,
  };
  int i;
  CHO_TYPE = CHO_MAP[jung];
  if (jong != 0) {
    if (CHO_TYPE == 0)
      CHO_TYPE = 5;
    else if (CHO_TYPE == 1)
      CHO_TYPE = 6;
    else if (CHO_TYPE == 2)
      CHO_TYPE = 6;
    else if (CHO_TYPE == 3)
      CHO_TYPE = 7;
    else if (CHO_TYPE == 4)
      CHO_TYPE = 7;
  }
  JUNG_TYPE = (cho == 0 || cho == 16) ? 0 : 1;
  JUNG_TYPE += (jong != 0) ? 2 : 0;
  JONG_TYPE = JONG_MAP[jung];
  mask_32byte(out, CHO_IDX + (32 * 19 * CHO_TYPE) + (32 * cho));
  mask_32byte(out, JUNG_IDX + (32 * 21 * JUNG_TYPE) + (32 * jung));
  if (jong != 0)
    mask_32byte(out, JONG_IDX + (32 * 27 * JONG_TYPE) + (32 * (jong - 1)));
  for (i = 0; i < 256; i++) {
    if (out[i] == 1)
      printf(" *");
    else
      printf("  ");
    if (i % 16 == 15)
      printf("\n");
  }
}
```