user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<Call_C_Arg_Mem_L>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %edi,%ebx
  mov    %esi,%r13d
  mov    %rdx,%r12
  mov    %ecx,%ebp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  cmp    $0x7,%edi
  ja     L33
  mov    %edi,%eax
  lea    D143(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  mov    %rsp,%rdi
  lea    D85(%rip),%rdx
  lea    D157(%rip),%rsi
  call   <sprintf@plt>
L108:
  test   %r13d,%r13d
  jne    L71
  mov    %r12,%rdx
  lea    D16(%rip),%rsi
  lea    D59(%rip),%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  lea    0x0(,%rbp,4),%ecx
  mov    %rsp,%rdx
  lea    D7(%rip),%rsi
  lea    D193(%rip),%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
L111:
  cmp    $0x7,%ebx
  jg     L119
L41:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L28
  mov    $0x1,%eax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  mov    %rsp,%rdi
  lea    D129(%rip),%rdx
  lea    D157(%rip),%rsi
  call   <sprintf@plt>
  jmp    L108
  mov    %rsp,%rdi
  lea    D234(%rip),%rdx
  lea    D157(%rip),%rsi
  call   <sprintf@plt>
  jmp    L108
  mov    %rsp,%rdi
  lea    D262(%rip),%rdx
  lea    D157(%rip),%rsi
  call   <sprintf@plt>
  jmp    L108
  mov    %rsp,%rdi
  lea    D191(%rip),%rdx
  lea    D157(%rip),%rsi
  call   <sprintf@plt>
  jmp    L108
  mov    %rsp,%rdi
  lea    D231(%rip),%rdx
  lea    D157(%rip),%rsi
  call   <sprintf@plt>
  jmp    L108
  mov    %rsp,%rdi
  lea    D35(%rip),%rdx
  lea    D157(%rip),%rsi
  call   <sprintf@plt>
  jmp    L108
  mov    %rsp,%rdi
  lea    D96(%rip),%rdx
  lea    D157(%rip),%rsi
  call   <sprintf@plt>
  jmp    L108
L33:
  mov    %rsp,%rdi
  lea    D67(%rip),%rdx
  lea    D157(%rip),%rsi
  call   <sprintf@plt>
  jmp    L108
L71:
  mov    %rsp,%rdx
  lea    0x0(,%rbp,4),%r8d
  mov    %r12,%rcx
  lea    D49(%rip),%rsi
  lea    D59(%rip),%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  jmp    L111
L119:
  lea    -0x3c(,%rbx,8),%ecx
  mov    %rsp,%rdx
  lea    D15(%rip),%rsi
  lea    D190(%rip),%rdi
  mov    $0x0,%eax
  call   <Inst_Printf@plt>
  jmp    L41
L28:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D85
type_guessed: string
name: disassemble_data
arguments: data_label: D157
type_guessed: string
name: disassemble_data
arguments: data_label: D16
type_guessed: string
name: disassemble_data
arguments: data_label: D59
type_guessed: string
name: disassemble_data
arguments: data_label: D7
type_guessed: string
name: disassemble_data
arguments: data_label: D193
type_guessed: string
name: disassemble_data
arguments: data_label: D129
type_guessed: string
name: disassemble_data
arguments: data_label: D234
type_guessed: string
name: disassemble_data
arguments: data_label: D262
type_guessed: string
name: disassemble_data
arguments: data_label: D191
type_guessed: string
name: disassemble_data
arguments: data_label: D231
type_guessed: string
name: disassemble_data
arguments: data_label: D35
type_guessed: string
name: disassemble_data
arguments: data_label: D96
type_guessed: string
name: disassemble_data
arguments: data_label: D67
type_guessed: string
name: disassemble_data
arguments: data_label: D49
type_guessed: string
name: disassemble_data
arguments: data_label: D15
type_guessed: string
name: disassemble_data
arguments: data_label: D190
type_guessed: string

tool: D85: $4

tool: D157: %s

tool: D16: $25,%s

tool: D59: la

tool: D7: %s,%d($25)

tool: D193: lw

tool: D129: $5

tool: D234: $6

tool: D262: $7

tool: D191: $8

tool: D231: $9

tool: D35: $10

tool: D96: $11

tool: D67: $24

tool: D49: %s,%s+%d

tool: D15: %s,%d($sp)

tool: D190: sw

assistant: ```c
int Call_C_Arg_Mem_L(int offset, int adr_of, char *name, int index) {
  char dest[8];
  switch (offset) {
  case 0:
    sprintf(dest, "%s", "$4");
    break;
  case 1:
    sprintf(dest, "%s", "$5");
    break;
  case 2:
    sprintf(dest, "%s", "$6");
    break;
  case 3:
    sprintf(dest, "%s", "$7");
    break;
  case 4:
    sprintf(dest, "%s", "$8");
    break;
  case 5:
    sprintf(dest, "%s", "$9");
    break;
  case 6:
    sprintf(dest, "%s", "$10");
    break;
  case 7:
    sprintf(dest, "%s", "$11");
    break;
  default:
    sprintf(dest, "%s", "$24");
    break;
  }
  if (!adr_of) {
    Inst_Printf("la", "$25,%s", name);
    Inst_Printf("lw", "%s,%d($25)", dest, index * 4);
  } else {
    Inst_Printf("la", "%s,%s+%d", dest, name, index * 4);
  }
  if (offset > 7) {
    Inst_Printf("sw", "%s,%d($sp)", dest, (offset - 8) * 8 + 4);
  }
  return 1;
}
```