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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x240,%rsp
  mov    %edi,-0x234(%rbp)
  mov    %rsi,-0x240(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  cmpl   $0x4,-0x234(%rbp)
  je     L1
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  call   <perror@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L1:
  mov    -0x240(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x224(%rbp)
  mov    -0x240(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  lea    D0(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x220(%rbp)
  mov    -0x240(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  lea    D41(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x218(%rbp)
  movabs $0x3430333032303130,%rax
  movabs $0x3830373036303530,%rdx
  mov    %rax,-0x70(%rbp)
  mov    %rdx,-0x68(%rbp)
  movabs $0x4330423041303930,%rax
  movabs $0x3031463045304430,%rdx
  mov    %rax,-0x60(%rbp)
  mov    %rdx,-0x58(%rbp)
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x48(%rbp)
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  movl   $0x0,-0x10(%rbp)
  lea    -0x1d0(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stringToBlock@plt>
  movl   $0x0,-0x228(%rbp)
  movl   $0x0,-0x228(%rbp)
  jmp    L15
L20:
  lea    -0x150(%rbp),%rdx
  mov    -0x220(%rbp),%rax
  lea    D32(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fscanf@plt>
  lea    -0x210(%rbp),%rdx
  lea    -0x150(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <stringToBlock@plt>
  lea    -0x190(%rbp),%rdx
  lea    -0x1d0(%rbp),%rcx
  lea    -0x210(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <AES128_ECB_encrypt@plt>
  lea    -0xe0(%rbp),%rdx
  lea    -0x190(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <blockToSTring@plt>
  lea    -0xe0(%rbp),%rdx
  mov    -0x218(%rbp),%rax
  lea    D11(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  addl   $0x1,-0x228(%rbp)
L15:
  mov    -0x228(%rbp),%eax
  cmp    -0x224(%rbp),%eax
  jl     L20
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L28
  call   <__stack_chk_fail@plt>
L28:
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D3
type: string
name: read_data
arguments: tag: D0
type: string
name: read_data
arguments: tag: D41
type: string
name: read_data
arguments: tag: D32
type: string
name: read_data
arguments: tag: D11
type: string

tool: D3: Not enough args. eg : ./program <no of samples> <plain text> <cipher text>

tool: D0: r

tool: D41: w

tool: D32: %s

tool: D11: %s


assistant: ```c
int main(int argc, char **argv) {
  if (argc != 4) {
    perror("Not enough args. eg : ./program <no of samples> <plain text> <cipher text>");
    exit(1);
  }
  int count = atoi(argv[1]);
  FILE *input = fopen(argv[2], "r");
  FILE *output = fopen(argv[3], "w");
  uint8_t inp[16];
  uint8_t key[16];
  uint8_t out[16];
  char cinp[100];
  char cout[100];
  char ckey[100] = "0102030405060708090A0B0C0D0E0F10";
  stringToBlock(ckey, key);
  int i = 0;
  for (i = 0; i < count; i++) {
    fscanf(input, "%s", cinp);
    stringToBlock(cinp, inp);
    AES128_ECB_encrypt(inp, key, out);
    blockToSTring(out, cout);
    fprintf(output, "%s\n", cout);
  }
  return 0;
}
```