user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<skeleton>:
  endbr64
  push   %r13
  push   %r12
  lea    D316(%rip),%r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  lea    D136(%rip),%rbx
  sub    $0x1b8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x1a8(%rsp)
  xor    %eax,%eax
  call   <strlen@plt>
  mov    %r12,%rdx
  mov    $0x1dd,%esi
  lea    0x28(%rax),%rdi
  call   <eipa_malloc@plt>
  lea    D109(%rip),%rsi
  mov    %rax,%rdi
  mov    %rax,(%rsp)
  call   <strcpy@plt>
  mov    (%rsp),%rdi
  mov    %rbp,%rsi
  call   <strcat@plt>
  mov    (%rsp),%rdi
  lea    D261(%rip),%rsi
  call   <strcat@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r12,%rdx
  mov    $0x1e5,%esi
  lea    0x25(%rax),%rdi
  call   <eipa_malloc@plt>
  mov    %rbx,%rsi
  mov    %rax,%rdi
  mov    %rax,0x8(%rsp)
  call   <strcpy@plt>
  mov    0x8(%rsp),%rdi
  mov    %rbp,%rsi
  call   <strcat@plt>
  mov    0x8(%rsp),%rdi
  lea    D277(%rip),%rsi
  call   <strcat@plt>
  lea    D252(%rip),%rsi
  mov    (%rsp),%rdx
  lea    D307(%rip),%rax
  mov    %rsi,0x58(%rsp)
  lea    D22(%rip),%rcx
  lea    D191(%rip),%rdi
  movq   %rax,%xmm1
  mov    %rsi,0x88(%rsp)
  lea    D169(%rip),%rsi
  movq   %rcx,%xmm0
  lea    D13(%rip),%rcx
  mov    %rdx,0x28(%rsp)
  lea    D203(%rip),%rdx
  punpcklqdq %xmm1,%xmm0
  lea    D363(%rip),%rax
  mov    %rsi,0x90(%rsp)
  lea    D341(%rip),%rsi
  mov    %rsi,0x98(%rsp)
  lea    D210(%rip),%rsi
  mov    %rsi,0xb0(%rsp)
  lea    D300(%rip),%rsi
  mov    %rdx,0x48(%rsp)
  lea    D305(%rip),%rdx
  mov    %rsi,0xc0(%rsp)
  lea    D91(%rip),%rsi
  mov    %rdx,0x50(%rsp)
  lea    D179(%rip),%rdx
  mov    %rsi,0xc8(%rsp)
  lea    D49(%rip),%rsi
  mov    %rdx,0x60(%rsp)
  lea    D138(%rip),%rdx
  mov    %rdi,0x80(%rsp)
  lea    D192(%rip),%rdi
  mov    %rsi,0xd0(%rsp)
  lea    D151(%rip),%rsi
  mov    %rcx,0x30(%rsp)
  lea    D156(%rip),%rcx
  mov    %rdx,0x68(%rsp)
  lea    D276(%rip),%rdx
  mov    %rsi,0xe8(%rsp)
  lea    D15(%rip),%rsi
  mov    %rdi,0xf8(%rsp)
  lea    D317(%rip),%rdi
  mov    %rcx,0x38(%rsp)
  mov    %rdx,0x70(%rsp)
  mov    %rdx,0xa0(%rsp)
  mov    %rdx,0xd8(%rsp)
  movaps %xmm0,0x10(%rsp)
  mov    %rax,0x20(%rsp)
  mov    %rax,0x40(%rsp)
  mov    %rax,0x78(%rsp)
  mov    %rbx,0xa8(%rsp)
  mov    %rax,0xb8(%rsp)
  mov    %rax,0xe0(%rsp)
  mov    %rax,0xf0(%rsp)
  mov    %rdi,0x108(%rsp)
  lea    D324(%rip),%rdi
  mov    %rsi,0x100(%rsp)
  mov    0x8(%rsp),%rsi
  mov    %rdi,0x120(%rsp)
  lea    D150(%rip),%rdi
  mov    %rsi,0x110(%rsp)
  lea    D262(%rip),%rsi
  mov    %rsi,0x118(%rsp)
  lea    D250(%rip),%rsi
  mov    %rsi,0x128(%rsp)
  lea    D207(%rip),%rsi
  mov    %rdi,0x138(%rsp)
  lea    D63(%rip),%rdi
  mov    %rsi,0x140(%rsp)
  lea    D365(%rip),%rsi
  mov    %rdi,0x158(%rsp)
  lea    D90(%rip),%rdi
  mov    %rax,0x130(%rsp)
  mov    %rbx,0x150(%rsp)
  mov    %rax,0x160(%rsp)
  mov    %rsi,0x168(%rsp)
  mov    $0x33,%esi
  mov    %rdi,0x170(%rsp)
  lea    0x10(%rsp),%rdi
  mov    %rbx,0x180(%rsp)
  lea    D61(%rip),%rbx
  mov    %rax,0x190(%rsp)
  lea    D44(%rip),%rax
  mov    %rdx,0x148(%rsp)
  mov    %rdx,0x178(%rsp)
  mov    %rcx,0x1a0(%rsp)
  mov    %rbx,0x188(%rsp)
  mov    %rax,0x198(%rsp)
  call   <buildString@plt>
  mov    %rsp,%rdi
  mov    %r12,%rdx
  mov    $0x222,%esi
  mov    %rax,%r13
  call   <eipa_free@plt>
  lea    0x8(%rsp),%rdi
  mov    %r12,%rdx
  mov    $0x223,%esi
  call   <eipa_free@plt>
  mov    0x1a8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L5
  add    $0x1b8,%rsp
  mov    %r13,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L5:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D316
