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

```asm
<print_mm_fpor>:
  endbr64
  mov    %rsi,%r8
  push   %rbx
  mov    %edi,%esi
  mov    %rdi,%rbx
  test   %r8,%r8
  jne    L67
  lea    D20(%rip),%rdi
  call   <printf@plt>
  test   $0x8,%bl
  je     L7
L12:
  mov    $0x8,%esi
  lea    D75(%rip),%rdi
  call   <printf@plt>
  test   $0x4,%bl
  je     L80
L83:
  mov    $0x4,%esi
  lea    D82(%rip),%rdi
  and    $0x3,%ebx
  call   <printf@plt>
  cmp    $0x2,%rbx
  je     L43
L22:
  cmp    $0x3,%rbx
  je     L71
  cmp    $0x1,%rbx
  je     L78
  xor    %esi,%esi
  lea    D92(%rip),%rdi
  pop    %rbx
  jmp    1050 <printf@plt>
  xchg   %ax,%ax
L67:
  lea    D25(%rip),%rdi
  call   <printf@plt>
  test   $0x8,%bl
  jne    L12
L7:
  xor    %esi,%esi
  lea    D5(%rip),%rdi
  call   <printf@plt>
  test   $0x4,%bl
  jne    L83
L80:
  xor    %esi,%esi
  lea    D58(%rip),%rdi
  and    $0x3,%ebx
  call   <printf@plt>
  cmp    $0x2,%rbx
  jne    L22
L43:
  mov    $0x2,%esi
  lea    D30(%rip),%rdi
  pop    %rbx
  jmp    1050 <printf@plt>
  nopl   (%rax)
L78:
  mov    $0x1,%esi
  lea    D47(%rip),%rdi
  pop    %rbx
  jmp    1050 <printf@plt>
  nopw   0x0(%rax,%rax,1)
L71:
  mov    $0x3,%esi
  lea    D48(%rip),%rdi
  pop    %rbx
  jmp    1050 <printf@plt>
```

tool_calls: name: disassemble_data
arguments: tag: D20
data_type: string
name: disassemble_data
arguments: tag: D75
data_type: string
name: disassemble_data
arguments: tag: D82
data_type: string
name: disassemble_data
arguments: tag: D92
data_type: string
name: disassemble_data
arguments: tag: D25
data_type: string
name: disassemble_data
arguments: tag: D5
data_type: string
name: disassemble_data
arguments: tag: D58
data_type: string
name: disassemble_data
arguments: tag: D30
data_type: string
name: disassemble_data
arguments: tag: D47
data_type: string
name: disassemble_data
arguments: tag: D48
data_type: string

tool: D20:     FPOR    = 0x%08X


tool: D75:                        %01x Low power BOR enabled, when main BOR disabled


tool: D82:                        %01x Retention regulator disabled


tool: D92:                        %01x Brown-out Reset is disabled in HWM SBOREN bit is disabled


tool: D25:    AFPOR    = 0x%08X


tool: D5:                        %01x Low power BOR disabled


tool: D58:                        %01x Retention regulator enabled, RETEN in sleep


tool: D30:                        %01x Brown-out Reset in enabled only while device is active and disabled in Sleep; SBOREN bit is disabled


tool: D47:                        %01x Brown-out Reset is controlled with the SBOREN bit setting


tool: D48:                        %01x Brown-out Reset enabled in HW, SBOREN bit is disabled


assistant: ```c
void print_mm_fpor(uint32_t fpor, uint32_t alternate) {
  if (0 == alternate) {
    printf("    FPOR    = 0x%08X\n", fpor);
  } else {
    printf("   AFPOR    = 0x%08X\n", fpor);
  }
  if (fpor & 0x00000008) {
    printf("                       %01x Low power BOR enabled, when main BOR disabled\n", 0x00000008);
  } else {
    printf("                       %01x Low power BOR disabled\n", 0);
  }
  if (fpor & 0x00000004) {
    printf("                       %01x Retention regulator disabled\n", 0x00000004);
  } else {
    printf("                       %01x Retention regulator enabled, RETEN in sleep\n", 0);
  }
  switch (fpor & 0x00000003) {
  case 0x00000003:
    printf("                       %01x Brown-out Reset enabled in HW, SBOREN bit is disabled\n", 0x00000003);
    break;
  case 0x00000002:
    printf("                       %01x Brown-out Reset in enabled only while device is active and disabled in Sleep; SBOREN bit is disabled\n", 0x00000002);
    break;
  case 0x00000001:
    printf("                       %01x Brown-out Reset is controlled with the SBOREN bit setting\n", 0x00000001);
    break;
  case 0x00000000:
    printf("                       %01x Brown-out Reset is disabled in HWM SBOREN bit is disabled\n", 0x00000000);
    break;
  }
}
```