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

```asm
<fullsearch>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  add    $0xffffffffffffff80,%rsp
  mov    %rdi,%r10
  mov    %rdi,0x68(%rsp)
  mov    %rsi,0x20(%rsp)
  mov    %rdx,%rsi
  mov    %rdx,0x18(%rsp)
  mov    %ecx,%r12d
  mov    %ecx,0x64(%rsp)
  mov    %r8d,%r15d
  mov    %r8d,0x10(%rsp)
  mov    %r9d,%r14d
  mov    %r9d,0x30(%rsp)
  mov    0xb8(%rsp),%ebx
  mov    0xc0(%rsp),%ebp
  mov    %r9d,%eax
  imul   %ecx,%eax
  movslq %eax,%rdi
  movslq %r8d,%rax
  add    %rax,%rdi
  add    %r10,%rdi
  push   $0x10000
  mov    0xd0(%rsp),%r9d
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    %r12d,%edx
  mov    $0x0,%eax
  call   <dist1@plt>
  mov    %eax,0x4c(%rsp)
  add    $0x10,%rsp
  cmp    $0x40,%eax
  jle    L62
  mov    %r15d,%ecx
  lea    (%r15,%rbx,1),%edi
  mov    %r15d,%esi
  sub    %ebx,%esi
  mov    $0x0,%eax
  cmovns %esi,%eax
  mov    %eax,0x34(%rsp)
  mov    0xc8(%rsp),%eax
  lea    -0xf(%rax),%edx
  sub    $0x10,%eax
  cmp    %edi,%edx
  cmovg  %edi,%eax
  mov    %eax,0x38(%rsp)
  mov    %r14d,%esi
  mov    %r14d,%r15d
  sub    %ebp,%r15d
  mov    $0x0,%eax
  cmovs  %eax,%r15d
  mov    0xd0(%rsp),%edx
  sub    0xc0(%rsp),%edx
  lea    (%r14,%rbp,1),%eax
  cmp    %eax,%edx
  cmovle %edx,%eax
  mov    %eax,%r13d
  lea    0x3(%rbx),%eax
  test   %ebx,%ebx
  cmovns %ebx,%eax
  sar    $0x2,%eax
  mov    %eax,%edx
  mov    %eax,0x4c(%rsp)
  lea    0x3(%rbp),%eax
  test   %ebp,%ebp
  cmovns %ebp,%eax
  sar    $0x2,%eax
  mov    %eax,%r14d
  mov    %edx,%eax
  neg    %eax
  mov    %eax,0x2c(%rsp)
  cmp    %eax,%edx
  jl     L208
  lea    (%rcx,%rax,4),%eax
  mov    %eax,0x30(%rsp)
  mov    %r14d,%eax
  neg    %eax
  mov    %eax,0x48(%rsp)
  lea    (%rsi,%rax,4),%eax
  mov    %eax,0x54(%rsp)
  lea    0x0(,%r12,4),%edx
  mov    %edx,0x24(%rsp)
  imul   %r12d,%eax
  mov    %eax,0x58(%rsp)
  mov    %esi,0x6c(%rsp)
  mov    %ecx,0x68(%rsp)
  jmp    L73
L110:
  add    $0x1,%ebp
  add    $0x4,%ebx
  add    0x24(%rsp),%r12d
  cmp    %ebp,%r14d
  jl     L416
L346:
  mov    %ebx,0x8(%rsp)
  cmp    %ebx,%r15d
  setle  %dl
  cmp    %ebx,%r13d
  setge  %al
  test   %al,%dl
  je     L110
  cmpb   $0x0,0x28(%rsp)
  je     L110
  movslq %r12d,%rdi
  add    0x40(%rsp),%rdi
  add    0x60(%rsp),%rdi
  sub    $0x8,%rsp
  mov    0x44(%rsp),%eax
  push   %rax
  mov    0xd0(%rsp),%r9d
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    0x6c(%rsp),%edx
  mov    0x20(%rsp),%rsi
  mov    $0x0,%eax
  call   <dist1@plt>
  add    $0x10,%rsp
  cmp    0x3c(%rsp),%eax
  jge    L110
  mov    %eax,0x3c(%rsp)
  mov    0x8(%rsp),%eax
  mov    %eax,0x6c(%rsp)
  mov    0x50(%rsp),%eax
  mov    %eax,0x68(%rsp)
  jmp    L110
L416:
  addl   $0x1,0x2c(%rsp)
  mov    0x2c(%rsp),%eax
  addl   $0x4,0x30(%rsp)
  cmp    %eax,0x4c(%rsp)
  jl     L283
L73:
  mov    0x48(%rsp),%ebp
  cmp    %ebp,%r14d
  jl     L416
  mov    0x30(%rsp),%esi
  mov    %esi,0x50(%rsp)
  cmp    %esi,0x38(%rsp)
  setge  %dl
  cmp    %esi,0x34(%rsp)
  setle  %al
  and    %eax,%edx
  mov    %dl,0x28(%rsp)
  movslq %esi,%rax
  mov    %rax,0x40(%rsp)
  mov    0x58(%rsp),%r12d
  mov    0x54(%rsp),%ebx
  jmp    L346
L208:
  mov    0x28(%rsp),%eax
  mov    %eax,0x6c(%rsp)
  mov    0x8(%rsp),%eax
  mov    %eax,0x68(%rsp)
L283:
  movl   $0x2,0x4c(%rsp)
  mov    $0x2,%r12d
  mov    %r15d,0x24(%rsp)
  mov    0x6c(%rsp),%r15d
  mov    %r13d,0x2c(%rsp)
  mov    0x68(%rsp),%r13d
  jmp    L249
L0:
  mov    0x5c(%rsp),%edx
  mov    %edx,%edi
  mov    0x54(%rsp),%ebx
  imul   %ebx,%edi
  movslq %edi,%rdi
  mov    0x50(%rsp),%r14d
  movslq %r14d,%rax
  add    %rax,%rdi
  add    0x60(%rsp),%rdi
  sub    $0x8,%rsp
  mov    0x44(%rsp),%ebp
  push   %rbp
  mov    0xd0(%rsp),%r9d
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    0x20(%rsp),%rsi
  mov    $0x0,%eax
  call   <dist1@plt>
  add    $0x10,%rsp
  cmp    %ebp,%eax
  jge    L450
  mov    %eax,0x3c(%rsp)
  mov    %ebx,0x28(%rsp)
  mov    %r14d,0x8(%rsp)
  jmp    L298
L450:
  mov    %r15d,0x28(%rsp)
  mov    %r13d,0x8(%rsp)
  jmp    L298
L129:
  mov    0x5c(%rsp),%edx
  mov    %edx,%edi
  mov    0x58(%rsp),%ebx
  imul   %ebx,%edi
  movslq %edi,%rdi
  mov    0x50(%rsp),%r14d
  movslq %r14d,%rax
  add    %rax,%rdi
  add    0x60(%rsp),%rdi
  sub    $0x8,%rsp
  mov    0x44(%rsp),%ebp
  push   %rbp
  mov    0xd0(%rsp),%r9d
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    0x20(%rsp),%rsi
  mov    $0x0,%eax
  call   <dist1@plt>
  add    $0x10,%rsp
  cmp    %eax,%ebp
  jle    L368
  mov    %eax,0x3c(%rsp)
  mov    %ebx,0x28(%rsp)
  mov    %r14d,0x8(%rsp)
  jmp    L368
L324:
  mov    0x5c(%rsp),%edx
  mov    %edx,%edi
  mov    0x54(%rsp),%ebp
  imul   %ebp,%edi
  movslq %edi,%rdi
  movslq %r14d,%rax
  add    %rax,%rdi
  add    0x60(%rsp),%rdi
  sub    $0x8,%rsp
  mov    0x44(%rsp),%eax
  push   %rax
  mov    0xd0(%rsp),%r9d
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    0x20(%rsp),%rsi
  mov    $0x0,%eax
  call   <dist1@plt>
  add    $0x10,%rsp
  cmp    %eax,0x3c(%rsp)
  jle    L269
  mov    %eax,0x3c(%rsp)
  mov    %ebp,0x28(%rsp)
  mov    %r14d,0x8(%rsp)
  jmp    L269
L242:
  mov    0x5c(%rsp),%edx
  mov    %edx,%edi
  mov    0x58(%rsp),%ebp
  imul   %ebp,%edi
  movslq %edi,%rdi
  movslq %r14d,%rax
  add    %rax,%rdi
  add    0x60(%rsp),%rdi
  sub    $0x8,%rsp
  mov    0x44(%rsp),%eax
  push   %rax
  mov    0xd0(%rsp),%r9d
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    0x20(%rsp),%rsi
  mov    $0x0,%eax
  call   <dist1@plt>
  add    $0x10,%rsp
  cmp    %eax,0x3c(%rsp)
  jle    L305
  mov    %eax,0x3c(%rsp)
  mov    %ebp,0x28(%rsp)
  mov    %r14d,0x8(%rsp)
  jmp    L305
L315:
  mov    0x5c(%rsp),%edx
  mov    %edx,%edi
  imul   %r15d,%edi
  movslq %edi,%rdi
  movslq %r14d,%rax
  add    %rax,%rdi
  add    0x60(%rsp),%rdi
  sub    $0x8,%rsp
  mov    0x44(%rsp),%ebx
  push   %rbx
  mov    0xd0(%rsp),%r9d
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    0x20(%rsp),%rsi
  mov    $0x0,%eax
  call   <dist1@plt>
  add    $0x10,%rsp
  cmp    %eax,%ebx
  jle    L398
  mov    %eax,0x3c(%rsp)
  mov    %r15d,0x28(%rsp)
  mov    %r14d,0x8(%rsp)
  jmp    L398
L330:
  mov    0x5c(%rsp),%edx
  mov    %edx,%edi
  mov    0x54(%rsp),%r14d
  imul   %r14d,%edi
  movslq %edi,%rdi
  movslq %r13d,%rax
  add    %rax,%rdi
  add    0x60(%rsp),%rdi
  sub    $0x8,%rsp
  mov    0x44(%rsp),%eax
  push   %rax
  mov    0xd0(%rsp),%r9d
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    0x20(%rsp),%rsi
  mov    $0x0,%eax
  call   <dist1@plt>
  add    $0x10,%rsp
  cmp    %eax,0x3c(%rsp)
  jle    L68
  mov    %eax,0x3c(%rsp)
  mov    %r14d,0x28(%rsp)
  mov    %r13d,0x8(%rsp)
  jmp    L68
L358:
  mov    0x5c(%rsp),%edx
  mov    %edx,%edi
  imul   %r15d,%edi
  movslq %edi,%rdi
  mov    0x50(%rsp),%r14d
  movslq %r14d,%rax
  add    %rax,%rdi
  add    0x60(%rsp),%rdi
  sub    $0x8,%rsp
  mov    0x44(%rsp),%ebp
  push   %rbp
  mov    0xd0(%rsp),%r9d
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    0x20(%rsp),%rsi
  mov    $0x0,%eax
  call   <dist1@plt>
  add    $0x10,%rsp
  cmp    %eax,%ebp
  jle    L337
  mov    %eax,0x3c(%rsp)
  mov    %r15d,0x28(%rsp)
  mov    %r14d,0x8(%rsp)
  jmp    L337
L158:
  mov    %r12d,%eax
  shr    $0x1f,%eax
  add    %r12d,%eax
  sar    %eax
  mov    %eax,%r12d
  subl   $0x1,0x4c(%rsp)
  je     L62
  mov    0x28(%rsp),%r15d
  mov    0x8(%rsp),%r13d
L249:
  mov    %r13d,%eax
  sub    %r12d,%eax
  mov    %eax,0x50(%rsp)
  mov    %r15d,%esi
  sub    %r12d,%esi
  mov    %esi,0x54(%rsp)
  cmp    %eax,0x38(%rsp)
  setge  %dl
  cmp    %eax,0x34(%rsp)
  setle  %al
  mov    %esi,%ecx
  cmp    %esi,0x24(%rsp)
  setle  %sil
  cmp    %ecx,0x2c(%rsp)
  setge  %cl
  and    %ecx,%esi
  mov    %sil,0x48(%rsp)
  and    %al,%dl
  mov    %dl,0x30(%rsp)
  je     L210
  test   %sil,%sil
  jne    L0
L210:
  mov    %r15d,0x28(%rsp)
  mov    %r13d,0x8(%rsp)
L298:
  lea    (%r15,%r12,1),%eax
  mov    %eax,0x58(%rsp)
  cmp    %eax,0x24(%rsp)
  setle  %dl
  cmp    %eax,0x2c(%rsp)
  setge  %al
  and    %eax,%edx
  mov    %dl,0x40(%rsp)
  cmpb   $0x0,0x30(%rsp)
  je     L368
  test   %dl,%dl
  jne    L129
L368:
  lea    0x0(%r13,%r12,1),%r14d
  cmp    %r14d,0x38(%rsp)
  setge  %bl
  cmp    %r14d,0x34(%rsp)
  setle  %al
  and    %al,%bl
  je     L269
  cmpb   $0x0,0x48(%rsp)
  jne    L324
L269:
  test   %bl,%bl
  je     L305
  cmpb   $0x0,0x40(%rsp)
  jne    L242
L305:
  cmp    %r15d,0x24(%rsp)
  setle  %bpl
  cmp    %r15d,0x2c(%rsp)
  setge  %al
  and    %eax,%ebp
  test   %bl,%bl
  je     L398
  test   %bpl,%bpl
  jne    L315
L398:
  cmp    %r13d,0x38(%rsp)
  setge  %bl
  cmp    %r13d,0x34(%rsp)
  setle  %al
  and    %eax,%ebx
  cmpb   $0x0,0x48(%rsp)
  je     L68
  test   %bl,%bl
  jne    L330
L68:
  cmpb   $0x0,0x30(%rsp)
  je     L337
  test   %bpl,%bpl
  jne    L358
L337:
  cmpb   $0x0,0x40(%rsp)
  je     L158
  test   %bl,%bl
  je     L158
  mov    0x5c(%rsp),%edx
  mov    %edx,%edi
  mov    0x58(%rsp),%ebx
  imul   %ebx,%edi
  movslq %edi,%rdi
  movslq %r13d,%rax
  add    %rax,%rdi
  add    0x60(%rsp),%rdi
  sub    $0x8,%rsp
  mov    0x44(%rsp),%r14d
  push   %r14
  mov    0xd0(%rsp),%r9d
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    0x20(%rsp),%rsi
  mov    $0x0,%eax
  call   <dist1@plt>
  add    $0x10,%rsp
  cmp    %eax,%r14d
  jle    L158
  mov    %eax,0x3c(%rsp)
  mov    %ebx,0x28(%rsp)
  mov    %r13d,0x8(%rsp)
  jmp    L158
L62:
  mov    0x8(%rsp),%esi
  add    %esi,%esi
  mov    %esi,0x24(%rsp)
  mov    0x28(%rsp),%ecx
  add    %ecx,%ecx
  mov    %ecx,0x28(%rsp)
  test   %esi,%esi
  setg   %al
  movzbl %al,%eax
  mov    %esi,%edx
  sub    %eax,%edx
  mov    %edx,0x2c(%rsp)
  mov    0xc8(%rsp),%eax
  lea    -0x20(%rax,%rax,1),%eax
  cmp    %esi,%eax
  setg   %r13b
  movzbl %r13b,%r13d
  add    %esi,%r13d
  test   %ecx,%ecx
  setg   %al
  movzbl %al,%eax
  mov    %ecx,%r14d
  sub    %eax,%r14d
  mov    0xd0(%rsp),%eax
  sub    0xc0(%rsp),%eax
  add    %eax,%eax
  cmp    %ecx,%eax
  setg   %al
  movzbl %al,%eax
  add    %ecx,%eax
  mov    %eax,0x30(%rsp)
  mov    $0x10000,%ebp
  mov    0x5c(%rsp),%r12d
  cmp    %eax,%r14d
  jle    L329
L222:
  mov    0xd8(%rsp),%rax
  mov    0x24(%rsp),%edx
  mov    %edx,(%rax)
  mov    0xe0(%rsp),%rax
  mov    0x28(%rsp),%edx
  mov    %edx,(%rax)
  mov    %ebp,%eax
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L144:
  add    $0x1,%ebx
  cmp    %ebx,%r13d
  jl     L173
L422:
  mov    %ebx,%ecx
  and    $0x1,%ecx
  mov    %ebx,%edi
  sar    %edi
  movslq %edi,%rdi
  add    0x8(%rsp),%rdi
  add    0x18(%rsp),%rdi
  sub    $0x8,%rsp
  push   %rbp
  mov    0xd0(%rsp),%r9d
  mov    %r15d,%r8d
  mov    %r12d,%edx
  mov    0x20(%rsp),%rsi
  mov    $0x0,%eax
  call   <dist1@plt>
  add    $0x10,%rsp
  cmp    %ebp,%eax
  jge    L144
  mov    %eax,%ebp
  mov    %r14d,0x28(%rsp)
  mov    %ebx,0x24(%rsp)
  jmp    L144
L173:
  add    $0x1,%r14d
  cmp    %r14d,0x30(%rsp)
  jl     L222
L329:
  cmp    %r13d,0x2c(%rsp)
  jg     L173
  mov    %r14d,%eax
  sar    %eax
  imul   %r12d,%eax
  cltq
  mov    %rax,0x8(%rsp)
  mov    0x2c(%rsp),%ebx
  mov    %r14d,%r15d
  and    $0x1,%r15d
  jmp    L422
```

