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

```asm
<assign_picture>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %esi,-0x1c(%rsp)
  test   %rdi,%rdi
  je     L144
  test   %r9,%r9
  je     L144
  mov    %esi,%eax
  cmp    $0x320,%esi
  jg     L28
  mov    %edx,%esi
  cmp    $0x1e0,%edx
  jg     L28
  lea    (%rax,%rcx,1),%ebp
  mov    %ecx,%r13d
  cmp    $0x320,%ebp
  jg     L0
  lea    (%rdx,%r8,1),%edx
  cmp    $0x1e0,%edx
  jg     L0
  cmp    %esi,%edx
  jle    L146
  mov    %eax,%r8d
  cmp    %eax,%ebp
  jle    L146
  movslq %eax,%rbx
  movslq %esi,%rax
  mov    %rdi,%r11
  mov    %r13d,%r15d
  lea    (%rax,%rax,4),%rax
  mov    %rbx,-0x18(%rsp)
  and    $0xfffffff8,%r15d
  lea    -0x1(%r13),%r14d
  imul   $0x640,%esi,%ecx
  lea    (%rax,%rax,4),%r10
  mov    %r13d,-0x34(%rsp)
  shl    $0x5,%r10
  add    %rbx,%r10
  neg    %rbx
  lea    (%rdi,%r10,2),%rax
  lea    (%rbx,%rbx,1),%rbx
  imul   $0x640,%edx,%edi
  mov    %r13d,%edx
  mov    %rbx,-0x10(%rsp)
  mov    %r13d,%ebx
  shr    $0x3,%edx
  sub    %r15d,%ebx
  mov    %ebx,-0x24(%rsp)
  sub    $0x1,%ebx
  mov    %edi,-0x38(%rsp)
  lea    -0x1(%rdx),%edi
  mov    %r15d,%edx
  lea    (%rdx,%rdx,1),%rsi
  mov    %ebx,-0x20(%rsp)
  mov    %r14d,%edx
  add    $0x1,%rdi
  mov    %rsi,-0x30(%rsp)
  lea    (%r8,%r15,1),%esi
  shl    $0x4,%rdi
  mov    %esi,-0x28(%rsp)
  lea    0x2(%rdx,%rdx,1),%rsi
  mov    %rsi,%r13
  nopl   0x0(%rax,%rax,1)
L65:
  lea    0x2(%r9),%rsi
  mov    %rax,%rdx
  sub    %rsi,%rdx
  cmp    $0xc,%rdx
  jbe    L87
  cmp    $0x2,%r14d
  jbe    L87
  cmp    $0x6,%r14d
  jbe    L164
  xor    %edx,%edx
  nopw   0x0(%rax,%rax,1)
L11:
  movdqu (%r9,%rdx,1),%xmm0
  movups %xmm0,(%rax,%rdx,1)
  add    $0x10,%rdx
  cmp    %rdx,%rdi
  jne    L11
  mov    -0x30(%rsp),%rbx
  lea    (%r9,%rbx,1),%r8
  cmp    %r15d,-0x34(%rsp)
  je     L189
  cmpl   $0x2,-0x20(%rsp)
  mov    -0x24(%rsp),%ebx
  jbe    L190
  mov    -0x28(%rsp),%edx
  mov    %r15d,%esi
L215:
  mov    (%r9,%rsi,2),%r12
  add    %r10,%rsi
  mov    %r12,(%r11,%rsi,2)
  mov    %ebx,%esi
  and    $0xfffffffc,%esi
  mov    %esi,%r12d
  add    %esi,%edx
  lea    (%r8,%r12,2),%r8
  cmp    %esi,%ebx
  je     L189
L195:
  lea    (%rdx,%rdx,1),%ebx
  movzwl (%r8),%r12d
  lea    (%rcx,%rbx,1),%esi
  movslq %esi,%rsi
  mov    %r12w,(%r11,%rsi,1)
  lea    0x1(%rdx),%esi
  cmp    %esi,%ebp
  jle    L189
  movzwl 0x2(%r8),%r12d
  lea    0x2(%rbx,%rcx,1),%esi
  add    $0x2,%edx
  movslq %esi,%rsi
  mov    %r12w,(%r11,%rsi,1)
  cmp    %edx,%ebp
  jle    L189
  movzwl 0x4(%r8),%edx
  lea    0x4(%rbx,%rcx,1),%esi
  movslq %esi,%rsi
  mov    %dx,(%r11,%rsi,1)
L189:
  add    %r13,%r9
  add    $0x640,%rax
  add    $0x640,%ecx
  add    $0x320,%r10
  cmp    %ecx,-0x38(%rsp)
  jne    L65
L146:
  xor    %eax,%eax
L60:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L87:
  mov    -0x10(%rsp),%rbx
  mov    -0x18(%rsp),%rdx
  lea    (%r9,%rbx,1),%r8
  lea    (%rbx,%rax,1),%rsi
  nopw   0x0(%rax,%rax,1)
L23:
  movzwl (%r8,%rdx,2),%ebx
  mov    %bx,(%rsi,%rdx,2)
  add    $0x1,%rdx
  cmp    %edx,%ebp
  jg     L23
  jmp    L189
L164:
  mov    -0x34(%rsp),%ebx
  mov    -0x1c(%rsp),%edx
  mov    %r9,%r8
  xor    %esi,%esi
  jmp    L215
L190:
  mov    -0x28(%rsp),%edx
  jmp    L195
L0:
  mov    $0xfffffffd,%eax
  jmp    L60
L28:
  mov    $0xfffffffe,%eax
  jmp    L60
L144:
  mov    $0xffffffff,%eax
  jmp    L60
```

assistant: ```c
int assign_picture(char *fb, int x, int y, int xoft, int yoft, const unsigned short *Image) {
  int x1, y1;
  int xres, yres;
  if (!fb || !Image)
    return -1;
  if (x > 800 || y > 480)
    return -2;
  if (x + xoft > 800 || y + yoft > 480)
    return -3;
  for (y1 = y; y1 < y + yoft; y1++) {
    yres = y1 * 1600;
    for (x1 = x; x1 < x + xoft; x1++) {
      xres = x1 * 2 + yres;
      *((unsigned short *)(fb + xres)) = *Image++;
    }
  }
  return 0;
}
```