user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<extract_smatrix>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,-0x70(%rsp)
  movslq %esi,%rdi
  mov    %rdx,-0x68(%rsp)
  cmp    %rdi,%rdx
  jl     L65
  movslq %ecx,%r12
  mov    %ecx,-0xc(%rsp)
  mov    %rcx,%rbp
  cmp    %r12,%r8
  jl     L65
  mov    %rsi,%rax
  mov    %r12,%r15
  mov    %r8,%r13
  neg    %rax
  sub    %rcx,%r15
  sub    %r12,%r13
  lea    (%r9,%rax,8),%rax
  lea    0x1(%r13),%rbx
  mov    %rax,-0x50(%rsp)
  lea    (%r15,%r15,1),%rax
  mov    %rbx,%r10
  mov    %rax,-0x58(%rsp)
  lea    0x2(%r12,%r12,1),%rax
  shr    $0x3,%r10
  mov    %rax,-0x60(%rsp)
  lea    (%r12,%r12,1),%rax
  shl    $0x4,%r10
  mov    %rbx,-0x48(%rsp)
  and    $0xfffffffffffffff8,%rbx
  mov    %rax,-0x38(%rsp)
  lea    (%r12,%rbx,1),%rax
  mov    %rax,-0x30(%rsp)
  mov    %ebx,%eax
  add    %ecx,%eax
  mov    %rbx,-0x40(%rsp)
  mov    %eax,-0x10(%rsp)
  mov    %rcx,%rax
  neg    %rax
  add    %rax,%rax
  mov    %rax,-0x18(%rsp)
  mov    %r13,%rax
  sub    %rbx,%rax
  mov    %rax,-0x28(%rsp)
  add    $0x1,%rax
  mov    %rax,-0x20(%rsp)
  xchg   %ax,%ax
L61:
  mov    -0x70(%rsp),%rax
  mov    %rdi,%r14
  mov    (%rax,%rdi,8),%rdx
  mov    -0x50(%rsp),%rax
  mov    (%rax,%rdi,8),%rcx
  mov    -0x58(%rsp),%rax
  lea    (%rcx,%rax,1),%rsi
  mov    -0x60(%rsp),%rax
  lea    (%rdx,%rax,1),%r9
  mov    %rsi,%rax
  sub    %r9,%rax
  cmp    $0xc,%rax
  jbe    L20
  cmp    $0x2,%r13
  jbe    L20
  cmp    $0x6,%r13
  jbe    L11
  mov    -0x38(%rsp),%rax
  lea    (%rdx,%rax,1),%r9
  xor    %eax,%eax
  cs nopw 0x0(%rax,%rax,1)
L5:
  movdqu (%r9,%rax,1),%xmm0
  movups %xmm0,(%rsi,%rax,1)
  add    $0x10,%rax
  cmp    %r10,%rax
  jne    L5
  mov    -0x40(%rsp),%rsi
  cmp    %rsi,-0x48(%rsp)
  je     L144
  cmpq   $0x2,-0x28(%rsp)
  mov    -0x20(%rsp),%r11
  mov    -0x10(%rsp),%eax
  mov    -0x30(%rsp),%r9
  jbe    L139
L142:
  lea    (%r12,%rsi,1),%rbx
  add    %r15,%rsi
  mov    (%rdx,%rbx,2),%rbx
  mov    %rbx,(%rcx,%rsi,2)
  mov    %r11,%rsi
  and    $0xfffffffffffffffc,%rsi
  add    %rsi,%r9
  add    %esi,%eax
  cmp    %rsi,%r11
  je     L144
L139:
  movslq %eax,%r11
  sub    %rbp,%r9
  lea    (%r11,%r11,1),%rsi
  movzwl (%rdx,%r11,2),%r11d
  mov    %r11w,(%rcx,%r9,2)
  lea    0x1(%rax),%r9d
  movslq %r9d,%r9
  cmp    %r9,%r8
  jl     L144
  movzwl 0x2(%rdx,%rsi,1),%r11d
  add    $0x2,%eax
  sub    %rbp,%r9
  cltq
  mov    %r11w,(%rcx,%r9,2)
  cmp    %r8,%rax
  jg     L144
  movzwl 0x4(%rdx,%rsi,1),%edx
  sub    %rbp,%rax
  mov    %dx,(%rcx,%rax,2)
L144:
  add    $0x1,%rdi
  cmp    -0x68(%rsp),%r14
  jne    L61
L65:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L20:
  add    -0x18(%rsp),%rcx
  mov    %r12,%rax
L120:
  movzwl (%rdx,%rax,2),%r9d
  mov    %rax,%rsi
  mov    %r9w,(%rcx,%rax,2)
  add    $0x1,%rax
  cmp    %r8,%rsi
  jne    L120
  jmp    L144
L11:
  mov    -0x48(%rsp),%r11
  mov    -0xc(%rsp),%eax
  mov    %r12,%r9
  xor    %esi,%esi
  jmp    L142
```

assistant: ```c
void extract_smatrix(short **src, long nrl, long nrh, long ncl, long nch, short **dst) {
  int i, j, ncol = nch - ncl + 1;
  for (i = nrl; i <= nrh; i++) {
    for (j = ncl; j <= nch; j++) {
      dst[i - nrl][j - ncl] = src[i][j];
    }
  }
}
```