user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<isqrt>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x14(%rbp)
  movl   $0x0,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  add    $0x3fffffff,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L207
  mov    -0x4(%rbp),%eax
  add    $0x40000000,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x40000000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L306
L207:
  sarl   -0x4(%rbp)
L306:
  mov    -0x4(%rbp),%eax
  add    $0xfffffff,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L255
  mov    -0x4(%rbp),%eax
  add    $0x10000000,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x10000000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L236
L255:
  sarl   -0x4(%rbp)
L236:
  mov    -0x4(%rbp),%eax
  add    $0x3ffffff,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L47
  mov    -0x4(%rbp),%eax
  add    $0x4000000,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x4000000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L90
L47:
  sarl   -0x4(%rbp)
L90:
  mov    -0x4(%rbp),%eax
  add    $0xffffff,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L179
  mov    -0x4(%rbp),%eax
  add    $0x1000000,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x1000000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L192
L179:
  sarl   -0x4(%rbp)
L192:
  mov    -0x4(%rbp),%eax
  add    $0x3fffff,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L278
  mov    -0x4(%rbp),%eax
  add    $0x400000,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x400000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L107
L278:
  sarl   -0x4(%rbp)
L107:
  mov    -0x4(%rbp),%eax
  add    $0xfffff,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L197
  mov    -0x4(%rbp),%eax
  add    $0x100000,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x100000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L141
L197:
  sarl   -0x4(%rbp)
L141:
  mov    -0x4(%rbp),%eax
  add    $0x3ffff,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L267
  mov    -0x4(%rbp),%eax
  add    $0x40000,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x40000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L226
L267:
  sarl   -0x4(%rbp)
L226:
  mov    -0x4(%rbp),%eax
  add    $0xffff,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L177
  mov    -0x4(%rbp),%eax
  add    $0x10000,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x10000,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L163
L177:
  sarl   -0x4(%rbp)
L163:
  mov    -0x4(%rbp),%eax
  add    $0x3fff,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L323
  mov    -0x4(%rbp),%eax
  add    $0x4000,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x40,%ah
  mov    %eax,-0x4(%rbp)
  jmp    L128
L323:
  sarl   -0x4(%rbp)
L128:
  mov    -0x4(%rbp),%eax
  add    $0xfff,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L97
  mov    -0x4(%rbp),%eax
  add    $0x1000,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x10,%ah
  mov    %eax,-0x4(%rbp)
  jmp    L227
L97:
  sarl   -0x4(%rbp)
L227:
  mov    -0x4(%rbp),%eax
  add    $0x3ff,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L15
  mov    -0x4(%rbp),%eax
  add    $0x400,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x4,%ah
  mov    %eax,-0x4(%rbp)
  jmp    L234
L15:
  sarl   -0x4(%rbp)
L234:
  mov    -0x4(%rbp),%eax
  add    $0xff,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L167
  mov    -0x4(%rbp),%eax
  add    $0x100,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x1,%ah
  mov    %eax,-0x4(%rbp)
  jmp    L261
L167:
  sarl   -0x4(%rbp)
L261:
  mov    -0x4(%rbp),%eax
  add    $0x3f,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L312
  mov    -0x4(%rbp),%eax
  add    $0x40,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x40,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L7
L312:
  sarl   -0x4(%rbp)
L7:
  mov    -0x4(%rbp),%eax
  add    $0xf,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L276
  mov    -0x4(%rbp),%eax
  add    $0x10,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x10,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L146
L276:
  sarl   -0x4(%rbp)
L146:
  mov    -0x4(%rbp),%eax
  add    $0x3,%eax
  cmp    %eax,-0x14(%rbp)
  jle    L322
  mov    -0x4(%rbp),%eax
  add    $0x4,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x4,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L188
L322:
  sarl   -0x4(%rbp)
L188:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jge    L132
  mov    -0x4(%rbp),%eax
  add    $0x1,%eax
  sub    %eax,-0x14(%rbp)
  mov    -0x4(%rbp),%eax
  sar    %eax
  or     $0x1,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L246
L132:
  sarl   -0x4(%rbp)
L246:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jge    L70
  addl   $0x1,-0x4(%rbp)
L70:
  mov    -0x4(%rbp),%eax
  pop    %rbp
  ret
```

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