user: Demonstrate the C code that generates the assembly output below:

```asm
<myAtoi>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  movzbl (%rdi),%eax
  mov    %rdi,%rbx
  cmp    $0x9,%al
  je     L88
  cmp    $0x20,%al
  jne    L123
  cs nopw 0x0(%rax,%rax,1)
L88:
  movzbl 0x1(%rbx),%eax
  add    $0x1,%rbx
  cmp    $0x20,%al
  je     L88
  cmp    $0x9,%al
  je     L88
L123:
  cmp    $0x2d,%al
  je     L45
  movsbl (%rbx),%edi
  cmp    $0x2b,%dil
  je     L190
  xor    %ebp,%ebp
  xor    %r12d,%r12d
  test   %dil,%dil
  je     L13
L95:
  xor    %r12d,%r12d
  jmp    L72
  nopl   0x0(%rax,%rax,1)
L199:
  mov    D9(%rip),%rdx
  mov    %r12,%rdi
  neg    %rdi
  mov    (%rdx),%esi
  lea    (%rsi,%rax,1),%ecx
  movslq %ecx,%rdx
  sar    $0x1f,%ecx
  imul   $0x66666667,%rdx,%rdx
  sar    $0x22,%rdx
  sub    %ecx,%edx
  movslq %edx,%rdx
  cmp    %rdx,%rdi
  jl     L146
L215:
  movsbl 0x1(%rbx),%edi
  lea    (%r12,%r12,4),%rdx
  cltq
  add    $0x1,%rbx
  lea    (%rax,%rdx,2),%r12
  test   %dil,%dil
  je     L211
L72:
  call   <isdigit@plt>
  test   %rax,%rax
  je     L211
  movsbl (%rbx),%eax
  sub    $0x30,%eax
  test   %ebp,%ebp
  jne    L199
  mov    D17(%rip),%rdx
  mov    (%rdx),%r8d
  mov    %r8d,%ecx
  sub    %eax,%ecx
  movslq %ecx,%rdx
  sar    $0x1f,%ecx
  imul   $0x66666667,%rdx,%rdx
  sar    $0x22,%rdx
  sub    %ecx,%edx
  movslq %edx,%rdx
  cmp    %r12,%rdx
  jge    L215
  pop    %rbx
  mov    %r8d,%eax
  pop    %rbp
  pop    %r12
  ret
  xchg   %ax,%ax
L211:
  test   %ebp,%ebp
  je     L13
L47:
  mov    %r12d,%r8d
  neg    %r8d
L2:
  pop    %rbx
  mov    %r8d,%eax
  pop    %rbp
  pop    %r12
  ret
  nopw   0x0(%rax,%rax,1)
L13:
  mov    %r12d,%r8d
  pop    %rbx
  pop    %rbp
  mov    %r8d,%eax
  pop    %r12
  ret
  nopl   0x0(%rax,%rax,1)
L45:
  movsbl 0x1(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L92
  movsbl 0x1(%rbx),%edi
  lea    0x1(%rbx),%rax
  cmp    $0x2b,%dil
  je     L115
  mov    %rax,%rbx
  mov    $0x1,%ebp
  xor    %r12d,%r12d
  test   %dil,%dil
  jne    L95
  jmp    L47
  nopw   0x0(%rax,%rax,1)
L92:
  xor    %r8d,%r8d
  pop    %rbx
  pop    %rbp
  mov    %r8d,%eax
  pop    %r12
  ret
L115:
  mov    %rax,%rbx
  xchg   %ax,%ax
L190:
  movsbl 0x1(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L92
  movsbl 0x1(%rbx),%edi
  test   %dil,%dil
  je     L92
  add    $0x1,%rbx
  xor    %ebp,%ebp
  jmp    L95
  nopw   0x0(%rax,%rax,1)
L146:
  movslq %esi,%r12
  mov    %r12d,%r8d
  neg    %r8d
  jmp    L2
```

assistant: ```c
int myAtoi(char *str) {
  char *s;
  long n = 0;
  int sign = 0;
  while (*str == ' ' || *str == '\t') {
    str++;
  }
  if (*str == '-') {
    if (isdigit(*++str)) {
      sign = 1;
    } else {
      return 0;
    }
  }
  if (*str == '+') {
    if (isdigit(*++str)) {
      sign = 0;
    } else {
      return 0;
    }
  }
  for (s = str; *s != '\0'; s++) {
    if (isdigit(*s)) {
      int d = *s - '0';
      if (sign) {
        if (-n < (INT_MIN + d) / 10) {
          n = INT_MIN;
          break;
        }
      } else {
        if (n > (INT_MAX - d) / 10) {
          n = INT_MAX;
          break;
        }
      }
      n = n * 10 + d;
    } else {
      break;
    }
  }
  return sign ? -n : n;
}
```