user: 下面的汇编指令对应的C源代码是什么：

```asm
<usage>:
  endbr64
  push   %r13
  mov    %rdx,%r13
  push   %r12
  mov    %edi,%r12d
  lea    D74(%rip),%rdi
  push   %rbp
  mov    %rsi,%rbp
  call   <puts@plt>
  lea    D163(%rip),%rdi
  call   <puts@plt>
  lea    D55(%rip),%rdi
  call   <puts@plt>
  lea    D130(%rip),%rdi
  call   <puts@plt>
  lea    D330(%rip),%rdi
  call   <puts@plt>
  lea    D370(%rip),%rdi
  call   <puts@plt>
  lea    D250(%rip),%rdi
  call   <puts@plt>
  lea    D218(%rip),%rdi
  call   <puts@plt>
  lea    D146(%rip),%rdi
  call   <puts@plt>
  lea    D365(%rip),%rdi
  call   <puts@plt>
  lea    D207(%rip),%rdi
  call   <puts@plt>
  lea    D64(%rip),%rdi
  call   <puts@plt>
  lea    D191(%rip),%rdi
  call   <puts@plt>
  lea    D160(%rip),%rdi
  call   <puts@plt>
  lea    D287(%rip),%rdi
  call   <puts@plt>
  lea    D336(%rip),%rdi
  call   <puts@plt>
  lea    D12(%rip),%rdi
  call   <puts@plt>
  lea    D373(%rip),%rdi
  call   <puts@plt>
  lea    D135(%rip),%rdi
  call   <puts@plt>
  lea    D305(%rip),%rdi
  call   <puts@plt>
  lea    D66(%rip),%rdi
  call   <puts@plt>
  lea    D311(%rip),%rdi
  call   <puts@plt>
  lea    D276(%rip),%rdi
  call   <puts@plt>
  lea    D271(%rip),%rdi
  call   <puts@plt>
  lea    D63(%rip),%rdi
  call   <puts@plt>
  lea    D371(%rip),%rdi
  call   <puts@plt>
  lea    D304(%rip),%rdi
  call   <puts@plt>
  lea    D27(%rip),%rdi
  call   <puts@plt>
  lea    D292(%rip),%rdi
  call   <puts@plt>
  lea    D235(%rip),%rdi
  call   <puts@plt>
  lea    D52(%rip),%rdi
  call   <puts@plt>
  lea    D230(%rip),%rdi
  call   <puts@plt>
  lea    D136(%rip),%rdi
  call   <puts@plt>
  lea    D301(%rip),%rdi
  call   <puts@plt>
  lea    D65(%rip),%rdi
  call   <puts@plt>
  lea    D315(%rip),%rdi
  call   <puts@plt>
  lea    D281(%rip),%rdi
  call   <puts@plt>
  test   %rbp,%rbp
  je     L0
  test   %r13,%r13
  jne    L12
L0:
  pop    %rbp
  mov    %r12d,%edi
  pop    %r12
  pop    %r13
  jmp    1090 <exit@plt>
  nopl   (%rax)
L12:
  mov    %r13,%rdx
  mov    %rbp,%rsi
  lea    D128(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  pop    %rbp
  mov    %r12d,%edi
  pop    %r12
  pop    %r13
  jmp    1090 <exit@plt>
```

tool_calls: name: unpack_data
arguments: label: D74
type_infered: string
name: unpack_data
arguments: label: D163
type_infered: string
name: unpack_data
arguments: label: D55
type_infered: string
name: unpack_data
arguments: label: D130
type_infered: string
name: unpack_data
arguments: label: D330
type_infered: string
name: unpack_data
arguments: label: D370
type_infered: string
name: unpack_data
arguments: label: D250
type_infered: string
name: unpack_data
arguments: label: D218
type_infered: string
name: unpack_data
arguments: label: D146
type_infered: string
name: unpack_data
arguments: label: D365
type_infered: string
name: unpack_data
arguments: label: D207
type_infered: string
name: unpack_data
arguments: label: D64
type_infered: string
name: unpack_data
arguments: label: D191
type_infered: string
name: unpack_data
arguments: label: D160
type_infered: string
name: unpack_data
arguments: label: D287
type_infered: string
name: unpack_data
arguments: label: D336
type_infered: string
name: unpack_data
arguments: label: D12
type_infered: string
name: unpack_data
arguments: label: D373
type_infered: string
name: unpack_data
arguments: label: D135
type_infered: string
name: unpack_data
arguments: label: D305
type_infered: string
name: unpack_data
arguments: label: D66
type_infered: string
name: unpack_data
arguments: label: D311
type_infered: string
name: unpack_data
arguments: label: D276
type_infered: string
name: unpack_data
arguments: label: D271
type_infered: string
name: unpack_data
arguments: label: D63
type_infered: string
name: unpack_data
arguments: label: D371
type_infered: string
name: unpack_data
arguments: label: D304
type_infered: string
name: unpack_data
arguments: label: D27
type_infered: string
name: unpack_data
arguments: label: D292
type_infered: string
name: unpack_data
arguments: label: D235
type_infered: string
name: unpack_data
arguments: label: D52
type_infered: string
name: unpack_data
arguments: label: D230
type_infered: string
name: unpack_data
arguments: label: D136
type_infered: string
name: unpack_data
arguments: label: D301
type_infered: string
name: unpack_data
arguments: label: D65
type_infered: string
name: unpack_data
arguments: label: D315
type_infered: string
name: unpack_data
arguments: label: D281
type_infered: string
name: unpack_data
arguments: label: D128
type_infered: string

