user: 请将以下的汇编代码转换成C语言代码：

```asm
<iSqrt>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x14(%rbp)
  movl   $0x0,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x3fffffff(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L173
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x40000000,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x40000000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L240
L173:
  sarl   -0x4(%rbp)
L240:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0xfffffff(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L175
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x10000000,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x10000000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L12
L175:
  sarl   -0x4(%rbp)
L12:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x3ffffff(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L81
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x4000000,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x4000000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L204
L81:
  sarl   -0x4(%rbp)
L204:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0xffffff(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L35
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x1000000,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x1000000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L203
L35:
  sarl   -0x4(%rbp)
L203:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x3fffff(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L262
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x400000,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x400000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L154
L262:
  sarl   -0x4(%rbp)
L154:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0xfffff(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L67
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x100000,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x100000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L163
L67:
  sarl   -0x4(%rbp)
L163:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x3ffff(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L83
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x40000,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x40000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L281
L83:
  sarl   -0x4(%rbp)
L281:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0xffff(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L108
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x10000,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x10000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L72
L108:
  sarl   -0x4(%rbp)
L72:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x3fff(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L169
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x4000,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x40,%ah
  mov    %eax,-0x4(%rbp)
  jmp    L32
L169:
  sarl   -0x4(%rbp)
L32:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0xfff(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L260
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x1000,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x10,%ah
  mov    %eax,-0x4(%rbp)
  jmp    L250
L260:
  sarl   -0x4(%rbp)
L250:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x3ff(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L291
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x400,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x4,%ah
  mov    %eax,-0x4(%rbp)
  jmp    L215
L291:
  sarl   -0x4(%rbp)
L215:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0xff(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L57
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x100,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x1,%ah
  mov    %eax,-0x4(%rbp)
  jmp    L205
L57:
  sarl   -0x4(%rbp)
L205:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x3f(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L234
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x40,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x40,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L213
L234:
  sarl   -0x4(%rbp)
L213:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0xf(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L144
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x10,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x10,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L272
L144:
  sarl   -0x4(%rbp)
L272:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x3(%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jge    L301
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x4,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x4,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L254
L301:
  sarl   -0x4(%rbp)
L254:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jge    L95
  mov    -0x14(%rbp),%eax
  mov    -0x4(%rbp),%edx
  sub    %edx,%eax
  sub    $0x1,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x1,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L37
L95:
  sarl   -0x4(%rbp)
L37:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jge    L42
  addl   $0x1,-0x4(%rbp)
L42:
  mov    -0x4(%rbp),%eax
  pop    %rbp
  ret
```

assistant: ```c
int iSqrt(int value) {
  int root = 0;
  if ((0x40000000l >> 0) + root <= value) {
    value -= (0x40000000l >> 0) + root;
    root = (root >> 1) | (0x40000000l >> 0);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 2) + root <= value) {
    value -= (0x40000000l >> 2) + root;
    root = (root >> 1) | (0x40000000l >> 2);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 4) + root <= value) {
    value -= (0x40000000l >> 4) + root;
    root = (root >> 1) | (0x40000000l >> 4);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 6) + root <= value) {
    value -= (0x40000000l >> 6) + root;
    root = (root >> 1) | (0x40000000l >> 6);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 8) + root <= value) {
    value -= (0x40000000l >> 8) + root;
    root = (root >> 1) | (0x40000000l >> 8);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 10) + root <= value) {
    value -= (0x40000000l >> 10) + root;
    root = (root >> 1) | (0x40000000l >> 10);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 12) + root <= value) {
    value -= (0x40000000l >> 12) + root;
    root = (root >> 1) | (0x40000000l >> 12);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 14) + root <= value) {
    value -= (0x40000000l >> 14) + root;
    root = (root >> 1) | (0x40000000l >> 14);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 16) + root <= value) {
    value -= (0x40000000l >> 16) + root;
    root = (root >> 1) | (0x40000000l >> 16);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 18) + root <= value) {
    value -= (0x40000000l >> 18) + root;
    root = (root >> 1) | (0x40000000l >> 18);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 20) + root <= value) {
    value -= (0x40000000l >> 20) + root;
    root = (root >> 1) | (0x40000000l >> 20);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 22) + root <= value) {
    value -= (0x40000000l >> 22) + root;
    root = (root >> 1) | (0x40000000l >> 22);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 24) + root <= value) {
    value -= (0x40000000l >> 24) + root;
    root = (root >> 1) | (0x40000000l >> 24);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 26) + root <= value) {
    value -= (0x40000000l >> 26) + root;
    root = (root >> 1) | (0x40000000l >> 26);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 28) + root <= value) {
    value -= (0x40000000l >> 28) + root;
    root = (root >> 1) | (0x40000000l >> 28);
  } else {
    root = root >> 1;
  };
  if ((0x40000000l >> 30) + root <= value) {
    value -= (0x40000000l >> 30) + root;
    root = (root >> 1) | (0x40000000l >> 30);
  } else {
    root = root >> 1;
  };
  if (root < value) {
    ++root;
  }
  return root;
}
```