user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  push   %rbx
  mov    $0xfffffffd,%ebx
  jmp    L78
L322:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L100
L229:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L325
L62:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L174
L315:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L245
L262:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L22
L88:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L133
L114:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L326
L163:
  add    $0x1,%ebx
  cmp    $0x4,%ebx
  je     L310
L78:
  mov    $0x1,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  cmp    %ebx,%eax
  jne    L322
L100:
  mov    $0x2,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%edx
  mov    %ebx,%eax
  shr    $0x1f,%eax
  add    %ebx,%eax
  sar    %eax
  cmp    %eax,%edx
  jne    L229
L325:
  mov    $0x3,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%edx
  movslq %ebx,%rax
  imul   $0x55555556,%rax,%rax
  shr    $0x20,%rax
  mov    %ebx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  cmp    %eax,%edx
  jne    L62
L174:
  mov    $0x4,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%edx
  lea    0x3(%rbx),%eax
  test   %ebx,%ebx
  cmovns %ebx,%eax
  sar    $0x2,%eax
  cmp    %eax,%edx
  jne    L315
L245:
  mov    $0x5,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%edx
  movslq %ebx,%rax
  imul   $0x66666667,%rax,%rax
  sar    $0x21,%rax
  mov    %ebx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  cmp    %eax,%edx
  jne    L262
L22:
  mov    $0x6,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%edx
  movslq %ebx,%rax
  imul   $0x2aaaaaab,%rax,%rax
  shr    $0x20,%rax
  mov    %ebx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  cmp    %eax,%edx
  jne    L88
L133:
  mov    $0x7,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%edx
  movslq %ebx,%rax
  imul   $0xffffffff92492493,%rax,%rax
  shr    $0x20,%rax
  add    %ebx,%eax
  sar    $0x2,%eax
  mov    %ebx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  cmp    %eax,%edx
  jne    L114
L326:
  mov    $0x8,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%edx
  lea    0x7(%rbx),%eax
  test   %ebx,%ebx
  cmovns %ebx,%eax
  sar    $0x3,%eax
  cmp    %eax,%edx
  je     L163
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L163
L310:
  mov    $0x7ffffffc,%ebx
  jmp    L143
L176:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L12
L154:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L338
L4:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L251
L298:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L99
L197:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L188
L85:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L330
L201:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L319
L164:
  add    $0x1,%ebx
  cmp    $0x80000003,%ebx
  je     L152
L143:
  mov    $0x1,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  cmp    %ebx,%eax
  jne    L176
L12:
  mov    $0x2,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%edx
  mov    %ebx,%eax
  shr    $0x1f,%eax
  add    %ebx,%eax
  sar    %eax
  cmp    %eax,%edx
  jne    L154
L338:
  mov    $0x3,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%edx
  movslq %ebx,%rax
  imul   $0x55555556,%rax,%rax
  shr    $0x20,%rax
  mov    %ebx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  cmp    %eax,%edx
  jne    L4
L251:
  mov    $0x4,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%edx
  lea    0x3(%rbx),%eax
  test   %ebx,%ebx
  cmovns %ebx,%eax
  sar    $0x2,%eax
  cmp    %eax,%edx
  jne    L298
L99:
  mov    $0x5,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%edx
  movslq %ebx,%rax
  imul   $0x66666667,%rax,%rax
  sar    $0x21,%rax
  mov    %ebx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  cmp    %eax,%edx
  jne    L197
L188:
  mov    $0x6,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%edx
  movslq %ebx,%rax
  imul   $0x2aaaaaab,%rax,%rax
  shr    $0x20,%rax
  mov    %ebx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  cmp    %eax,%edx
  jne    L85
L330:
  mov    $0x7,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%edx
  movslq %ebx,%rax
  imul   $0xffffffff92492493,%rax,%rax
  shr    $0x20,%rax
  add    %ebx,%eax
  sar    $0x2,%eax
  mov    %ebx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  cmp    %eax,%edx
  jne    L201
L319:
  mov    $0x8,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%edx
  lea    0x7(%rbx),%eax
  test   %ebx,%ebx
  cmovns %ebx,%eax
  sar    $0x3,%eax
  cmp    %eax,%edx
  je     L164
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L164
L152:
  mov    $0x0,%edi
  call   <exit@plt>
  mov    $0x0,%eax
  pop    %rbx
  ret
```

assistant: ```c
int main() {
  int i;
  for (i = -3; i <= 3; i++) {
    if (dd(i, 1) != i / 1)
      abort();
    if (dd(i, 2) != i / 2)
      abort();
    if (dd(i, 3) != i / 3)
      abort();
    if (dd(i, 4) != i / 4)
      abort();
    if (dd(i, 5) != i / 5)
      abort();
    if (dd(i, 6) != i / 6)
      abort();
    if (dd(i, 7) != i / 7)
      abort();
    if (dd(i, 8) != i / 8)
      abort();
  }
  for (i = ((unsigned)~0 >> 1) - 3; i <= ((unsigned)~0 >> 1) + 3; i++) {
    if (dd(i, 1) != i / 1)
      abort();
    if (dd(i, 2) != i / 2)
      abort();
    if (dd(i, 3) != i / 3)
      abort();
    if (dd(i, 4) != i / 4)
      abort();
    if (dd(i, 5) != i / 5)
      abort();
    if (dd(i, 6) != i / 6)
      abort();
    if (dd(i, 7) != i / 7)
      abort();
    if (dd(i, 8) != i / 8)
      abort();
  }
  exit(0);
}
```