user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<ProcessInputArg>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x4(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    %rdx,-0x18(%rbp)
  mov    %rcx,-0x20(%rbp)
  cmpl   $0x3,-0x4(%rbp)
  jne    L10
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x18(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  jg     L17
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L17:
  mov    -0x10(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x20(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x20(%rbp),%rdx
  mov    (%rdx),%ecx
  cltd
  idiv   %ecx
  mov    %edx,%eax
  test   %eax,%eax
  jle    L47
  mov    -0x20(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x10(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D8(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L47
L10:
  cmpl   $0x1,-0x4(%rbp)
  jne    L13
  mov    -0x10(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D8(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x18(%rbp),%rax
  movl   $0x4,(%rax)
  mov    -0x20(%rbp),%rax
  movl   $0x1,(%rax)
  jmp    L47
L13:
  mov    -0x10(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D8(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L47:
  nop
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D5
data_type: string
name: parse_data
arguments: data_tag: D21
data_type: string
name: parse_data
arguments: data_tag: D8
data_type: string
name: parse_data
arguments: data_tag: D49
data_type: string

tool: D5: [FATAL] matrix size should be larger than 1 (input: %d)


tool: D21: [FATAL] Matrix_size should be multiple of child process number (matrix_size: %d | thread_num: %d)


tool: D8: [Usage] %s <matrix size> <child process number>


tool: D49: [DEMO] matrix size: 4x4 | Use 1 child

assistant: ```c
void ProcessInputArg(int argc, char **argv, int *matrix_size, int *thread_num) {
  if (argc == 3) {
    *matrix_size = atoi(argv[1]);
    if (*matrix_size < 2) {
      printf("[FATAL] matrix size should be larger than 1 (input: %d)\n", *matrix_size);
      exit(1);
    }
    *thread_num = atoi(argv[2]);
    if ((*matrix_size % *thread_num) > 0) {
      printf("[FATAL] Matrix_size should be multiple of child process number (matrix_size: %d | thread_num: %d)\n", *matrix_size, *thread_num);
      printf("[Usage] %s <matrix size> <child process number>\n", argv[0]);
      exit(1);
    }
  } else if (argc == 1) {
    printf("[Usage] %s <matrix size> <child process number>\n", argv[0]);
    printf("[DEMO] matrix size: 4x4 | Use 1 child\n");
    *matrix_size = 4;
    *thread_num = 1;
  } else {
    printf("[Usage] %s <matrix size> <child process number>\n", argv[0]);
  }
}
```