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

```asm
<print_control1_reg>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    0x2c(%rax),%eax
  mov    %eax,-0x4(%rbp)
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x4(%rbp),%eax
  sar    $0x1a,%eax
  and    $0x1,%eax
  mov    %eax,%esi
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  sar    $0x19,%eax
  and    $0x1,%eax
  mov    %eax,%esi
  lea    D14(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  sar    $0x18,%eax
  and    $0x1,%eax
  mov    %eax,%esi
  lea    D70(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  sar    $0x10,%eax
  and    $0xf,%eax
  mov    %eax,%esi
  lea    D71(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  sar    $0x8,%eax
  movzbl %al,%eax
  mov    %eax,%esi
  lea    D101(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  sar    $0x6,%eax
  and    $0x3,%eax
  mov    %eax,%esi
  lea    D104(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  sar    $0x5,%eax
  and    $0x1,%eax
  mov    %eax,%esi
  lea    D69(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  sar    $0x2,%eax
  and    $0x1,%eax
  mov    %eax,%esi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  sar    %eax
  and    $0x1,%eax
  mov    %eax,%esi
  lea    D8(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  and    $0x1,%eax
  mov    %eax,%esi
  lea    D52(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D50
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D91
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D14
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D70
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D71
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D101
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D104
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D69
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D29
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D8
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D52
type_guessed: string

tool: D50: CONTROL1:--------------------------------------

tool: D91: SRST_DATA:     %i


tool: D14: SRST_CMD:      %i


tool: D70: SRST_HC:       %i


tool: D71: DATA_TOUNIT:   %i


tool: D101: CLK_FREQ8:     %i


tool: D104: CLK_FREQ_MS2:  %i


tool: D69: CLK_GENSEL:    %i


tool: D29: CLK_EN:        %i


tool: D8: CLK_STABLE:    %i


tool: D52: CLK_INTLEN:    %i


assistant: ```c
void print_control1_reg(uint32_t *emmc) {
  uint32_t ctrl1 = (*(emmc + 0x2C / 4));
  printf("CONTROL1:--------------------------------------\n");
  printf("SRST_DATA:     %i\n", ((ctrl1 & (1 << 26)) != 0) ? 1 : 0);
  printf("SRST_CMD:      %i\n", ((ctrl1 & (1 << 25)) != 0) ? 1 : 0);
  printf("SRST_HC:       %i\n", ((ctrl1 & (1 << 24)) != 0) ? 1 : 0);
  printf("DATA_TOUNIT:   %i\n", ((ctrl1 & 0x0F0000) >> 16));
  printf("CLK_FREQ8:     %i\n", ((ctrl1 & 0xFF00) >> 8));
  printf("CLK_FREQ_MS2:  %i\n", ((ctrl1 & 0xC0) >> 6));
  printf("CLK_GENSEL:    %i\n", ((ctrl1 & (1 << 5)) != 0) ? 1 : 0);
  printf("CLK_EN:        %i\n", ((ctrl1 & (1 << 2)) != 0) ? 1 : 0);
  printf("CLK_STABLE:    %i\n", ((ctrl1 & (1 << 1)) != 0) ? 1 : 0);
  printf("CLK_INTLEN:    %i\n", ((ctrl1 & (1 << 0)) != 0) ? 1 : 0);
}
```