user: 下面的汇编指令对应的C源代码是什么:

```asm
<myAtoi>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  cmpq   $0x0,-0x28(%rbp)
  jne    L88
  mov    $0x0,%eax
  jmp    L11
L88:
  movl   $0x0,-0x18(%rbp)
  movl   $0x0,-0x14(%rbp)
  movl   $0x0,-0xc(%rbp)
  movl   $0x0,-0x10(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L156
L254:
  cmpl   $0x0,-0x10(%rbp)
  jne    L160
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L202
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x30,%al
  jne    L219
L202:
  addq   $0x1,-0x8(%rbp)
  jmp    L156
L219:
  movl   $0x1,-0x10(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L143
  movl   $0x1,-0x18(%rbp)
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L160
  mov    $0x0,%eax
  jmp    L11
L143:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2b,%al
  jne    L160
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L160
  mov    $0x0,%eax
  jmp    L11
L160:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L149
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jg     L149
  cmpl   $0x0,-0x18(%rbp)
  jne    L111
  mov    D63(%rip),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  cmp    %eax,-0x14(%rbp)
  jg     L121
  mov    -0x14(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x30,%eax
  mov    %eax,-0xc(%rbp)
  mov    D63(%rip),%rax
  mov    (%rax),%eax
  sub    -0xc(%rbp),%eax
  cmp    %eax,-0x14(%rbp)
  jg     L77
  mov    -0xc(%rbp),%eax
  add    %eax,-0x14(%rbp)
  addq   $0x1,-0x8(%rbp)
  jmp    L156
L77:
  mov    D63(%rip),%rax
  mov    (%rax),%eax
  jmp    L11
L121:
  mov    D63(%rip),%rax
  mov    (%rax),%eax
  jmp    L11
L111:
  mov    D74(%rip),%rax
  mov    (%rax),%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  cmp    %eax,-0x14(%rbp)
  jl     L197
  mov    -0x14(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x30,%eax
  mov    %eax,-0xc(%rbp)
  mov    D74(%rip),%rax
  mov    (%rax),%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  cmp    %eax,-0x14(%rbp)
  jl     L154
  mov    -0xc(%rbp),%eax
  sub    %eax,-0x14(%rbp)
  addq   $0x1,-0x8(%rbp)
  jmp    L156
L154:
  mov    D74(%rip),%rax
  mov    (%rax),%eax
  jmp    L11
L197:
  mov    D74(%rip),%rax
  mov    (%rax),%eax
  jmp    L11
L156:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L254
L149:
  mov    -0x14(%rbp),%eax
L11:
  pop    %rbp
  ret
```

assistant: ```c
int myAtoi(char *str) {
  if (str == NULL)
    return 0;
  int negtive = 0;
  int result = 0;
  int tmp = 0;
  int start = 0;
  char *p = str;
  while (*p) {
    if (start == 0) {
      if (*p == ' ' || *p == '0') {
        p++;
        continue;
      } else {
        start = 1;
        if (*p == '-') {
          negtive = 1;
          p++;
          if (*p == '\0') {
            return 0;
          }
        } else if (*p == '+') {
          p++;
          if (*p == '\0') {
            return 0;
          }
        }
      }
    }
    if (*p >= '0' && *p <= '9') {
      if (!negtive) {
        if (INT_MAX / 10 >= result) {
          result *= 10;
          tmp = *p - '0';
          if (INT_MAX - tmp >= result) {
            result += tmp;
            p++;
          } else {
            return INT_MAX;
          }
        } else {
          return INT_MAX;
        }
      } else {
        if (INT_MIN / 10 <= result) {
          result *= 10;
          tmp = *p - '0';
          if (INT_MIN + tmp <= result) {
            result -= tmp;
            p++;
          } else {
            return INT_MIN;
          }
        } else {
          return INT_MIN;
        }
      }
    } else {
      break;
    }
  }
  return result;
}
```