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

```asm
<vp8_blit_text>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x150,%rsp
  mov    %rdi,-0x138(%rbp)
  mov    %rsi,-0x140(%rbp)
  mov    %edx,-0x144(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x140(%rbp),%rax
  mov    %rax,-0x118(%rbp)
  lea    -0x110(%rbp),%rax
  lea    D5(%rip),%rdx
  mov    $0x20,%ecx
  mov    %rax,%rdi
  mov    %rdx,%rsi
  rep movsq %ds:(%rsi),%es:(%rdi)
  mov    %rsi,%rdx
  mov    %rdi,%rax
  mov    (%rdx),%ecx
  mov    %ecx,(%rax)
  movl   $0x0,-0x124(%rbp)
  jmp    L104
L86:
  mov    -0x124(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x138(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x129(%rbp)
  cmpb   $0x5a,-0x129(%rbp)
  jg     L17
  cmpb   $0x1f,-0x129(%rbp)
  jle    L17
  movsbl -0x129(%rbp),%eax
  sub    $0x20,%eax
  cltq
  mov    -0x110(%rbp,%rax,4),%eax
  mov    %eax,-0x128(%rbp)
  jmp    L56
L17:
  cmpb   $0x7a,-0x129(%rbp)
  jg     L39
  cmpb   $0x60,-0x129(%rbp)
  jle    L39
  movsbl -0x129(%rbp),%eax
  sub    $0x40,%eax
  cltq
  mov    -0x110(%rbp,%rax,4),%eax
  mov    %eax,-0x128(%rbp)
  jmp    L56
L39:
  mov    -0x110(%rbp),%eax
  mov    %eax,-0x128(%rbp)
L56:
  movl   $0x6,-0x120(%rbp)
  jmp    L27
L32:
  movl   $0x0,-0x11c(%rbp)
  jmp    L48
L88:
  mov    -0x120(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  mov    -0x128(%rbp),%edx
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    -0x11c(%rbp),%eax
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L29
  mov    $0xffffffff,%edx
  jmp    L1
L29:
  mov    $0x0,%edx
L1:
  mov    -0x11c(%rbp),%eax
  imul   -0x144(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x120(%rbp),%eax
  add    %ecx,%eax
  movslq %eax,%rcx
  mov    -0x118(%rbp),%rax
  add    %rcx,%rax
  mov    %dl,(%rax)
  addl   $0x1,-0x11c(%rbp)
L48:
  cmpl   $0x4,-0x11c(%rbp)
  jle    L88
  subl   $0x1,-0x120(%rbp)
L27:
  cmpl   $0x0,-0x120(%rbp)
  jns    L32
  addq   $0x7,-0x118(%rbp)
  addl   $0x1,-0x124(%rbp)
L104:
  mov    -0x124(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x138(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L86
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L110
  call   <__stack_chk_fail@plt>
L110:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D5
type_guessed: string

tool: 

assistant: ```c
void vp8_blit_text(const char *msg, unsigned char *address, const int pitch) {
  int letter_bitmap;
  unsigned char *output_pos = address;
  int colpos;
  const int font[] = {0x0, 0x5C00, 0x8020, 0xAFABEA, 0xD7EC0, 0x1111111, 0x1855740, 0x18000, 0x45C0, 0x74400, 0x51140, 0x23880, 0xC4000, 0x21080, 0x80000, 0x111110, 0xE9D72E, 0x87E40, 0x12AD732, 0xAAD62A, 0x4F94C4, 0x4D6B7, 0x456AA, 0x3E8423, 0xAAD6AA, 0xAAD6A2, 0x2800, 0x2A00, 0x8A880, 0x52940, 0x22A20, 0x15422, 0x6AD62E, 0x1E4A53E, 0xAAD6BF, 0x8C62E, 0xE8C63F, 0x118D6BF, 0x1094BF, 0xCAC62E, 0x1F2109F, 0x118FE31, 0xF8C628, 0x8A89F, 0x108421F, 0x1F1105F, 0x1F4105F, 0xE8C62E, 0x2294BF, 0x164C62E, 0x12694BF, 0x8AD6A2, 0x10FC21, 0x1F8421F, 0x744107, 0xF8220F, 0x1151151, 0x117041, 0x119D731, 0x47E0, 0x1041041, 0xFC400, 0x10440, 0x1084210, 0x820};
  colpos = 0;
  while (msg[colpos] != 0) {
    char letter = msg[colpos];
    int fontcol, fontrow;
    if (letter <= 'Z' && letter >= ' ')
      letter_bitmap = font[letter - ' '];
    else if (letter <= 'z' && letter >= 'a')
      letter_bitmap = font[letter - 'a' + 'A' - ' '];
    else
      letter_bitmap = font[0];
    for (fontcol = 6; fontcol >= 0; fontcol--)
      for (fontrow = 0; fontrow < 5; fontrow++)
        output_pos[fontrow * pitch + fontcol] = ((letter_bitmap >> (fontcol * 5)) & (1 << fontrow) ? 255 : 0);
    output_pos += 7;
    colpos++;
  }
}
```