type: string
name: disassemble_data
arguments: data_label: D136
type: string
name: disassemble_data
arguments: data_label: D109
type: string
name: disassemble_data
arguments: data_label: D261
type: string
name: disassemble_data
arguments: data_label: D277
type: string
name: disassemble_data
arguments: data_label: D252
type: string
name: disassemble_data
arguments: data_label: D307
type: string
name: disassemble_data
arguments: data_label: D22
type: string
name: disassemble_data
arguments: data_label: D191
type: string
name: disassemble_data
arguments: data_label: D169
type: string
name: disassemble_data
arguments: data_label: D13
type: string
name: disassemble_data
arguments: data_label: D203
type: string
name: disassemble_data
arguments: data_label: D363
type: string
name: disassemble_data
arguments: data_label: D341
type: string
name: disassemble_data
arguments: data_label: D210
type: string
name: disassemble_data
arguments: data_label: D300
type: string
name: disassemble_data
arguments: data_label: D305
type: string
name: disassemble_data
arguments: data_label: D91
type: string
name: disassemble_data
arguments: data_label: D179
type: string
name: disassemble_data
arguments: data_label: D49
type: string
name: disassemble_data
arguments: data_label: D138
type: string
name: disassemble_data
arguments: data_label: D192
type: string
name: disassemble_data
arguments: data_label: D151
type: string
name: disassemble_data
arguments: data_label: D156
type: string
name: disassemble_data
arguments: data_label: D276
type: string
name: disassemble_data
arguments: data_label: D15
type: string
name: disassemble_data
arguments: data_label: D317
type: string
name: disassemble_data
arguments: data_label: D324
type: string
name: disassemble_data
arguments: data_label: D150
type: string
name: disassemble_data
arguments: data_label: D262
type: string
name: disassemble_data
arguments: data_label: D250
type: string
name: disassemble_data
arguments: data_label: D207
type: string
name: disassemble_data
arguments: data_label: D63
type: string
name: disassemble_data
arguments: data_label: D365
type: string
name: disassemble_data
arguments: data_label: D90
type: string
name: disassemble_data
arguments: data_label: D61
type: string
name: disassemble_data
arguments: data_label: D44
type: string

tool: D316: /scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/heads/master/Cuda-SAK/functions.c

tool: D136: 	

tool: D109: __global__ void 

