user: 请从给定的汇编指令推导出C源代码：

```asm
<fulltest>:
  endbr64
  push   %rbp
  mov    %rdi,%r8
  mov    %rsi,%rbp
  mov    %r8,%rsi
  sub    $0x50,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rdi
  call   <swap256@plt>
  mov    %rbp,%rsi
  lea    0x20(%rsp),%rdi
  call   <swap256@plt>
  mov    (%rsp),%ecx
  movzwl (%rsp),%edx
  mov    0x20(%rsp),%esi
  mov    %ecx,%eax
  rol    $0x8,%dx
  shr    $0x8,%eax
  shl    $0x10,%edx
  and    $0xff00,%eax
  sar    $0x18,%ecx
  or     %edx,%eax
  mov    %esi,%edx
  or     %ecx,%eax
  movzwl 0x20(%rsp),%ecx
  shr    $0x8,%edx
  and    $0xff00,%edx
  rol    $0x8,%cx
  shl    $0x10,%ecx
  or     %ecx,%edx
  mov    %esi,%ecx
  sar    $0x18,%ecx
  or     %ecx,%edx
  mov    %edx,0x20(%rsp)
  cmp    %eax,%esi
  jl     L100
  jg     L96
  mov    0x4(%rsp),%ecx
  movzwl 0x4(%rsp),%edx
  mov    0x24(%rsp),%esi
  mov    %ecx,%eax
  rol    $0x8,%dx
  shr    $0x8,%eax
  shl    $0x10,%edx
  and    $0xff00,%eax
  sar    $0x18,%ecx
  or     %edx,%eax
  mov    %esi,%edx
  or     %ecx,%eax
  movzwl 0x24(%rsp),%ecx
  shr    $0x8,%edx
  and    $0xff00,%edx
  rol    $0x8,%cx
  shl    $0x10,%ecx
  or     %ecx,%edx
  mov    %esi,%ecx
  sar    $0x18,%ecx
  or     %ecx,%edx
  mov    %edx,0x24(%rsp)
  cmp    %eax,%esi
  jl     L100
  jg     L96
  mov    0x8(%rsp),%edx
  movzwl 0x8(%rsp),%eax
  mov    %edx,%ecx
  rol    $0x8,%ax
  shr    $0x8,%ecx
  shl    $0x10,%eax
  and    $0xff00,%ecx
  sar    $0x18,%edx
  or     %ecx,%eax
  mov    0x28(%rsp),%ecx
  or     %edx,%eax
  movzwl 0x28(%rsp),%edx
  mov    %ecx,%esi
  rol    $0x8,%dx
  shr    $0x8,%esi
  and    $0xff00,%esi
  shl    $0x10,%edx
  or     %esi,%edx
  mov    %ecx,%esi
  sar    $0x18,%esi
  or     %esi,%edx
  mov    %edx,0x28(%rsp)
  cmp    %ecx,%eax
  jg     L100
  jl     L96
  mov    0xc(%rsp),%edx
  movzwl 0xc(%rsp),%eax
  mov    %edx,%ecx
  rol    $0x8,%ax
  shr    $0x8,%ecx
  shl    $0x10,%eax
  and    $0xff00,%ecx
  sar    $0x18,%edx
  or     %ecx,%eax
  mov    0x2c(%rsp),%ecx
  or     %edx,%eax
  movzwl 0x2c(%rsp),%edx
  mov    %ecx,%esi
  rol    $0x8,%dx
  shr    $0x8,%esi
  and    $0xff00,%esi
  shl    $0x10,%edx
  or     %esi,%edx
  mov    %ecx,%esi
  sar    $0x18,%esi
  or     %esi,%edx
  mov    %edx,0x2c(%rsp)
  cmp    %ecx,%eax
  jg     L100
  jl     L96
  mov    0x10(%rsp),%edx
  movzwl 0x10(%rsp),%eax
  mov    %edx,%ecx
  rol    $0x8,%ax
  shr    $0x8,%ecx
  shl    $0x10,%eax
  and    $0xff00,%ecx
  sar    $0x18,%edx
  or     %ecx,%eax
  mov    0x30(%rsp),%ecx
  or     %edx,%eax
  movzwl 0x30(%rsp),%edx
  mov    %ecx,%esi
  rol    $0x8,%dx
  shr    $0x8,%esi
  and    $0xff00,%esi
  shl    $0x10,%edx
  or     %esi,%edx
  mov    %ecx,%esi
  sar    $0x18,%esi
  or     %esi,%edx
  mov    %edx,0x30(%rsp)
  cmp    %ecx,%eax
  jg     L100
  jl     L96
  mov    0x14(%rsp),%edx
  movzwl 0x14(%rsp),%eax
  mov    %edx,%ecx
  rol    $0x8,%ax
  shr    $0x8,%ecx
  shl    $0x10,%eax
  and    $0xff00,%ecx
  sar    $0x18,%edx
  or     %ecx,%eax
  mov    0x34(%rsp),%ecx
  or     %edx,%eax
  movzwl 0x34(%rsp),%edx
  mov    %ecx,%esi
  rol    $0x8,%dx
  shr    $0x8,%esi
  and    $0xff00,%esi
  shl    $0x10,%edx
  or     %esi,%edx
  mov    %ecx,%esi
  sar    $0x18,%esi
  or     %esi,%edx
  mov    %edx,0x34(%rsp)
  cmp    %ecx,%eax
  jg     L100
  jl     L96
  mov    0x18(%rsp),%edx
  movzwl 0x18(%rsp),%eax
  mov    %edx,%ecx
  rol    $0x8,%ax
  shr    $0x8,%ecx
  shl    $0x10,%eax
  and    $0xff00,%ecx
  sar    $0x18,%edx
  or     %ecx,%eax
  mov    0x38(%rsp),%ecx
  or     %edx,%eax
  movzwl 0x38(%rsp),%edx
  mov    %ecx,%esi
  rol    $0x8,%dx
  shr    $0x8,%esi
  and    $0xff00,%esi
  shl    $0x10,%edx
  or     %esi,%edx
  mov    %ecx,%esi
  sar    $0x18,%esi
  or     %esi,%edx
  mov    %edx,0x38(%rsp)
  cmp    %ecx,%eax
  jg     L100
  jl     L96
  mov    0x1c(%rsp),%edx
  movzwl 0x1c(%rsp),%eax
  mov    %edx,%ecx
  rol    $0x8,%ax
  shr    $0x8,%ecx
  shl    $0x10,%eax
  and    $0xff00,%ecx
  sar    $0x18,%edx
  or     %ecx,%eax
  or     %edx,%eax
  cmp    0x3c(%rsp),%eax
  jg     L100
L96:
  mov    $0x1,%eax
L111:
  mov    0x48(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L29
  add    $0x50,%rsp
  pop    %rbp
  ret
  nopw   0x0(%rax,%rax,1)
L100:
  xor    %eax,%eax
  jmp    L111
L29:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int fulltest(const unsigned char *hash, const unsigned char *target) {
  unsigned char hash_swap[32], target_swap[32];
  uint32_t *hash32 = (uint32_t *)hash_swap;
  uint32_t *target32 = (uint32_t *)target_swap;
  int i;
  int rc = 1;
  swap256(hash_swap, hash);
  swap256(target_swap, target);
  for (i = 0; i < 32 / 4; i++) {
    uint32_t h32tmp = (((uint32_t)(((((uint16_t)((hash32[i]) & 0xFFFF)) & 0xFF) << 8) | (((uint16_t)((hash32[i]) & 0xFFFF)) >> 8)) << 16) | (uint32_t)(((((uint16_t)((hash32[i]) >> 16)) & 0xFF) << 8) | (((uint16_t)((hash32[i]) >> 16)) >> 8)));
    uint32_t t32tmp = target32[i];
    target32[i] = (((uint32_t)(((((uint16_t)((target32[i]) & 0xFFFF)) & 0xFF) << 8) | (((uint16_t)((target32[i]) & 0xFFFF)) >> 8)) << 16) | (uint32_t)(((((uint16_t)((target32[i]) >> 16)) & 0xFF) << 8) | (((uint16_t)((target32[i]) >> 16)) >> 8)));
    if (h32tmp > t32tmp) {
      rc = 0;
      break;
    }
    if (h32tmp < t32tmp) {
      rc = 1;
      break;
    }
  }
  return (rc);
}
```