user: 请将以下的汇编代码转换成C语言代码：

```asm
<addq_handler>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  mov    -0x14(%rbp),%eax
  sar    $0x6,%eax
  and    $0x3,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x14(%rbp),%eax
  sar    $0x9,%eax
  and    $0x7,%eax
  mov    %eax,-0x8(%rbp)
  cmpl   $0x0,-0x8(%rbp)
  jne    L21
  movl   $0x8,-0x8(%rbp)
L21:
  mov    -0x14(%rbp),%eax
  mov    %eax,%edi
  call   <ea_mode@plt>
  cmp    $0x1,%eax
  jne    L6
  mov    -0x8(%rbp),%eax
  mov    %eax,%esi
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L11
L6:
  mov    -0x4(%rbp),%eax
  mov    $0x8,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    -0x4(%rbp),%eax
  mov    $0x8,%esi
  mov    %eax,%ecx
  shl    %cl,%esi
  mov    -0x8(%rbp),%eax
  mov    %eax,%ecx
  lea    D33(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  mov    $0x8,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    -0x4(%rbp),%eax
  mov    $0x8,%esi
  mov    %eax,%ecx
  shl    %cl,%esi
  mov    -0x8(%rbp),%eax
  mov    %eax,%ecx
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  mov    $0x8,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    -0x4(%rbp),%eax
  mov    $0x8,%esi
  mov    %eax,%ecx
  shl    %cl,%esi
  mov    -0x8(%rbp),%eax
  mov    %eax,%ecx
  lea    D58(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  mov    $0x8,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%ecx
  mov    -0x8(%rbp),%eax
  mov    %eax,%edx
  mov    %ecx,%esi
  lea    D69(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  mov    $0x8,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,%esi
  lea    D46(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  mov    $0x8,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,%esi
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L11:
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D3
type_infered: string
name: unpack_data
arguments: data_tag: D33
type_infered: string
name: unpack_data
arguments: data_tag: D7
type_infered: string
name: unpack_data
arguments: data_tag: D58
type_infered: string
name: unpack_data
arguments: data_tag: D69
type_infered: string
name: unpack_data
arguments: data_tag: D46
type_infered: string
name: unpack_data
arguments: data_tag: D18
type_infered: string

tool: D3: 	{
		uint32_t result = (uint32_t)(EV + %d);


tool: D33: 	{
		uint%d_t result = (uint%d_t)(EV + %d);


tool: D7: 		SET_C_FLAG((uint%d_t)result < (uint%d_t)%d?1:0);


tool: D58: 		SET_X_FLAG((uint%d_t)result < (uint%d_t)%d?1:0);


tool: D69: 		SET_V_FLAG%d(EV, %d, result);


tool: D46: 		SET_N_FLAG%d(result);


tool: D18: 		SET_Z_FLAG%d(result);


assistant: ```c
int addq_handler(int opcode) {
  int value;
  int op_size = (opcode >> 6) & 3;
  value = (opcode >> 9) & 7;
  if (!value)
    value = 8;
  if (ea_mode(opcode) == 1)
    printf("\t{\n\t\tuint32_t result = (uint32_t)(EV + %d);\n", value);
  else {
    printf("\t{\n\t\tuint%d_t result = (uint%d_t)(EV + %d);\n", 8 << op_size, 8 << op_size, value);
    printf("\t\tSET_C_FLAG((uint%d_t)result < (uint%d_t)%d?1:0);\n", 8 << op_size, 8 << op_size, value);
    printf("\t\tSET_X_FLAG((uint%d_t)result < (uint%d_t)%d?1:0);\n", 8 << op_size, 8 << op_size, value);
    printf("\t\tSET_V_FLAG%d(EV, %d, result);\n", 8 << op_size, value);
    printf("\t\tSET_N_FLAG%d(result);\n", 8 << op_size);
    printf("\t\tSET_Z_FLAG%d(result);\n", 8 << op_size);
  }
  return 0;
}
```