tool: D74: 
Usage: cdisk [options] output


tool: D163: Options:


tool: D55: 	--partN=startsect,sectors,image.img{,type}

tool: D130: 		Where N is a primary partition number (1, 2, 3, 4).

tool: D330: 		startsect is where this partition starts on disk

tool: D370: 		and sectors is the amount of sectors in the

tool: D250: 		partition. image.img is the image for the partition.

tool: D218: 		If the image is not large enough to fill the

tool: D146: 		partition, the rest of the partition is zeroed.

tool: D365: 		/dev/zero can be used as input to zero the entire

tool: D207: 		partition. A type can also be passed, which must

tool: D64: 		be one of the following: EXT2, EXT3, EXT4, FAT,

tool: D191: 		FAT32, NTFS or SWAP.


tool: D160: 	-n sectors

tool: D287: 		This option allows you to specify the amount of

tool: D336: 		sectors the disk has.


tool: D12: 	-s disksize

tool: D373: 		This option allows you to specify the size of the

tool: D135: 		disk in bytes. M and G can also suffix the number

tool: D305: 		to specify either megabytes (1024 bytes) or gigabytes

tool: D66: 		(1024 megabytes).


tool: D311: 	-l sectsize

tool: D276: 		This options allows you to specify the size of a

tool: D271: 		single disk sector. This option is REQUIRED This

tool: D63: 		number must be one of: 512, 1024, 2048 or 4096


tool: D371: 	-b boot.img

tool: D304: 		This option can be used to supply primary boot

tool: D27: 		code. The code must be less than 446 bytes.


tool: D292: 	--stage-2=boot-stage2.elf,start-sector,sector-count

tool: D235: 		This option can be used to supply second stage

tool: D52: 		boot code. The second stage will be placed at the

tool: D230: 		start sector with the given amount of sectors. This

tool: D136: 		does NOT us up an entry in the partition table.


tool: D301: 	-h or --help

tool: D65: 		Show this help menu.


tool: D315: 	--version

tool: D281: 		Show version information


tool: D128: %s: %s



assistant: ```c
void usage(int ret, const char *err, const char *argument) {
  printf("\nUsage: cdisk [options] output\n\n");
  printf("Options:\n\n");
  printf("\t--partN=startsect,sectors,image.img{,type}\n");
  printf("\t\tWhere N is a primary partition number (1, 2, 3, 4).\n");
  printf("\t\tstartsect is where this partition starts on disk\n");
  printf("\t\tand sectors is the amount of sectors in the\n");
  printf("\t\tpartition. image.img is the image for the partition.\n");
  printf("\t\tIf the image is not large enough to fill the\n");
  printf("\t\tpartition, the rest of the partition is zeroed.\n");
  printf("\t\t/dev/zero can be used as input to zero the entire\n");
  printf("\t\tpartition. A type can also be passed, which must\n");
  printf("\t\tbe one of the following: EXT2, EXT3, EXT4, FAT,\n");
  printf("\t\tFAT32, NTFS or SWAP.\n\n");
  printf("\t-n sectors\n");
  printf("\t\tThis option allows you to specify the amount of\n");
  printf("\t\tsectors the disk has.\n\n");
  printf("\t-s disksize\n");
  printf("\t\tThis option allows you to specify the size of the\n");
  printf("\t\tdisk in bytes. M and G can also suffix the number\n");
  printf("\t\tto specify either megabytes (1024 bytes) or gigabytes\n");
  printf("\t\t(1024 megabytes).\n\n");
  printf("\t-l sectsize\n");
  printf("\t\tThis options allows you to specify the size of a\n");
  printf("\t\tsingle disk sector. This option is REQUIRED This\n");
  printf("\t\tnumber must be one of: 512, 1024, 2048 or 4096\n\n");
  printf("\t-b boot.img\n");
  printf("\t\tThis option can be used to supply primary boot\n");
  printf("\t\tcode. The code must be less than 446 bytes.\n\n");
  printf("\t--stage-2=boot-stage2.elf,start-sector,sector-count\n");
  printf("\t\tThis option can be used to supply second stage\n");
  printf("\t\tboot code. The second stage will be placed at the\n");
  printf("\t\tstart sector with the given amount of sectors. This\n");
  printf("\t\tdoes NOT us up an entry in the partition table.\n\n");
  printf("\t-h or --help\n");
  printf("\t\tShow this help menu.\n\n");
  printf("\t--version\n");
  printf("\t\tShow version information\n\n");
  if (err && argument)
    printf("%s: %s\n\n", err, argument);
  exit(ret);
}
```