tool: D261: (TODO:add parameters) {

tool: D277: <<<blocks,grid>>>(TODO:parameters);

tool: D252: 	* Example:

tool: D307: #include "HandleError.h"

tool: D22: #include <stdio.h>

tool: D191: 	/*TODO: prepare device memory

tool: D169: 	* size_t histo_size_bytes = 256 * sizeof(unsigned int);

tool: D13: 	//TODO: Kernel code here

tool: D203: int main(void) {

tool: 

tool: D341: 	* HANDLE_ERROR( cudaMalloc((int**)&histo_d,histo_size_bytes) );

tool: D210: 	HANDLE_ERROR( cudaMalloc((TODO:add cast to variable type)&TODO:device variable name,TODO:size to allocate in the device memory);

tool: D300: 	/*TODO: initialize device variables

tool: D305: 	/*TODO: declare and initialize variables for device and host

tool: D91: 	* Example: 

tool: D179: 	* int histo_h[256];	

tool: D49: 	* HANDLE_ERROR(cudaMemcpy(buffer_d,buffer_h,buffer_size_bytes,cudaMemcpyHostToDevice));

tool: D138: 	* unsigned int *histo_d;

tool: D192: 	//Kernel Call

tool: D151: 	HANDLE_ERROR(cudaMemcpy(TODO:device variable,TODO:host variable,TODO:size allocated to device variable, cudaMemcpyHostToDevice))

tool: D156: }

tool: D276: 	*/

tool: D15: 	dim3 grid(TODO:set grid dimensions);

tool: D317: 	dim3 blocks(TODO:set block dimensions);

tool: D324: 	cudaError_t err = cudaGetLastError();

tool: D150: 	/*TODO: copy variables from device to host

tool: D262: 	cudaDeviceSynchronize();

tool: D250: 	HANDLE_ERROR( err );

tool: D207: 	* Example: HANDLE_ERROR(cudaMemcpy(histo_h,histo_d,histo_size_bytes,cudaMemcpyDeviceToHost));

tool: D63: 	HANDLE_ERROR(cudaMemcpy(TODO:host variable,TODO:device variable,TODO: size allocated to device variable, cudaMemcpyDeviceToHost));

tool: D365: 	/*TODO: free device memory

tool: D90: 	* Example: HANDLE_ERROR(cudaFree(buffer_d));

tool: D61: 	HANDLE_ERROR(cudaFree(TODO:variable to free));

tool: D44: 	return 0;

assistant: ```c
char *skeleton(char *kernel_name) {
  char *aux1 = "__global__ void ";
  char *aux2 = "(TODO:add parameters) {";
  char *aux3 = eipa_malloc((strlen(kernel_name) + strlen(aux1) + strlen(aux2) + 1), 477, "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/heads/master/Cuda-SAK/functions.c");
  strcpy(aux3, aux1);
  strcat(aux3, kernel_name);
  strcat(aux3, aux2);
  char *aux4 = "	";
  char *aux5 = "<<<blocks,grid>>>(TODO:parameters);";
  char *aux6 = eipa_malloc((strlen(kernel_name) + strlen(aux4) + strlen(aux5) + 1), 485, "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/heads/master/Cuda-SAK/functions.c");
  strcpy(aux6, aux4);
  strcat(aux6, kernel_name);
  strcat(aux6, aux5);
  char *string[51] = {"#include <stdio.h>", "#include \"HandleError.h\"", "", aux3, "	//TODO: Kernel code here", "}", "", "int main(void) {", "	/*TODO: declare and initialize variables for device and host", "	* Example:", "	* int histo_h[256];	", "	* unsigned int *histo_d;", "	*/", "", "	/*TODO: prepare device memory", "	* Example:", "	* size_t histo_size_bytes = 256 * sizeof(unsigned int);", "	* HANDLE_ERROR( cudaMalloc((int**)&histo_d,histo_size_bytes) );", "	*/", "	", "	HANDLE_ERROR( cudaMalloc((TODO:add cast to variable type)&TODO:device variable name,TODO:size to allocate in the device memory);", "", "	/*TODO: initialize device variables", "	* Example: ", "	* HANDLE_ERROR(cudaMemcpy(buffer_d,buffer_h,buffer_size_bytes,cudaMemcpyHostToDevice));", "	*/", "", "	HANDLE_ERROR(cudaMemcpy(TODO:device variable,TODO:host variable,TODO:size allocated to device variable, cudaMemcpyHostToDevice))", "", "	//Kernel Call", "	dim3 grid(TODO:set grid dimensions);", "	dim3 blocks(TODO:set block dimensions);", aux6, "	cudaDeviceSynchronize();", "	cudaError_t err = cudaGetLastError();", "	HANDLE_ERROR( err );", "", "	/*TODO: copy variables from device to host", "	* Example: HANDLE_ERROR(cudaMemcpy(histo_h,histo_d,histo_size_bytes,cudaMemcpyDeviceToHost));", "	*/", "	", "	HANDLE_ERROR(cudaMemcpy(TODO:host variable,TODO:device variable,TODO: size allocated to device variable, cudaMemcpyDeviceToHost));", "", "	/*TODO: free device memory", "	* Example: HANDLE_ERROR(cudaFree(buffer_d));", "	*/", "	", "	HANDLE_ERROR(cudaFree(TODO:variable to free));", "", "	return 0;", "}"};
  char *final = buildString(string, 51);
  eipa_free((void **)(&(aux3)), 546, "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/heads/master/Cuda-SAK/functions.c");
  eipa_free((void **)(&(aux6)), 547, "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/heads/master/Cuda-SAK/functions.c");
  return final;
}
```