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

```asm
<Month2Int>:
  endbr64
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x8,%rsp
  jmp    L119
  nopl   0x0(%rax)
L28:
  movsbl 0x0(%rbp,%rbx,1),%edi
  call   <toupper@plt>
  mov    %al,0x0(%rbp,%rbx,1)
  add    $0x1,%rbx
L119:
  mov    %rbp,%rdi
  call   <strlen@plt>
  cmp    %ebx,%eax
  jg     L28
  lea    D39(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x1,%eax
  test   %r8,%r8
  jne    L92
L146:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
  nopl   0x0(%rax)
L92:
  lea    D28(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x2,%eax
  test   %r8,%r8
  je     L146
  lea    D53(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x3,%eax
  test   %r8,%r8
  je     L146
  lea    D76(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x4,%eax
  test   %r8,%r8
  je     L146
  lea    D43(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x5,%eax
  test   %r8,%r8
  je     L146
  lea    D56(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x6,%eax
  test   %r8,%r8
  je     L146
  lea    D90(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x7,%eax
  test   %r8,%r8
  je     L146
  lea    D111(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x8,%eax
  test   %r8,%r8
  je     L146
  lea    D125(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x9,%eax
  test   %r8,%r8
  je     L146
  lea    D84(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0xa,%eax
  test   %r8,%r8
  je     L146
  lea    D82(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0xb,%eax
  test   %r8,%r8
  je     L146
  lea    D33(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0xc,%eax
  test   %r8,%r8
  je     L146
  mov    %rbp,%rsi
  lea    D95(%rip),%rdi
  call   <puterr2@plt>
  xor    %eax,%eax
  jmp    L146
```

tool_calls: name: disassemble_data
arguments: data_label: D39
data_type: string
name: disassemble_data
arguments: data_label: D28
data_type: string
name: disassemble_data
arguments: data_label: D53
data_type: string
name: disassemble_data
arguments: data_label: D76
data_type: string
name: disassemble_data
arguments: data_label: D43
data_type: string
name: disassemble_data
arguments: data_label: D56
data_type: string
name: disassemble_data
arguments: data_label: D90
data_type: string
name: disassemble_data
arguments: data_label: D111
data_type: string
name: disassemble_data
arguments: data_label: D125
data_type: string
name: disassemble_data
arguments: data_label: D84
data_type: string
name: disassemble_data
arguments: data_label: D82
data_type: string
name: disassemble_data
arguments: data_label: D33
data_type: string
name: disassemble_data
arguments: data_label: D95
data_type: string

tool: D39: JAN

tool: D28: FEB

tool: D53: MAR

tool: D76: APR

tool: D43: MAY

tool: D56: JUN

tool: D90: JUL

tool: D111: AUG

tool: D125: SEP

tool: D84: OCT

tool: D82: NOV

tool: D33: DEC

tool: D95: ERROR: unrecognized charcter month

assistant: ```c
int Month2Int(char *cmonth) {
  int i;
  for (i = 0; i < (int)strlen(cmonth); i++)
    cmonth[i] = toupper(cmonth[i]);
  if (strcmp(cmonth, "JAN") == 0)
    return (1);
  if (strcmp(cmonth, "FEB") == 0)
    return (2);
  if (strcmp(cmonth, "MAR") == 0)
    return (3);
  if (strcmp(cmonth, "APR") == 0)
    return (4);
  if (strcmp(cmonth, "MAY") == 0)
    return (5);
  if (strcmp(cmonth, "JUN") == 0)
    return (6);
  if (strcmp(cmonth, "JUL") == 0)
    return (7);
  if (strcmp(cmonth, "AUG") == 0)
    return (8);
  if (strcmp(cmonth, "SEP") == 0)
    return (9);
  if (strcmp(cmonth, "OCT") == 0)
    return (10);
  if (strcmp(cmonth, "NOV") == 0)
    return (11);
  if (strcmp(cmonth, "DEC") == 0)
    return (12);
  puterr2("ERROR: unrecognized charcter month", cmonth);
  return (0);
}
```