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     L100
  movzbl 0x1e(%rsp,%rax,1),%ebp
  mov    %rdi,%r12
  mov    %ecx,%r15d
  mov    %r9d,%ebx
  test   %bpl,%bpl
  js     L130
  test   $0x40,%bpl
  jne    L28
L193:
  test   $0x20,%bpl
  jne    L5
L189:
  test   $0x10,%bpl
  jne    L72
L57:
  test   $0x8,%bpl
  jne    L84
L141:
  test   $0x4,%bpl
  jne    L69
L175:
  and    $0x2,%ebp
  jne    L197
L100:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L27
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L197:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L27
  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)
L69:
  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     L100
  jmp    L197
  nopl   0x0(%rax)
L84:
  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     L175
  jmp    L69
  nopl   0x0(%rax)
L72:
  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     L141
  jmp    L84
  nopl   0x0(%rax,%rax,1)
L5:
  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     L57
  jmp    L72
  nopw   0x0(%rax,%rax,1)
L28:
  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     L189
  jmp    L5
  nopl   (%rax)
L130:
  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     L193
  jmp    L28
L27:
  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);
}
```