user: Demonstrate the C code that generates the assembly output below:

```asm
<dma_mm2s_status>:
  endbr64
  push   %rbx
  mov    $0x4,%esi
  call   <dma_get@plt>
  mov    $0x4,%edx
  lea    D138(%rip),%rdi
  mov    %eax,%ebx
  mov    %eax,%esi
  xor    %eax,%eax
  call   <printf@plt>
  test   $0x1,%bl
  je     L149
  xor    %eax,%eax
  lea    D47(%rip),%rdi
  call   <printf@plt>
  test   $0x2,%bl
  jne    L0
L175:
  test   $0x8,%bl
  jne    L183
L23:
  test   $0x10,%bl
  jne    L55
L174:
  test   $0x20,%bl
  jne    L103
L168:
  test   $0x40,%bl
  jne    L110
L177:
  test   $0x1,%bh
  jne    L107
L33:
  test   $0x2,%bh
  jne    L160
L145:
  test   $0x4,%bh
  jne    L164
L186:
  test   $0x10,%bh
  jne    L204
L62:
  test   $0x20,%bh
  jne    L173
L189:
  and    $0x40,%bh
  jne    L21
L207:
  mov    $0xa,%edi
  pop    %rbx
  jmp    1070 <putchar@plt>
  nopl   0x0(%rax,%rax,1)
L149:
  xor    %eax,%eax
  lea    D91(%rip),%rdi
  call   <printf@plt>
  test   $0x2,%bl
  je     L175
L0:
  xor    %eax,%eax
  lea    D54(%rip),%rdi
  call   <printf@plt>
  test   $0x8,%bl
  je     L23
L183:
  xor    %eax,%eax
  lea    D77(%rip),%rdi
  call   <printf@plt>
  test   $0x10,%bl
  je     L174
L55:
  xor    %eax,%eax
  lea    D20(%rip),%rdi
  call   <printf@plt>
  test   $0x20,%bl
  je     L168
L103:
  xor    %eax,%eax
  lea    D13(%rip),%rdi
  call   <printf@plt>
  test   $0x40,%bl
  je     L177
L110:
  xor    %eax,%eax
  lea    D114(%rip),%rdi
  call   <printf@plt>
  test   $0x1,%bh
  je     L33
L107:
  xor    %eax,%eax
  lea    D82(%rip),%rdi
  call   <printf@plt>
  test   $0x2,%bh
  je     L145
L160:
  xor    %eax,%eax
  lea    D78(%rip),%rdi
  call   <printf@plt>
  test   $0x4,%bh
  je     L186
L164:
  xor    %eax,%eax
  lea    D85(%rip),%rdi
  call   <printf@plt>
  test   $0x10,%bh
  je     L62
L204:
  xor    %eax,%eax
  lea    D83(%rip),%rdi
  call   <printf@plt>
  test   $0x20,%bh
  je     L189
L173:
  xor    %eax,%eax
  lea    D136(%rip),%rdi
  call   <printf@plt>
  and    $0x40,%bh
  je     L207
L21:
  lea    D31(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  pop    %rbx
  jmp    1070 <putchar@plt>
```

tool_calls: name: extract_symbolic_data
arguments: label: D138
type_guessed: string
name: extract_symbolic_data
arguments: label: D47
type_guessed: string
name: extract_symbolic_data
arguments: label: D91
type_guessed: string
name: extract_symbolic_data
arguments: label: D54
type_guessed: string
name: extract_symbolic_data
arguments: label: D77
type_guessed: string
name: extract_symbolic_data
arguments: label: D20
type_guessed: string
name: extract_symbolic_data
arguments: label: D13
type_guessed: string
name: extract_symbolic_data
arguments: label: D114
type_guessed: string
name: extract_symbolic_data
arguments: label: D82
type_guessed: string
name: extract_symbolic_data
arguments: label: D78
type_guessed: string
name: extract_symbolic_data
arguments: label: D85
type_guessed: string
name: extract_symbolic_data
arguments: label: D83
type_guessed: string
name: extract_symbolic_data
arguments: label: D136
type_guessed: string
name: extract_symbolic_data
arguments: label: D31
type_guessed: string

tool: D138: Memory-mapped to stream status (0x%08x@0x%02x):

tool: D47:  halted

tool: D91:  running

tool: D54:  idle

tool: D77:  SGIncld

tool: D20:  DMAIntErr

tool: D13:  DMASlvErr

tool: D114:  DMADecErr

tool: D82:  SGIntErr

tool: D78:  SGSlvErr

tool: D85:  SGDecErr

tool: D83:  IOC_Irq

tool: D136:  Dly_Irq

tool: D31:  Err_Irq

assistant: ```c
void dma_mm2s_status(unsigned int *dma_virtual_address) {
  unsigned int status = dma_get(dma_virtual_address, 0x04);
  printf("Memory-mapped to stream status (0x%08x@0x%02x):", status, 0x04);
  if (status & 0x00000001)
    printf(" halted");
  else
    printf(" running");
  if (status & 0x00000002)
    printf(" idle");
  if (status & 0x00000008)
    printf(" SGIncld");
  if (status & 0x00000010)
    printf(" DMAIntErr");
  if (status & 0x00000020)
    printf(" DMASlvErr");
  if (status & 0x00000040)
    printf(" DMADecErr");
  if (status & 0x00000100)
    printf(" SGIntErr");
  if (status & 0x00000200)
    printf(" SGSlvErr");
  if (status & 0x00000400)
    printf(" SGDecErr");
  if (status & 0x00001000)
    printf(" IOC_Irq");
  if (status & 0x00002000)
    printf(" Dly_Irq");
  if (status & 0x00004000)
    printf(" Err_Irq");
  printf("\n");
}
```