user: 这段汇编代码用C语言表示是什么样的？

```asm
<GrOffScreen4BPPColorTranslate>:
  endbr64
  mov    %esi,%ecx
  mov    %rdi,%rax
  mov    %esi,%edi
  movzbl %ch,%edx
  movzbl 0x8(%rax),%r9d
  shr    $0x10,%edi
  movzbl %sil,%ecx
  mov    %edx,%r8d
  movzbl 0x7(%rax),%edx
  movzbl 0x6(%rax),%esi
  movzbl %dil,%edi
  sub    %edi,%r9d
  sub    %r8d,%edx
  imul   %r9d,%r9d
  sub    %ecx,%esi
  imul   %edx,%edx
  imul   %esi,%esi
  add    %r9d,%edx
  add    %esi,%edx
  cmp    $0xffffffff,%edx
  je     L95
  test   %edx,%edx
  je     L56
L95:
  movzbl 0xb(%rax),%esi
  movzbl 0xa(%rax),%r10d
  movzbl 0x9(%rax),%r9d
  sub    %edi,%esi
  sub    %r8d,%r10d
  imul   %esi,%esi
  sub    %ecx,%r9d
  imul   %r10d,%r10d
  imul   %r9d,%r9d
  add    %r10d,%esi
  add    %r9d,%esi
  xor    %r9d,%r9d
  cmp    %esi,%edx
  ja     L29
L396:
  test   %esi,%esi
  je     L84
  movzbl 0xe(%rax),%esi
  movzbl 0xd(%rax),%r11d
  movzbl 0xc(%rax),%r10d
  sub    %edi,%esi
  sub    %r8d,%r11d
  imul   %esi,%esi
  sub    %ecx,%r10d
  imul   %r11d,%r11d
  imul   %r10d,%r10d
  add    %r11d,%esi
  add    %r10d,%esi
  cmp    %esi,%edx
  ja     L300
L363:
  test   %esi,%esi
  je     L84
  movzbl 0x11(%rax),%esi
  movzbl 0x10(%rax),%r11d
  movzbl 0xf(%rax),%r10d
  sub    %edi,%esi
  sub    %r8d,%r11d
  imul   %esi,%esi
  sub    %ecx,%r10d
  imul   %r11d,%r11d
  imul   %r10d,%r10d
  add    %r11d,%esi
  add    %r10d,%esi
  cmp    %esi,%edx
  ja     L364
L157:
  test   %esi,%esi
  je     L84
  movzbl 0x14(%rax),%esi
  movzbl 0x13(%rax),%r11d
  movzbl 0x12(%rax),%r10d
  sub    %edi,%esi
  sub    %r8d,%r11d
  imul   %esi,%esi
  sub    %ecx,%r10d
  imul   %r11d,%r11d
  imul   %r10d,%r10d
  add    %r11d,%esi
  add    %r10d,%esi
  cmp    %esi,%edx
  ja     L267
L72:
  test   %esi,%esi
  je     L84
  movzbl 0x17(%rax),%esi
  movzbl 0x16(%rax),%r11d
  movzbl 0x15(%rax),%r10d
  sub    %edi,%esi
  sub    %r8d,%r11d
  imul   %esi,%esi
  sub    %ecx,%r10d
  imul   %r11d,%r11d
  imul   %r10d,%r10d
  add    %r11d,%esi
  add    %r10d,%esi
  cmp    %esi,%edx
  ja     L266
L182:
  test   %esi,%esi
  je     L84
  movzbl 0x1a(%rax),%esi
  movzbl 0x19(%rax),%r11d
  movzbl 0x18(%rax),%r10d
  sub    %edi,%esi
  sub    %r8d,%r11d
  imul   %esi,%esi
  sub    %ecx,%r10d
  imul   %r11d,%r11d
  imul   %r10d,%r10d
  add    %r11d,%esi
  add    %r10d,%esi
  cmp    %esi,%edx
  ja     L392
L227:
  test   %esi,%esi
  je     L84
  movzbl 0x1d(%rax),%esi
  movzbl 0x1c(%rax),%r11d
  movzbl 0x1b(%rax),%r10d
  sub    %edi,%esi
  sub    %r8d,%r11d
  imul   %esi,%esi
  sub    %ecx,%r10d
  imul   %r11d,%r11d
  imul   %r10d,%r10d
  add    %r11d,%esi
  add    %r10d,%esi
  cmp    %esi,%edx
  ja     L344
L230:
  test   %esi,%esi
  je     L84
  movzbl 0x20(%rax),%esi
  movzbl 0x1f(%rax),%r11d
  movzbl 0x1e(%rax),%r10d
  sub    %edi,%esi
  sub    %r8d,%r11d
  imul   %esi,%esi
  sub    %ecx,%r10d
  imul   %r11d,%r11d
  imul   %r10d,%r10d
  add    %r11d,%esi
  add    %r10d,%esi
  cmp    %esi,%edx
  ja     L271
L292:
  test   %esi,%esi
  je     L84
  movzbl 0x23(%rax),%esi
  movzbl 0x22(%rax),%r11d
  movzbl 0x21(%rax),%r10d
  sub    %edi,%esi
  sub    %r8d,%r11d
  imul   %esi,%esi
  sub    %ecx,%r10d
  imul   %r11d,%r11d
  imul   %r10d,%r10d
  add    %r11d,%esi
  add    %r10d,%esi
  cmp    %esi,%edx
  ja     L273
L69:
  test   %esi,%esi
  je     L84
  movzbl 0x26(%rax),%esi
  movzbl 0x25(%rax),%r11d
  movzbl 0x24(%rax),%r10d
  sub    %edi,%esi
  sub    %r8d,%r11d
  imul   %esi,%esi
  sub    %ecx,%r10d
  imul   %r11d,%r11d
  imul   %r10d,%r10d
  add    %r11d,%esi
  add    %r10d,%esi
  cmp    %esi,%edx
  ja     L383
L399:
  test   %esi,%esi
  je     L84
  movzbl 0x29(%rax),%esi
  movzbl 0x28(%rax),%r11d
  movzbl 0x27(%rax),%r10d
  sub    %edi,%esi
  sub    %r8d,%r11d
  imul   %esi,%esi
  sub    %ecx,%r10d
  imul   %r11d,%r11d
  imul   %r10d,%r10d
  add    %r11d,%esi
  add    %r10d,%esi
  cmp    %esi,%edx
  ja     L397
L346:
  test   %esi,%esi
  je     L84
  movzbl 0x2c(%rax),%esi
  movzbl 0x2b(%rax),%r11d
  movzbl 0x2a(%rax),%r10d
  sub    %edi,%esi
  sub    %r8d,%r11d
  imul   %esi,%esi
  sub    %ecx,%r10d
  imul   %r11d,%r11d
  imul   %r10d,%r10d
  add    %r11d,%esi
  add    %r10d,%esi
  cmp    %esi,%edx
  jbe    L355
  mov    %esi,%edx
  mov    $0xc,%r9d
L355:
  test   %esi,%esi
  je     L84
  movzbl 0x2f(%rax),%esi
  movzbl 0x2e(%rax),%r11d
  movzbl 0x2d(%rax),%r10d
  sub    %edi,%esi
  sub    %r8d,%r11d
  imul   %esi,%esi
  sub    %ecx,%r10d
  imul   %r11d,%r11d
  imul   %r10d,%r10d
  add    %r11d,%esi
  add    %r10d,%esi
  cmp    %esi,%edx
  jbe    L105
  mov    %esi,%edx
  mov    $0xd,%r9d
L105:
  test   %esi,%esi
  je     L84
  movzbl 0x32(%rax),%esi
  movzbl 0x31(%rax),%r11d
  movzbl 0x30(%rax),%r10d
  sub    %edi,%esi
  sub    %r8d,%r11d
  imul   %esi,%esi
  sub    %ecx,%r10d
  imul   %r11d,%r11d
  imul   %r10d,%r10d
  add    %r11d,%esi
  add    %r10d,%esi
  cmp    %esi,%edx
  jbe    L197
  mov    %esi,%edx
  mov    $0xe,%r9d
L197:
  test   %esi,%esi
  je     L84
  movzbl 0x35(%rax),%esi
  movzbl 0x34(%rax),%r10d
  sub    %edi,%esi
  movzbl 0x33(%rax),%edi
  sub    %r8d,%r10d
  imul   %esi,%esi
  imul   %r10d,%r10d
  sub    %ecx,%edi
  imul   %edi,%edi
  lea    (%rsi,%r10,1),%eax
  add    %edi,%eax
  cmp    %edx,%eax
  mov    $0xf,%eax
  cmovb  %eax,%r9d
L84:
  mov    %r9d,%eax
  ret
  nopl   0x0(%rax)
L29:
  mov    %esi,%edx
  mov    $0x1,%r9d
  jmp    L396
  nopl   (%rax)
L300:
  mov    %esi,%edx
  mov    $0x2,%r9d
  jmp    L363
  nopl   (%rax)
L364:
  mov    %esi,%edx
  mov    $0x3,%r9d
  jmp    L157
  nopl   (%rax)
L267:
  mov    %esi,%edx
  mov    $0x4,%r9d
  jmp    L72
  nopl   (%rax)
L266:
  mov    %esi,%edx
  mov    $0x5,%r9d
  jmp    L182
  nopl   (%rax)
L392:
  mov    %esi,%edx
  mov    $0x6,%r9d
  jmp    L227
  nopl   (%rax)
L344:
  mov    %esi,%edx
  mov    $0x7,%r9d
  jmp    L230
  nopl   (%rax)
L271:
  mov    %esi,%edx
  mov    $0x8,%r9d
  jmp    L292
  nopl   (%rax)
L273:
  mov    %esi,%edx
  mov    $0x9,%r9d
  jmp    L69
  nopl   (%rax)
L383:
  mov    %esi,%edx
  mov    $0xa,%r9d
  jmp    L399
  nopl   (%rax)
L397:
  mov    %esi,%edx
  mov    $0xb,%r9d
  jmp    L346
L56:
  xor    %r9d,%r9d
  jmp    L84
```

assistant: ```c
unsigned int GrOffScreen4BPPColorTranslate(void *pvDisplayData, unsigned int ulValue) {
  unsigned int ulIdx, ulDiff, ulMatchIdx, ulMatchDiff, ulR, ulG, ulB;
  unsigned char *pucPalette;
  ;
  pucPalette = (unsigned char *)pvDisplayData + 6;
  ulR = (ulValue >> 16) & 0xff;
  ulG = (ulValue >> 8) & 0xff;
  ulB = (ulValue >> 0) & 0xff;
  ulMatchIdx = 0;
  ulMatchDiff = 0xffffffff;
  for (ulIdx = 0; ulIdx < 16; ulIdx++, pucPalette += 3) {
    ulDiff = (((pucPalette[2] - ulR) * (pucPalette[2] - ulR)) + ((pucPalette[1] - ulG) * (pucPalette[1] - ulG)) + ((pucPalette[0] - ulB) * (pucPalette[0] - ulB)));
    if (ulDiff < ulMatchDiff) {
      ulMatchDiff = ulDiff;
      ulMatchIdx = ulIdx;
    }
    if (ulDiff == 0) {
      break;
    }
  }
  return (ulMatchIdx);
}
```