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

```asm
<string_word>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  movl   $0x0,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  sub    $0x1,%eax
  mov    %eax,-0xc(%rbp)
  movl   $0x0,-0x8(%rbp)
  jmp    L57
L161:
  addl   $0x1,-0x10(%rbp)
L57:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L116
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L161
L116:
  movl   $0x0,-0x4(%rbp)
  jmp    L151
L65:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L121
  addl   $0x1,-0x10(%rbp)
L169:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L65
  jmp    L4
L121:
  nop
  jmp    L4
L81:
  addl   $0x1,-0x10(%rbp)
L4:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L128
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L81
L128:
  addl   $0x1,-0x4(%rbp)
L151:
  mov    -0x1c(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x4(%rbp)
  jl     L169
  mov    -0x10(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L10
L104:
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L55
  subl   $0x1,-0xc(%rbp)
  jmp    L27
L55:
  addl   $0x1,-0xc(%rbp)
L10:
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L104
L27:
  jmp    L1
L109:
  mov    -0x10(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x10(%rbp)
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  movzbl (%rcx),%eax
  mov    %al,(%rdx)
L1:
  mov    -0x10(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  jle    L109
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x18(%rbp),%rax
  leave
  ret
```

assistant: ```c
char *string_word(char *s, int wordNumber) {
  int i = 0;
  int j = strlen(s) - 1;
  int k = 0;
  int word;
  while (isspace(s[i]) && s[i] != '\0')
    i++;
  for (word = 0; word < (wordNumber - 1); word++) {
    while (s[i] != '\0') {
      if (isspace(s[i]))
        break;
      i++;
    }
    while (isspace(s[i]) && s[i] != '\0')
      i++;
  }
  j = i;
  while (s[j] != '\0') {
    if (isspace(s[j])) {
      j--;
      break;
    }
    j++;
  }
  while (i <= j)
    s[k++] = s[i++];
  s[k] = '\0';
  return s;
}
```