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

```asm
<nokia>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  movl   $0x0,-0x8(%rbp)
  movl   $0x0,-0x4(%rbp)
  jmp    L145
L43:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x61,%al
  je     L105
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x64,%al
  je     L105
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x67,%al
  je     L105
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x6a,%al
  je     L105
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x6d,%al
  je     L105
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x70,%al
  je     L105
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x74,%al
  je     L105
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x77,%al
  je     L105
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  jne    L150
L105:
  movl   $0x1,-0x4(%rbp)
  jmp    L86
L150:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x62,%al
  je     L290
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x65,%al
  je     L290
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x68,%al
  je     L290
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x6b,%al
  je     L290
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x6e,%al
  je     L290
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x71,%al
  je     L290
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x75,%al
  je     L290
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x78,%al
  jne    L254
L290:
  movl   $0x2,-0x4(%rbp)
  jmp    L86
L254:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x63,%al
  je     L113
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x66,%al
  je     L113
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x69,%al
  je     L113
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x6c,%al
  je     L113
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x6f,%al
  je     L113
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x72,%al
  je     L113
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x76,%al
  je     L113
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x79,%al
  jne    L2
L113:
  movl   $0x3,-0x4(%rbp)
  jmp    L86
L2:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x73,%al
  je     L35
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x7a,%al
  jne    L86
L35:
  movl   $0x4,-0x4(%rbp)
L86:
  mov    -0x4(%rbp),%eax
  add    %eax,-0x8(%rbp)
  addq   $0x1,-0x18(%rbp)
L145:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L43
  mov    -0x8(%rbp),%eax
  pop    %rbp
  ret
```

assistant: ```c
int nokia(char *s) {
  int k = 0, value = 0;
  while (*s != '\0') {
    if (*s == 'a' || *s == 'd' || *s == 'g' || *s == 'j' || *s == 'm' || *s == 'p' || *s == 't' || *s == 'w' || *s == ' ')
      value = 1;
    else if (*s == 'b' || *s == 'e' || *s == 'h' || *s == 'k' || *s == 'n' || *s == 'q' || *s == 'u' || *s == 'x')
      value = 2;
    else if (*s == 'c' || *s == 'f' || *s == 'i' || *s == 'l' || *s == 'o' || *s == 'r' || *s == 'v' || *s == 'y')
      value = 3;
    else if (*s == 's' || *s == 'z')
      value = 4;
    k += value;
    s++;
  }
  return k;
}
```