assistant: ```c
signed int fullsearch(unsigned char *org, unsigned char *ref, unsigned char *blk, signed int lx, signed int i0, signed int j0, signed int sx, signed int sy, signed int h, signed int xmax, signed int ymax, signed int *iminp, signed int *jminp) {
  signed int i;
  signed int j;
  signed int imin;
  signed int jmin;
  signed int ilow;
  signed int ihigh;
  signed int jlow;
  signed int jhigh;
  signed int d;
  signed int dmin;
  signed int p;
  imin = i0;
  jmin = j0;
  dmin = dist1(org + (signed long int)imin + (signed long int)(lx * jmin), blk, lx, 0, 0, h, 65536);
  if (dmin > 64) {
    signed int w;
    signed int z;
    signed int limitx;
    signed int limity;
    ilow = i0 - sx;
    ihigh = i0 + sx;
    if (ilow < 0)
      ilow = 0;
    if (!(-16 + xmax >= ihigh))
      ihigh = xmax - 16;
    jlow = j0 - sy;
    jhigh = j0 + sy;
    if (jlow < 0)
      jlow = 0;
    if (!(ymax + -h >= jhigh))
      jhigh = ymax - h;
    limitx = sx / 4;
    limity = sy / 4;
    w = -limitx;
    while (limitx >= w) {
      z = -limity;
      while (limity >= z) {
        i = i0 + 4 * w;
        j = j0 + 4 * z;
        if (i >= ilow) {
          if (ihigh >= i) {
            if (j >= jlow) {
              if (jhigh >= j) {
                d = dist1(org + (signed long int)i + (signed long int)(lx * j), blk, lx, 0, 0, h, dmin);
                if (!(d >= dmin)) {
                  imin = i;
                  jmin = j;
                  dmin = d;
                }
              }
            }
          }
        }
        z = z + 1;
      }
      w = w + 1;
    }
    p = 2;
    i0 = imin;
    j0 = jmin;
    while (p > 0) {
      i = i0 - p;
      j = j0 - p;
      if (i >= ilow) {
        if (ihigh >= i) {
          if (j >= jlow) {
            if (jhigh >= j) {
              d = dist1(org + (signed long int)i + (signed long int)(lx * j), blk, lx, 0, 0, h, dmin);
              if (!(d >= dmin)) {
                imin = i;
                jmin = j;
                dmin = d;
              }
            }
          }
        }
      }
      i = i0 - p;
      j = j0 + p;
      if (i >= ilow) {
        if (ihigh >= i) {
          if (j >= jlow) {
            if (jhigh >= j) {
              d = dist1(org + (signed long int)i + (signed long int)(lx * j), blk, lx, 0, 0, h, dmin);
              if (!(d >= dmin)) {
                imin = i;
                jmin = j;
                dmin = d;
              }
            }
          }
        }
      }
      i = i0 + p;
      j = j0 - p;
      if (i >= ilow) {
        if (ihigh >= i) {
          if (j >= jlow) {
            if (jhigh >= j) {
              d = dist1(org + (signed long int)i + (signed long int)(lx * j), blk, lx, 0, 0, h, dmin);
              if (!(d >= dmin)) {
                imin = i;
                jmin = j;
                dmin = d;
              }
            }
          }
        }
      }
      i = i0 + p;
      j = j0 + p;
      if (i >= ilow) {
        if (ihigh >= i) {
          if (j >= jlow) {
            if (jhigh >= j) {
              d = dist1(org + (signed long int)i + (signed long int)(lx * j), blk, lx, 0, 0, h, dmin);
              if (!(d >= dmin)) {
                imin = i;
                jmin = j;
                dmin = d;
              }
            }
          }
        }
      }
      i = i0 + p;
      j = j0;
      if (i >= ilow) {
        if (ihigh >= i) {
          if (j >= jlow) {
            if (jhigh >= j) {
              d = dist1(org + (signed long int)i + (signed long int)(lx * j), blk, lx, 0, 0, h, dmin);
              if (!(d >= dmin)) {
                imin = i;
                jmin = j;
                dmin = d;
              }
            }
          }
        }
      }
      i = i0;
      j = j0 - p;
      if (i >= ilow) {
        if (ihigh >= i) {
          if (j >= jlow) {
            if (jhigh >= j) {
              d = dist1(org + (signed long int)i + (signed long int)(lx * j), blk, lx, 0, 0, h, dmin);
              if (!(d >= dmin)) {
                imin = i;
                jmin = j;
                dmin = d;
              }
            }
          }
        }
      }
      i = i0 - p;
      j = j0;
      if (i >= ilow) {
        if (ihigh >= i) {
          if (j >= jlow) {
            if (jhigh >= j) {
              d = dist1(org + (signed long int)i + (signed long int)(lx * j), blk, lx, 0, 0, h, dmin);
              if (!(d >= dmin)) {
                imin = i;
                jmin = j;
                dmin = d;
              }
            }
          }
        }
      }
      i = i0;
      j = j0 + p;
      if (i >= ilow) {
        if (ihigh >= i) {
          if (j >= jlow) {
            if (jhigh >= j) {
              d = dist1(org + (signed long int)i + (signed long int)(lx * j), blk, lx, 0, 0, h, dmin);
              if (!(d >= dmin)) {
                imin = i;
                jmin = j;
                dmin = d;
              }
            }
          }
        }
      }
      i0 = imin;
      j0 = jmin;
      p = p / 2;
    }
  }
  dmin = 65536;
  imin = imin << 1;
  jmin = jmin << 1;
  ilow = imin - (signed int)(imin > 0);
  ihigh = imin + (signed int)(imin < xmax - 16 << 1);
  jlow = jmin - (signed int)(jmin > 0);
  jhigh = jmin + (signed int)(jmin < ymax - h << 1);
  j = jlow;
  while (jhigh >= j) {
    i = ilow;
    while (ihigh >= i) {
      d = dist1(ref + (signed long int)(i >> 1) + (signed long int)(lx * (j >> 1)), blk, lx, i & 1, j & 1, h, dmin);
      if (!(d >= dmin)) {
        dmin = d;
        imin = i;
        jmin = j;
      }
      i = i + 1;
    }
    j = j + 1;
  }
  *iminp = imin;
  *jminp = jmin;
  return dmin;
}
```