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

```asm
<pick_best_visual_of_class>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x68(%rbp)
  mov    %esi,-0x6c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x68(%rbp),%rax
  mov    %rax,%rdi
  call   <DisplayOfScreen@plt>
  mov    %rax,-0x48(%rbp)
  mov    -0x6c(%rbp),%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x68(%rbp),%rax
  mov    %rax,%rdi
  call   <screen_number@plt>
  mov    %eax,-0x10(%rbp)
  mov    D18(%rip),%rax
  mov    (%rax),%edx
  mov    D13(%rip),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  or     %eax,%esi
  lea    -0x54(%rbp),%rcx
  lea    -0x30(%rbp),%rdx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <XGetVisualInfo@plt>
  mov    %rax,-0x40(%rbp)
  cmpq   $0x0,-0x40(%rbp)
  je     L1
  mov    -0x54(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x50(%rbp),%eax
  mov    %eax,-0x4c(%rbp)
  jmp    L32
L6:
  mov    -0x50(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    0x8(%rax),%rcx
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    0x8(%rax),%rax
  cmp    %rax,%rcx
  jg     L30
  mov    -0x50(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    0x8(%rax),%rcx
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    0x8(%rax),%rax
  cmp    %rax,%rcx
  jne    L61
  mov    -0x50(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    0x10(%rax),%rcx
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    0x10(%rax),%rax
  cmp    %rax,%rcx
  jle    L61
L30:
  mov    -0x50(%rbp),%eax
  mov    %eax,-0x4c(%rbp)
L61:
  subl   $0x1,-0x50(%rbp)
L32:
  cmpl   $0x0,-0x50(%rbp)
  jns    L6
  mov    -0x54(%rbp),%eax
  cmp    %eax,-0x4c(%rbp)
  jge    L97
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    0x18(%rax),%rax
  jmp    L27
L97:
  mov    $0x0,%eax
L27:
  mov    %rax,-0x38(%rbp)
  mov    -0x40(%rbp),%rax
  mov    %rax,%rdi
  call   <XFree@plt>
  mov    -0x38(%rbp),%rax
  jmp    L4
L1:
  mov    $0x0,%eax
L4:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L33
  call   <__stack_chk_fail@plt>
L33:
  leave
  ret
```

assistant: ```c
Visual *pick_best_visual_of_class(Screen *screen, int visual_class) {
  Display *dpy = DisplayOfScreen(screen);
  XVisualInfo vi_in, *vi_out;
  int out_count;
  vi_in.class = visual_class;
  vi_in.screen = screen_number(screen);
  vi_out = XGetVisualInfo(dpy, (VisualClassMask | VisualScreenMask), &vi_in, &out_count);
  if (vi_out) {
    int i, best;
    Visual *visual;
    for (i = out_count - 1, best = i; i >= 0; i--)
      if ((vi_out[i].depth > vi_out[best].depth) || ((vi_out[i].depth == vi_out[best].depth) && (vi_out[i].colormap_size > vi_out[best].colormap_size)))
        best = i;
    visual = (best < out_count ? vi_out[best].visual : 0);
    XFree((char *)vi_out);
    return visual;
  } else
    return 0;
}
```