user: 请从给定的汇编指令推导出C源代码：

```asm
<showhelp>:
  endbr64
  sub    $0x8,%rsp
  lea    D51(%rip),%rdi
  call   <sayln@plt>
  lea    D39(%rip),%rdi
  call   <sayln@plt>
  lea    D305(%rip),%rdi
  call   <sayln@plt>
  lea    D12(%rip),%rdi
  call   <sayln@plt>
  lea    D0(%rip),%rdi
  call   <sayln@plt>
  lea    D87(%rip),%rdi
  call   <sayln@plt>
  lea    D255(%rip),%rdi
  call   <sayln@plt>
  lea    D323(%rip),%rdi
  call   <sayln@plt>
  lea    D239(%rip),%rdi
  call   <sayln@plt>
  lea    D115(%rip),%rdi
  call   <sayln@plt>
  lea    D484(%rip),%rdi
  call   <sayln@plt>
  lea    D32(%rip),%rdi
  call   <sayln@plt>
  lea    D118(%rip),%rdi
  call   <sayln@plt>
  lea    D393(%rip),%rdi
  call   <sayln@plt>
  lea    D481(%rip),%rdi
  call   <sayln@plt>
  lea    D227(%rip),%rdi
  call   <sayln@plt>
  lea    D271(%rip),%rdi
  call   <sayln@plt>
  lea    D311(%rip),%rdi
  call   <sayln@plt>
  lea    D91(%rip),%rdi
  call   <sayln@plt>
  lea    D341(%rip),%rdi
  call   <sayln@plt>
  lea    D427(%rip),%rdi
  call   <sayln@plt>
  lea    D72(%rip),%rdi
  call   <sayln@plt>
  lea    D113(%rip),%rdi
  call   <sayln@plt>
  lea    D93(%rip),%rdi
  call   <sayln@plt>
  lea    D189(%rip),%rdi
  call   <sayln@plt>
  lea    D280(%rip),%rdi
  call   <sayln@plt>
  lea    D150(%rip),%rdi
  call   <sayln@plt>
  lea    D130(%rip),%rdi
  call   <sayln@plt>
  lea    D453(%rip),%rdi
  call   <sayln@plt>
  lea    D384(%rip),%rdi
  call   <sayln@plt>
  lea    D37(%rip),%rdi
  call   <sayln@plt>
  lea    D245(%rip),%rdi
  call   <sayln@plt>
  lea    D435(%rip),%rdi
  call   <sayln@plt>
  lea    D269(%rip),%rdi
  call   <sayln@plt>
  lea    D24(%rip),%rdi
  call   <sayln@plt>
  lea    D76(%rip),%rdi
  call   <sayln@plt>
  lea    D157(%rip),%rdi
  call   <sayln@plt>
  lea    D358(%rip),%rdi
  call   <sayln@plt>
  lea    D402(%rip),%rdi
  call   <sayln@plt>
  lea    D195(%rip),%rdi
  call   <sayln@plt>
  lea    D40(%rip),%rdi
  call   <sayln@plt>
  lea    D399(%rip),%rdi
  call   <sayln@plt>
  lea    D231(%rip),%rdi
  call   <sayln@plt>
  lea    D349(%rip),%rdi
  call   <sayln@plt>
  lea    D241(%rip),%rdi
  call   <sayln@plt>
  lea    D126(%rip),%rdi
  call   <sayln@plt>
  lea    D257(%rip),%rdi
  call   <sayln@plt>
  lea    D208(%rip),%rdi
  call   <sayln@plt>
  lea    D35(%rip),%rdi
  add    $0x8,%rsp
  jmp    1050 <sayln@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D51
type_guessed: string
name: extract_symbolic_data
arguments: tag: D39
type_guessed: string
name: extract_symbolic_data
arguments: tag: D305
type_guessed: string
name: extract_symbolic_data
arguments: tag: D12
type_guessed: string
name: extract_symbolic_data
arguments: tag: D0
type_guessed: string
name: extract_symbolic_data
arguments: tag: D87
type_guessed: string
name: extract_symbolic_data
arguments: tag: D255
type_guessed: string
name: extract_symbolic_data
arguments: tag: D323
type_guessed: string
name: extract_symbolic_data
arguments: tag: D239
type_guessed: string
name: extract_symbolic_data
arguments: tag: D115
type_guessed: string
name: extract_symbolic_data
arguments: tag: D484
type_guessed: string
name: extract_symbolic_data
arguments: tag: D32
type_guessed: string
name: extract_symbolic_data
arguments: tag: D118
type_guessed: string
name: extract_symbolic_data
arguments: tag: D393
type_guessed: string
name: extract_symbolic_data
arguments: tag: D481
type_guessed: string
name: extract_symbolic_data
arguments: tag: D227
type_guessed: string
name: extract_symbolic_data
arguments: tag: D271
type_guessed: string
name: extract_symbolic_data
arguments: tag: D311
type_guessed: string
name: extract_symbolic_data
arguments: tag: D91
type_guessed: string
name: extract_symbolic_data
arguments: tag: D341
type_guessed: string
name: extract_symbolic_data
arguments: tag: D427
type_guessed: string
name: extract_symbolic_data
arguments: tag: D72
type_guessed: string
name: extract_symbolic_data
arguments: tag: D113
type_guessed: string
name: extract_symbolic_data
arguments: tag: D93
type_guessed: string
name: extract_symbolic_data
arguments: tag: D189
type_guessed: string
name: extract_symbolic_data
arguments: tag: D280
type_guessed: string
name: extract_symbolic_data
arguments: tag: D150
type_guessed: string
name: extract_symbolic_data
arguments: tag: D130
type_guessed: string
name: extract_symbolic_data
arguments: tag: D453
type_guessed: string
name: extract_symbolic_data
arguments: tag: D384
type_guessed: string
name: extract_symbolic_data
arguments: tag: D37
type_guessed: string
name: extract_symbolic_data
arguments: tag: D245
type_guessed: string
name: extract_symbolic_data
arguments: tag: D435
type_guessed: string
name: extract_symbolic_data
arguments: tag: D269
type_guessed: string
name: extract_symbolic_data
arguments: tag: D24
type_guessed: string
name: extract_symbolic_data
arguments: tag: D76
type_guessed: string
name: extract_symbolic_data
arguments: tag: D157
type_guessed: string
name: extract_symbolic_data
arguments: tag: D358
type_guessed: string
name: extract_symbolic_data
arguments: tag: D402
type_guessed: string
name: extract_symbolic_data
arguments: tag: D195
type_guessed: string
name: extract_symbolic_data
arguments: tag: D40
type_guessed: string
name: extract_symbolic_data
arguments: tag: D399
type_guessed: string
name: extract_symbolic_data
arguments: tag: D231
type_guessed: string
name: extract_symbolic_data
arguments: tag: D349
type_guessed: string
name: extract_symbolic_data
arguments: tag: D241
type_guessed: string
name: extract_symbolic_data
arguments: tag: D126
type_guessed: string
name: extract_symbolic_data
arguments: tag: D257
type_guessed: string
name: extract_symbolic_data
arguments: tag: D208
type_guessed: string
name: extract_symbolic_data
arguments: tag: D35
type_guessed: string

tool: D51:  ??


tool: D39: Available arguments (use in any order) are:


tool: D305: 	nr		# of repeats to run			ds	  first data set to run

tool: D12: 	cs		cache size(bytes)			s0	  initial container size

tool: D0: 	fb		# of free bursts			g0	  # of buffer segments

tool: D87: 	mk		maximum keys				mb	  maximum bytes

tool: D255: 	or		order of input data			sr	  sampling rate

tool: D323: 	tl		tail length for CPL-bs		tf	  tail factor for CPL-bs

tool: D239: 	wr		output sorted strings		sn    sort variant(s) to run

tool: D115: Arguments are separated by white space and may not contain white space. Each argument must

tool: D484: start with a tag followed by '=' or ', ' and one or more numbers or additional tags.

tool: D32: Tag 'sn' takes a list of sort numbers.  Tag 'vl' takes a second tag, followed by a list

tool: D118: of up to 20 values for the argument specified by the second tag.


tool: D393: Available sorts are:


tool: D481: 	 10	C-bs		Copying burstsort

tool: D227: 	 11	Cf-bs		Same + free bursts set by arg FREEBURSTS

tool: D271: 	 12	Cs-bs		Same + sampling set by arg SAMPLERATE

tool: D311: 	 20	CP-bs		Record burstsort

tool: D91: 	 21	CPf-bs		Same + free bursts set by arg FREEBURSTS

tool: D341: 	 22	CPs-bs		Same + sampling set by arg SAMPLERATE

tool: D427: 	 30	CPL-bs		Paging burstsort

tool: D72: 	 31	CPLf-bs		Same + free bursts set by arg FREEBURSTS

tool: D113: 	 32	CPLs-bs		Same + sampling set by arg SAMPLERATE

tool: D93: Available data sets are:


tool: D189: 	 0	Set 1 of No Duplicates (100, 000 strings)

tool: D280: 	 1	Set 2 of No Duplicates (316, 230 strings)

tool: D150: 	 2	Set 3 of No Duplicates (1, 000, 000 strings)

tool: D130: 	 3	Set 4 of No Duplicates (3, 162, 300 strings)

tool: D453: 	 4	Set 5 of No Duplicates (10, 000, 000 strings)

tool: D384: 	 5	Set 6 of No Duplicates (31, 623, 000 strings)


tool: D37: 	 6	Set 1 of Genome (100, 000 strings)

tool: D245: 	 7	Set 2 of Genome (316, 230 strings)

tool: D435: 	 8	Set 3 of Genome (1, 000, 000 strings)

tool: D269: 	 9	Set 4 of Genome (3, 162, 300 strings)

tool: D24: 	 10 Set 5 of Genome (10, 000, 000 strings)

tool: D76: 	 11 Set 6 of Genome (31, 623, 000 strings)


tool: D157: 	 12	 Set 1 of Random (100, 000 strings)

tool: D358: 	 13	 Set 2 of Random (316, 230 strings)

tool: D402: 	 14	 Set 3 of Random (1, 000, 000 strings)

tool: D195: 	 15	 Set 4 of Random (3, 162, 300 strings)

tool: D40: 	 16	 Set 5 of Random (10, 000, 000 strings)

tool: D399: 	 17	 Set 6 of Random (31, 623, 000 strings)


tool: D231: 	 18	 Set 1 of URL (100, 000 strings)

tool: D349: 	 19	 Set 2 of URL (316, 230 strings)

tool: D241: 	 20	 Set 3 of URL (1, 000, 000 strings)

tool: D126: 	 21	 Set 4 of URL (3, 162, 300 strings)

tool: D257: 	 22	 Set 5 of URL (10, 000, 000 strings)


tool: D208: 	 23	Set 3 of Random Strings, each of length 100 characters


tool: D35: Usage: sn=10, 11, 20 ds=5 nr=1 will run sorts 10, 11 and 20 once on dataset 5.



assistant: ```c
void showhelp() {
  sayln(" ??\n");
  sayln("Available arguments (use in any order) are:\n");
  sayln("	nr		# of repeats to run			ds	  first data set to run");
  sayln("	cs		cache size(bytes)			s0	  initial container size");
  sayln("	fb		# of free bursts			g0	  # of buffer segments");
  sayln("	mk		maximum keys				mb	  maximum bytes");
  sayln("	or		order of input data			sr	  sampling rate");
  sayln("	tl		tail length for CPL-bs		tf	  tail factor for CPL-bs");
  sayln("	wr		output sorted strings		sn    sort variant(s) to run");
  sayln("Arguments are separated by white space and may not contain white space. Each argument must");
  sayln("start with a tag followed by '=' or ', ' and one or more numbers or additional tags.");
  sayln("Tag 'sn' takes a list of sort numbers.  Tag 'vl' takes a second tag, followed by a list");
  sayln("of up to 20 values for the argument specified by the second tag.\n");
  sayln("Available sorts are:\n");
  sayln("	 10	C-bs		Copying burstsort");
  sayln("	 11	Cf-bs		Same + free bursts set by arg FREEBURSTS");
  sayln("	 12	Cs-bs		Same + sampling set by arg SAMPLERATE");
  sayln("	 20	CP-bs		Record burstsort");
  sayln("	 21	CPf-bs		Same + free bursts set by arg FREEBURSTS");
  sayln("	 22	CPs-bs		Same + sampling set by arg SAMPLERATE");
  sayln("	 30	CPL-bs		Paging burstsort");
  sayln("	 31	CPLf-bs		Same + free bursts set by arg FREEBURSTS");
  sayln("	 32	CPLs-bs		Same + sampling set by arg SAMPLERATE");
  sayln("Available data sets are:\n");
  sayln("	 0	Set 1 of No Duplicates (100, 000 strings)");
  sayln("	 1	Set 2 of No Duplicates (316, 230 strings)");
  sayln("	 2	Set 3 of No Duplicates (1, 000, 000 strings)");
  sayln("	 3	Set 4 of No Duplicates (3, 162, 300 strings)");
  sayln("	 4	Set 5 of No Duplicates (10, 000, 000 strings)");
  sayln("	 5	Set 6 of No Duplicates (31, 623, 000 strings)\n");
  sayln("	 6	Set 1 of Genome (100, 000 strings)");
  sayln("	 7	Set 2 of Genome (316, 230 strings)");
  sayln("	 8	Set 3 of Genome (1, 000, 000 strings)");
  sayln("	 9	Set 4 of Genome (3, 162, 300 strings)");
  sayln("	 10 Set 5 of Genome (10, 000, 000 strings)");
  sayln("	 11 Set 6 of Genome (31, 623, 000 strings)\n");
  sayln("	 12	 Set 1 of Random (100, 000 strings)");
  sayln("	 13	 Set 2 of Random (316, 230 strings)");
  sayln("	 14	 Set 3 of Random (1, 000, 000 strings)");
  sayln("	 15	 Set 4 of Random (3, 162, 300 strings)");
  sayln("	 16	 Set 5 of Random (10, 000, 000 strings)");
  sayln("	 17	 Set 6 of Random (31, 623, 000 strings)\n");
  sayln("	 18	 Set 1 of URL (100, 000 strings)");
  sayln("	 19	 Set 2 of URL (316, 230 strings)");
  sayln("	 20	 Set 3 of URL (1, 000, 000 strings)");
  sayln("	 21	 Set 4 of URL (3, 162, 300 strings)");
  sayln("	 22	 Set 5 of URL (10, 000, 000 strings)\n");
  sayln("	 23	Set 3 of Random Strings, each of length 100 characters\n");
  sayln("Usage: sn=10, 11, 20 ds=5 nr=1 will run sorts 10, 11 and 20 once on dataset 5.\n\n");
}
```