user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<rasterize_thumb_character>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %edi,%eax
  mov    %esi,-0x18(%rbp)
  mov    %edx,-0x1c(%rbp)
  mov    %rcx,-0x28(%rbp)
  mov    %r8d,-0x20(%rbp)
  mov    %r9d,%ecx
  mov    0x10(%rbp),%edx
  mov    %al,-0x14(%rbp)
  mov    %ecx,%eax
  mov    %al,-0x2c(%rbp)
  mov    %edx,%eax
  mov    %al,-0x30(%rbp)
  movb   $0x0,-0x1(%rbp)
  movzbl -0x14(%rbp),%eax
  cmp    $0xff,%eax
  je     L186
  cmp    $0xff,%eax
  jg     L86
  cmp    $0xb2,%eax
  je     L44
  cmp    $0xb2,%eax
  jg     L86
  cmp    $0xb1,%eax
  je     L189
  cmp    $0xb1,%eax
  jg     L86
  cmp    $0xb0,%eax
  je     L82
  cmp    $0xb0,%eax
  jg     L86
  test   %eax,%eax
  je     L186
  cmp    $0x20,%eax
  je     L186
  jmp    L86
L82:
  movsbl -0x30(%rbp),%esi
  movsbl -0x2c(%rbp),%eax
  mov    0x18(%rbp),%rdx
  mov    %rdx,%rcx
  mov    $0x3,%edx
  mov    %eax,%edi
  call   <get_color@plt>
  mov    %al,-0x1(%rbp)
  jmp    L131
L189:
  movsbl -0x30(%rbp),%esi
  movsbl -0x2c(%rbp),%eax
  mov    0x18(%rbp),%rdx
  mov    %rdx,%rcx
  mov    $0x2,%edx
  mov    %eax,%edi
  call   <get_color@plt>
  mov    %al,-0x1(%rbp)
  jmp    L131
L44:
  movsbl -0x30(%rbp),%esi
  movsbl -0x2c(%rbp),%eax
  mov    0x18(%rbp),%rdx
  mov    %rdx,%rcx
  mov    $0x1,%edx
  mov    %eax,%edi
  call   <get_color@plt>
  mov    %al,-0x1(%rbp)
  jmp    L131
L186:
  movsbl -0x30(%rbp),%esi
  movsbl -0x2c(%rbp),%eax
  mov    0x18(%rbp),%rdx
  mov    %rdx,%rcx
  mov    $0x4,%edx
  mov    %eax,%edi
  call   <get_color@plt>
  mov    %al,-0x1(%rbp)
  jmp    L131
L86:
  movsbl -0x30(%rbp),%esi
  movsbl -0x2c(%rbp),%eax
  mov    0x18(%rbp),%rdx
  mov    %rdx,%rcx
  mov    $0x0,%edx
  mov    %eax,%edi
  call   <get_color@plt>
  mov    %al,-0x1(%rbp)
  nop
L131:
  movzbl -0x14(%rbp),%eax
  mov    %eax,%edi
  call   <is_top@plt>
  test   %rax,%rax
  je     L78
  mov    -0x1c(%rbp),%eax
  imul   -0x20(%rbp),%eax
  lea    (%rax,%rax,1),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x1(%rbp),%eax
  mov    %al,(%rdx)
  jmp    L7
L78:
  mov    -0x1c(%rbp),%eax
  imul   -0x20(%rbp),%eax
  lea    (%rax,%rax,1),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x30(%rbp),%eax
  mov    %al,(%rdx)
L7:
  movzbl -0x14(%rbp),%eax
  mov    %eax,%edi
  call   <is_bottom@plt>
  test   %rax,%rax
  je     L57
  mov    -0x1c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  imul   -0x20(%rbp),%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x1(%rbp),%eax
  mov    %al,(%rdx)
  jmp    L27
L57:
  mov    -0x1c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  imul   -0x20(%rbp),%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x30(%rbp),%eax
  mov    %al,(%rdx)
L27:
  nop
  leave
  ret
```

assistant: ```c
void rasterize_thumb_character(unsigned char ch, int x, int y, char *framebuf, int width, char fgindex, char bgindex, struct font_info *fi) {
  unsigned char color = 0;
  switch (ch) {
  case 0xb0:
    color = get_color(fgindex, bgindex, 3, fi);
    break;
  case 0xb1:
    color = get_color(fgindex, bgindex, 2, fi);
    break;
  case 0xb2:
    color = get_color(fgindex, bgindex, 1, fi);
    break;
  case 0:
  case 255:
  case ' ':
    color = get_color(fgindex, bgindex, 4, fi);
    break;
  default:
    color = get_color(fgindex, bgindex, 0, fi);
    break;
  }
  if (is_top(ch))
    framebuf[(y * 2) * width + x] = color;
  else
    framebuf[(y * 2) * width + x] = bgindex;
  if (is_bottom(ch))
    framebuf[(y * 2 + 1) * width + x] = color;
  else
    framebuf[(y * 2 + 1) * width + x] = bgindex;
}
```