user: 下面的汇编指令对应的C源代码是什么：

```asm
<disp7s>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %esi,%r13d
  mov    %edx,%r14d
  mov    %ecx,0x8(%rsp)
  mov    0x70(%rsp),%eax
  movss  %xmm0,0xc(%rsp)
  mov    %fs:0x28,%rdx
  mov    %rdx,0x28(%rsp)
  xor    %edx,%edx
  movabs $0xa4ded674b6ba24ee,%rsi
  mov    %rsi,0x1e(%rsp)
  movw   $0xf6fe,0x26(%rsp)
  cmp    $0x9,%eax
  ja     L33
  mov    %rdi,%r12
  mov    %r8d,%r15d
  mov    %r9d,%ebx
  cltq
  movzbl 0x1e(%rsp,%rax,1),%ebp
  test   %bpl,%bpl
  js     L2
L140:
  test   $0x40,%bpl
  jne    L21
L123:
  test   $0x20,%bpl
  jne    L101
L61:
  test   $0x10,%bpl
  jne    L122
L108:
  test   $0x8,%bpl
  jne    L63
L19:
  test   $0x4,%bpl
  jne    L62
L136:
  test   $0x2,%bpl
  jne    L68
L33:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L141
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L2:
  lea    (%r9,%r9,1),%eax
  sub    $0x8,%rsp
  push   $0x1
  movss  0x1c(%rsp),%xmm0
  sub    %eax,%r8d
  mov    0x18(%rsp),%ecx
  mov    %r14d,%edx
  mov    %r13d,%esi
  call   <draw_rectangle@plt>
  add    $0x10,%rsp
  jmp    L140
L21:
  lea    (%rbx,%rbx,1),%eax
  sub    $0x8,%rsp
  push   %rbx
  movss  0x1c(%rsp),%xmm0
  mov    $0x1,%r9d
  mov    %r15d,%r8d
  sub    %eax,%r8d
  mov    0x18(%rsp),%ecx
  mov    %r14d,%edx
  mov    %r13d,%esi
  mov    %r12,%rdi
  call   <draw_rectangle@plt>
  add    $0x10,%rsp
  jmp    L123
L101:
  lea    (%rbx,%rbx,1),%eax
  mov    0x8(%rsp),%edi
  lea    (%rbx,%rdi,1),%ecx
  sub    $0x8,%rsp
  push   %rbx
  movss  0x1c(%rsp),%xmm0
  mov    $0x1,%r9d
  mov    %r15d,%r8d
  sub    %eax,%r8d
  mov    %r14d,%edx
  mov    %r13d,%esi
  mov    %r12,%rdi
  call   <draw_rectangle@plt>
  add    $0x10,%rsp
  jmp    L61
L122:
  sub    $0x8,%rsp
  push   $0x1
  movss  0x1c(%rsp),%xmm0
  mov    %ebx,%r9d
  mov    %r15d,%r8d
  sub    %ebx,%r8d
  mov    0x18(%rsp),%ecx
  mov    %r14d,%edx
  mov    %r13d,%esi
  mov    %r12,%rdi
  call   <draw_rectangle@plt>
  add    $0x10,%rsp
  jmp    L108
L63:
  sub    $0x8,%rsp
  push   %rbx
  movss  0x1c(%rsp),%xmm0
  mov    $0x1,%r9d
  mov    %r15d,%r8d
  sub    %ebx,%r8d
  mov    0x18(%rsp),%ecx
  mov    %r14d,%edx
  mov    %r13d,%esi
  mov    %r12,%rdi
  call   <draw_rectangle@plt>
  add    $0x10,%rsp
  jmp    L19
L62:
  mov    0x8(%rsp),%eax
  lea    (%rbx,%rax,1),%ecx
  sub    $0x8,%rsp
  push   %rbx
  movss  0x1c(%rsp),%xmm0
  mov    $0x1,%r9d
  mov    %r15d,%r8d
  sub    %ebx,%r8d
  mov    %r14d,%edx
  mov    %r13d,%esi
  mov    %r12,%rdi
  call   <draw_rectangle@plt>
  add    $0x10,%rsp
  jmp    L136
L68:
  sub    $0x8,%rsp
  push   $0x1
  movss  0x1c(%rsp),%xmm0
  mov    %ebx,%r9d
  mov    %r15d,%r8d
  mov    0x18(%rsp),%ecx
  mov    %r14d,%edx
  mov    %r13d,%esi
  mov    %r12,%rdi
  call   <draw_rectangle@plt>
  add    $0x10,%rsp
  jmp    L33
L141:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void disp7s(float *sl, int w, int h, int x, int y, int v, int d, float gray) {
  char seg[10] = {0xEE, 0x24, 0xBA, 0xB6, 0x74, 0xD6, 0xDE, 0xA4, 0xFE, 0xF6};
  if ((d < 0) || (d > 9))
    return;
  if ((seg[d] & 128) != 0)
    draw_rectangle(sl, w, h, x, y - 2 * v, v, 1, gray);
  if ((seg[d] & 64) != 0)
    draw_rectangle(sl, w, h, x, y - 2 * v, 1, v, gray);
  if ((seg[d] & 32) != 0)
    draw_rectangle(sl, w, h, x + v, y - 2 * v, 1, v, gray);
  if ((seg[d] & 16) != 0)
    draw_rectangle(sl, w, h, x, y - v, v, 1, gray);
  if ((seg[d] & 8) != 0)
    draw_rectangle(sl, w, h, x, y - v, 1, v, gray);
  if ((seg[d] & 4) != 0)
    draw_rectangle(sl, w, h, x + v, y - v, 1, v, gray);
  if ((seg[d] & 2) != 0)
    draw_rectangle(sl, w, h, x, y, v, 1, gray);
}
```