user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<disp7s>:
  endbr64
  push   %r15
  push   %r14
  mov    %edx,%r14d
  push   %r13
  mov    %esi,%r13d
  movabs $0xa4ded674b6ba24ee,%rsi
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %r8d,0x8(%rsp)
  movslq 0x70(%rsp),%rax
  mov    %fs:0x28,%rdx
  mov    %rdx,0x28(%rsp)
  xor    %edx,%edx
  mov    %rsi,0x1e(%rsp)
  mov    $0xfffff6fe,%esi
  mov    %si,0x26(%rsp)
  cmp    $0x9,%eax
  ja     L30
  movzbl 0x1e(%rsp,%rax,1),%ebp
  mov    %rdi,%r12
  mov    %ecx,%r15d
  mov    %r9d,%ebx
  test   %bpl,%bpl
  js     L0
  test   $0x40,%bpl
  jne    L31
L143:
  test   $0x20,%bpl
  jne    L73
L182:
  test   $0x10,%bpl
  jne    L79
L12:
  test   $0x8,%bpl
  jne    L113
L186:
  test   $0x4,%bpl
  jne    L193
L89:
  and    $0x2,%ebp
  jne    L156
L30:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L44
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L156:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L44
  mov    0x8(%rsp),%r8d
  mov    %ebx,%r9d
  mov    %r15d,%ecx
  mov    %r14d,%edx
  movl   $0x1,0x70(%rsp)
  add    $0x38,%rsp
  mov    %r13d,%esi
  mov    %r12,%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1060 <draw_rectangle@plt>
  nopl   0x0(%rax,%rax,1)
L193:
  sub    $0x8,%rsp
  mov    %r14d,%edx
  lea    (%rbx,%r15,1),%ecx
  mov    %r13d,%esi
  push   %rbx
  mov    0x18(%rsp),%r8d
  mov    $0x1,%r9d
  mov    %r12,%rdi
  sub    %ebx,%r8d
  movss  %xmm0,0x1c(%rsp)
  call   <draw_rectangle@plt>
  and    $0x2,%ebp
  pop    %rax
  pop    %rdx
  movss  0xc(%rsp),%xmm0
  je     L30
  jmp    L156
  nopl   0x0(%rax)
L113:
  sub    $0x8,%rsp
  mov    %r15d,%ecx
  mov    %r13d,%esi
  mov    $0x1,%r9d
  push   %rbx
  mov    0x18(%rsp),%r8d
  mov    %r14d,%edx
  mov    %r12,%rdi
  sub    %ebx,%r8d
  movss  %xmm0,0x1c(%rsp)
  call   <draw_rectangle@plt>
  pop    %rcx
  pop    %rsi
  movss  0xc(%rsp),%xmm0
  test   $0x4,%bpl
  je     L89
  jmp    L193
  nopl   0x0(%rax)
L79:
  sub    $0x8,%rsp
  mov    %r12,%rdi
  mov    %ebx,%r9d
  mov    %r15d,%ecx
  push   $0x1
  mov    0x18(%rsp),%r8d
  mov    %r14d,%edx
  mov    %r13d,%esi
  sub    %ebx,%r8d
  movss  %xmm0,0x1c(%rsp)
  call   <draw_rectangle@plt>
  pop    %rdi
  pop    %r8
  movss  0xc(%rsp),%xmm0
  test   $0x8,%bpl
  je     L186
  jmp    L113
  nopl   0x0(%rax,%rax,1)
L73:
  sub    $0x8,%rsp
  lea    (%rbx,%rbx,1),%eax
  mov    $0x1,%r9d
  mov    %r14d,%edx
  push   %rbx
  mov    0x18(%rsp),%r8d
  lea    (%rbx,%r15,1),%ecx
  mov    %r13d,%esi
  mov    %r12,%rdi
  sub    %eax,%r8d
  movss  %xmm0,0x1c(%rsp)
  call   <draw_rectangle@plt>
  pop    %r9
  pop    %r10
  movss  0xc(%rsp),%xmm0
  test   $0x10,%bpl
  je     L12
  jmp    L79
  nopw   0x0(%rax,%rax,1)
L31:
  sub    $0x8,%rsp
  lea    (%rbx,%rbx,1),%eax
  mov    $0x1,%r9d
  mov    %r15d,%ecx
  push   %rbx
  mov    0x18(%rsp),%r8d
  mov    %r14d,%edx
  mov    %r13d,%esi
  mov    %r12,%rdi
  sub    %eax,%r8d
  movss  %xmm0,0x1c(%rsp)
  call   <draw_rectangle@plt>
  pop    %r11
  pop    %rax
  movss  0xc(%rsp),%xmm0
  test   $0x20,%bpl
  je     L182
  jmp    L73
  nopl   (%rax)
L0:
  sub    $0x8,%rsp
  lea    (%r9,%r9,1),%eax
  mov    %r14d,%edx
  mov    %r13d,%esi
  push   $0x1
  mov    0x18(%rsp),%r8d
  sub    %eax,%r8d
  movss  %xmm0,0x1c(%rsp)
  call   <draw_rectangle@plt>
  pop    %rax
  pop    %rdx
  movss  0xc(%rsp),%xmm0
  test   $0x40,%bpl
  je     L143
  jmp    L31
L44:
  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] & 0x80) != 0)
    draw_rectangle(sl, w, h, x, y - 2 * v, v, 1, gray);
  if ((seg[d] & 0x40) != 0)
    draw_rectangle(sl, w, h, x, y - 2 * v, 1, v, gray);
  if ((seg[d] & 0x20) != 0)
    draw_rectangle(sl, w, h, x + v, y - 2 * v, 1, v, gray);
  if ((seg[d] & 0x10) != 0)
    draw_rectangle(sl, w, h, x, y - v, v, 1, gray);
  if ((seg[d] & 0x08) != 0)
    draw_rectangle(sl, w, h, x, y - v, 1, v, gray);
  if ((seg[d] & 0x04) != 0)
    draw_rectangle(sl, w, h, x + v, y - v, 1, v, gray);
  if ((seg[d] & 0x02) != 0)
    draw_rectangle(sl, w, h, x, y, v, 1, gray);
}
```