user: 请从给定的汇编指令推导出C源代码:

```asm
<wordConvert>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0xa8(%rbp)
  movl   $0x0,-0xa4(%rbp)
  movl   $0x0,-0x98(%rbp)
  movl   $0x0,-0xa0(%rbp)
  movl   $0x0,-0x9c(%rbp)
  movl   $0x0,-0x94(%rbp)
  mov    $0x0,%ecx
  mov    $0x0,%edx
  mov    $0x0,%esi
  lea    D59(%rip),%rax
  mov    %rax,%rdi
  call   <printMessage@plt>
  lea    -0x90(%rbp),%rax
  mov    %rax,%rsi
  lea    D55(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    $0x0,%ecx
  mov    $0x0,%edx
  mov    $0x0,%esi
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  call   <printMessage@plt>
  lea    -0xa8(%rbp),%rax
  mov    %rax,%rsi
  lea    D56(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    $0x0,%ecx
  mov    $0x0,%edx
  mov    $0x0,%esi
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  call   <printMessage@plt>
  lea    -0xa4(%rbp),%rax
  mov    %rax,%rsi
  lea    D56(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0xa8(%rbp),%eax
  cmp    $0x1,%eax
  jne    L0
  mov    -0xa4(%rbp),%eax
  neg    %eax
  mov    %eax,-0xa4(%rbp)
L0:
  lea    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x98(%rbp)
  movl   $0x0,-0xa0(%rbp)
  jmp    L16
L68:
  mov    -0xa0(%rbp),%eax
  cltq
  movzbl -0x90(%rbp,%rax,1),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <toupper@plt>
  mov    -0xa0(%rbp),%edx
  movslq %edx,%rdx
  mov    %al,-0x90(%rbp,%rdx,1)
  addl   $0x1,-0xa0(%rbp)
L16:
  mov    -0xa0(%rbp),%eax
  cmp    -0x98(%rbp),%eax
  jl     L68
  movl   $0x0,-0xa0(%rbp)
  jmp    L18
L21:
  mov    -0xa4(%rbp),%eax
  mov    %eax,-0x9c(%rbp)
  mov    -0xa0(%rbp),%eax
  cltq
  movzbl -0x90(%rbp,%rax,1),%eax
  movsbl %al,%edx
  mov    -0x9c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x94(%rbp)
  cmpl   $0x40,-0x94(%rbp)
  jg     L10
  mov    -0x94(%rbp),%eax
  sub    $0x40,%eax
  mov    %eax,-0x9c(%rbp)
  mov    -0xa0(%rbp),%eax
  cltq
  movb   $0x5a,-0x90(%rbp,%rax,1)
L10:
  cmpl   $0x5a,-0x94(%rbp)
  jle    L48
  mov    -0x94(%rbp),%eax
  sub    $0x5b,%eax
  mov    %eax,-0x9c(%rbp)
  mov    -0xa0(%rbp),%eax
  cltq
  movb   $0x41,-0x90(%rbp,%rax,1)
L48:
  mov    -0xa0(%rbp),%eax
  cltq
  movzbl -0x90(%rbp,%rax,1),%eax
  mov    %eax,%edx
  mov    -0x9c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  mov    -0xa0(%rbp),%eax
  cltq
  mov    %dl,-0x90(%rbp,%rax,1)
  addl   $0x1,-0xa0(%rbp)
L18:
  mov    -0xa0(%rbp),%eax
  cmp    -0x98(%rbp),%eax
  jl     L21
  lea    -0x90(%rbp),%rax
  mov    $0x0,%ecx
  mov    $0x0,%edx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <printMessage@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L19
  call   <__stack_chk_fail@plt>
L19:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D59
datatype: string
name: disassemble_data
arguments: label: D55
datatype: string
name: disassemble_data
arguments: label: D47
datatype: string
name: disassemble_data
arguments: label: D56
datatype: string
name: disassemble_data
arguments: label: D37
datatype: string

tool: D59: Word to Encrypt or Decrypt? 

tool: D55:  %s

tool: D47: Encrypt (0) or Decrypt (1)?

tool: D56:  %d

tool: D37: Encrypt Key?

assistant: ```c
void wordConvert(void) {
  char word[128];
  int isEncrypt = 0, encryptValue = 0, wordLength = 0, i = 0, tempKey = 0, newValue = 0;
  printMessage("Word to Encrypt or Decrypt? ", 0, 0, 0);
  scanf(" %s", &word);
  printMessage("Encrypt (0) or Decrypt (1)?", 0, 0, 0);
  scanf(" %d", &isEncrypt);
  printMessage("Encrypt Key?", 0, 0, 0);
  scanf(" %d", &encryptValue);
  if (isEncrypt == 1) {
    encryptValue = -encryptValue;
  }
  wordLength = strlen(word);
  for (i = 0; i < wordLength; i++) {
    word[i] = toupper(word[i]);
  }
  for (i = 0; i < wordLength; i++) {
    tempKey = encryptValue;
    newValue = (int)word[i] + tempKey;
    if (newValue < 65) {
      tempKey = (newValue - 65) + 1;
      word[i] = 'Z';
    }
    if (newValue > 90) {
      tempKey = (newValue - 90) - 1;
      word[i] = 'A';
    }
    word[i] = (char)((int)word[i] + tempKey);
  }
  printMessage(word, 1, 0, 0);
}
```