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

```asm
<print_help>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %edi,-0x4(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D122(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x10(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D111(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D159(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D168(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D115(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D161(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D189(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D17(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D52(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D59(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D100(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D109(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D83(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D128(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D166(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D88(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  nop
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D122
type_infered: string
name: read_data
arguments: tag: D111
type_infered: string
name: read_data
arguments: tag: D159
type_infered: string
name: read_data
arguments: tag: D168
type_infered: string
name: read_data
arguments: tag: D29
type_infered: string
name: read_data
arguments: tag: D115
type_infered: string
name: read_data
arguments: tag: D161
type_infered: string
name: read_data
arguments: tag: D189
type_infered: string
name: read_data
arguments: tag: D17
type_infered: string
name: read_data
arguments: tag: D52
type_infered: string
name: read_data
arguments: tag: D59
type_infered: string
name: read_data
arguments: tag: D27
type_infered: string
name: read_data
arguments: tag: D100
type_infered: string
name: read_data
arguments: tag: D22
type_infered: string
name: read_data
arguments: tag: D109
type_infered: string
name: read_data
arguments: tag: D83
type_infered: string
name: read_data
arguments: tag: D128
type_infered: string
name: read_data
arguments: tag: D166
type_infered: string
name: read_data
arguments: tag: D88
type_infered: string

tool: D122: 
		%s - Linux console webcam screenshot utility



tool: D111: Usage: %s [OPTIONS]


tool: D159: 
Options:

tool: D168: 	--help		-h	Prints this help.

tool: D29: 	--device dev	-d dev	Works with the dev device (default /dev/video0)

tool: D115: 	--outdir dir	-o dir	Saves all output in dir (default /tmp)

tool: D161: 	--format fmt	-f fmt	Saves images in the fmt format (see below)

tool: D189: 	--info		-i	Prints info about the video device and stops.

tool: D17: 	--width num	-W num	Sets the desired width (if the camera supports it)

tool: D52: 	--height num	-H num	Sets the desired height (if the camera supports it)

tool: D59: 	--pipe file	-p file	Uses named pipe file as output for images

tool: D27: 	--shm id	-s id	Uses shared memory as output for images. See below for more info

tool: D100: 
Image formats (fmt):

tool: D22: 	rgb - raw rqb binary file

tool: D109: 	bmp - bmp image (default)

tool: D83: 
Option --shm id / -s id:

tool: D128: 	If you choose this option camshot will store the images from the camera to a region of memory which it will share with a key id so a users process can use this region for its input. The writes to this region are protected  by a semaphore with the same key as the memory region. It is important that the user process uses this semaphore while reading the buffer!

tool: D166: 
Author:

tool: D88: 	This software was written by Gabriel Zabusek (gabriel.zabusek@gmail.com)

assistant: ```c
void print_help(int argc, char **argv) {
  printf("\n\t\t%s - Linux console webcam screenshot utility\n\n", argv[0]);
  printf("Usage: %s [OPTIONS]\n", argv[0]);
  printf("\nOptions:\n");
  printf("\t--help\t\t-h\tPrints this help.\n");
  printf("\t--device dev\t-d dev\tWorks with the dev device (default /dev/video0)\n");
  printf("\t--outdir dir\t-o dir\tSaves all output in dir (default /tmp)\n");
  printf("\t--format fmt\t-f fmt\tSaves images in the fmt format (see below)\n");
  printf("\t--info\t\t-i\tPrints info about the video device and stops.\n");
  printf("\t--width num\t-W num\tSets the desired width (if the camera supports it)\n");
  printf("\t--height num\t-H num\tSets the desired height (if the camera supports it)\n");
  printf("\t--pipe file\t-p file\tUses named pipe file as output for images\n");
  printf("\t--shm id\t-s id\tUses shared memory as output for images. See below for more info\n");
  printf("\nImage formats (fmt):\n");
  printf("\trgb - raw rqb binary file\n");
  printf("\tbmp - bmp image (default)\n");
  printf("\nOption --shm id / -s id:\n");
  printf("\tIf you choose this option camshot will store the images from the camera to a region of memory which it will share with a key id so a users process can use this region for its input. The writes to this region are protected  by a semaphore with the same key as the memory region. It is important that the user process uses this semaphore while reading the buffer!\n");
  printf("\nAuthor:\n");
  printf("\tThis software was written by Gabriel Zabusek (gabriel.zabusek@gmail.com)\n");
}
```