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

```asm
<display>:
  endbr64
  push   %r15
  lea    D30(%rip),%rdi
  lea    D91(%rip),%r15
  push   %r14
  lea    D59(%rip),%r14
  push   %r13
  lea    D108(%rip),%r13
  push   %r12
  lea    D81(%rip),%r12
  push   %rbp
  lea    D83(%rip),%rbp
  push   %rbx
  lea    D71(%rip),%rbx
  sub    $0x38,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  movl   $0x4,0x24(%rsp)
  call   <printf@plt>
  lea    D22(%rip),%rdi
  call   <printf@plt>
  lea    0x24(%rsp),%rax
  mov    %rax,0x8(%rsp)
  lea    0x22(%rsp),%rax
  mov    %rax,0x10(%rsp)
  lea    0x23(%rsp),%rax
  mov    %rax,0x18(%rsp)
  nopw   0x0(%rax,%rax,1)
L44:
  mov    %r15,%rdi
  call   <printf@plt>
  mov    %r14,%rdi
  call   <printf@plt>
  mov    %r13,%rdi
  call   <printf@plt>
  mov    %r12,%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  mov    %rbx,%rdi
  call   <printf@plt>
  mov    0x8(%rsp),%rsi
  lea    D45(%rip),%rdi
  xor    %eax,%eax
  call   <scanf@plt>
  mov    0x24(%rsp),%eax
  cmp    $0x3,%eax
  jg     L32
  cmp    $0x1,%eax
  jg     L29
  jne    L44
  xor    %eax,%eax
  call   <add_node@plt>
L29:
  lea    D103(%rip),%rdi
  call   <printf@plt>
  mov    0x10(%rsp),%rdx
  mov    0x18(%rsp),%rsi
  xor    %eax,%eax
  lea    D61(%rip),%rdi
  call   <scanf@plt>
  jmp    L44
L32:
  cmp    $0x4,%eax
  jne    L44
  xor    %edi,%edi
  call   <exit@plt>
  jmp    L44
```

tool_calls: name: disassemble_data
arguments: label: D30
data_type: string
name: disassemble_data
arguments: label: D91
data_type: string
name: disassemble_data
arguments: label: D59
data_type: string
name: disassemble_data
arguments: label: D108
data_type: string
name: disassemble_data
arguments: label: D81
data_type: string
name: disassemble_data
arguments: label: D83
data_type: string
name: disassemble_data
arguments: label: D71
data_type: string
name: disassemble_data
arguments: label: D22
data_type: string
name: disassemble_data
arguments: label: D45
data_type: string
name: disassemble_data
arguments: label: D103
data_type: string
name: disassemble_data
arguments: label: D61
data_type: string

tool: D30: 

	 Telephone Directory

tool: D91: 
	 Menu

tool: D59: 
	 1. Add Sudirriber

tool: D108: 
	 2. Search Suscriber

tool: D81: 
	 3. Remove Suscriber

tool: D83: 
	 4. Exit


tool: D71: 

	 ::Enter Your Choice::

tool: D22: 
	 ===================

tool: D45: %d

tool: D103: 

	 Would you like to continue:::(y/n)

tool: D61: %c%c

assistant: ```c
void display(void) {
  int choice = 4;
  char cnt, temp;
  printf("\n\n\t Telephone Directory");
  printf("\n\t ===================");
  do {
    printf("\n\t Menu");
    printf("\n\t 1. Add Sudirriber");
    printf("\n\t 2. Search Suscriber");
    printf("\n\t 3. Remove Suscriber");
    printf("\n\t 4. Exit\n");
    printf("\n\n\t ::Enter Your Choice::");
    scanf("%d", &choice);
    switch (choice) {
    case 1:
      add_node();
      break;
    case 2:
      break;
    case 3:
      break;
    case 4:
      exit(0);
    default:
      continue;
    }
    printf("\n\n\t Would you like to continue:::(y/n)");
    scanf("%c%c", &temp, &cnt);
  } while (cnt != 'n' || cnt != 'N');
}
```