user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<Call_C_Arg_Foreign_D>:
  endbr64
  push   %r13
  push   %r12
  lea    0x0(,%rdx,8),%r12d
  push   %rbx
  mov    %edi,%ebx
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  test   %esi,%esi
  je     L37
  cmp    $0x7,%ebx
  ja     L64
  lea    D226(%rip),%rdx
  mov    %rsp,%r13
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopl   0x0(%rax,%rax,1)
L37:
  cmp    $0x7,%ebx
  ja     L226
  lea    D174(%rip),%rdx
  mov    %rsp,%r13
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopl   (%rax)
  lea    D181(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  cs nopw 0x0(%rax,%rax,1)
L51:
  lea    D197(%rip),%rsi
  lea    D99(%rip),%rdi
  xor    %eax,%eax
  call   <Inst_Printf@plt>
  mov    %r12d,%ecx
  mov    %r13,%rdx
  xor    %eax,%eax
  lea    D129(%rip),%rsi
  lea    D131(%rip),%rdi
  call   <Inst_Printf@plt>
L91:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L134
  add    $0x10,%rsp
  mov    $0x1,%eax
  pop    %rbx
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D422(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  jmp    L51
  lea    D391(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  jmp    L51
  nopl   0x0(%rax,%rax,1)
  lea    D189(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  jmp    L51
  nopl   0x0(%rax,%rax,1)
  lea    D527(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  jmp    L51
  nopl   0x0(%rax,%rax,1)
  lea    D510(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  jmp    L51
  nopl   0x0(%rax,%rax,1)
  lea    D545(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  jmp    L51
  nopl   0x0(%rax,%rax,1)
  lea    D134(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  jmp    L51
  nopl   0x0(%rax,%rax,1)
  lea    D120(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  cs nopw 0x0(%rax,%rax,1)
L100:
  mov    %r13,%rdx
  lea    D7(%rip),%rsi
  lea    D99(%rip),%rdi
  xor    %eax,%eax
  call   <Inst_Printf@plt>
  mov    %r12d,%r8d
  mov    %r13,%rcx
  mov    %r13,%rdx
  lea    D412(%rip),%rsi
  lea    D322(%rip),%rdi
  xor    %eax,%eax
  call   <Inst_Printf@plt>
  jmp    L91
  nopl   0x0(%rax,%rax,1)
  lea    D151(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  jmp    L100
  nopl   0x0(%rax,%rax,1)
  lea    D431(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  jmp    L100
  nopl   0x0(%rax,%rax,1)
  lea    D29(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  jmp    L100
  nopl   0x0(%rax,%rax,1)
  lea    D190(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  jmp    L100
  nopl   0x0(%rax,%rax,1)
  lea    D313(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  jmp    L100
  nopl   0x0(%rax,%rax,1)
  lea    D386(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  jmp    L100
  nopl   0x0(%rax,%rax,1)
  lea    D495(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  jmp    L100
L226:
  mov    %rsp,%r13
  lea    D267(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  lea    D197(%rip),%rsi
  lea    D99(%rip),%rdi
  xor    %eax,%eax
  call   <Inst_Printf@plt>
  xor    %eax,%eax
  mov    %r12d,%ecx
  mov    %r13,%rdx
  lea    D129(%rip),%rsi
  lea    D131(%rip),%rdi
  call   <Inst_Printf@plt>
  cmp    $0x7,%ebx
  jle    L91
  lea    -0x40(,%rbx,8),%ecx
  mov    %r13,%rdx
  lea    D530(%rip),%rsi
  xor    %eax,%eax
  lea    D363(%rip),%rdi
  call   <Inst_Printf@plt>
  jmp    L91
L64:
  mov    %rsp,%r13
  lea    D89(%rip),%rdx
  lea    D61(%rip),%rsi
  mov    %r13,%rdi
  call   <sprintf@plt>
  mov    %r13,%rdx
  lea    D7(%rip),%rsi
  xor    %eax,%eax
  lea    D99(%rip),%rdi
  call   <Inst_Printf@plt>
  xor    %eax,%eax
  mov    %r12d,%r8d
  mov    %r13,%rcx
  mov    %r13,%rdx
  lea    D412(%rip),%rsi
  lea    D322(%rip),%rdi
  call   <Inst_Printf@plt>
  cmp    $0x7,%ebx
  jle    L91
  lea    -0x40(,%rbx,8),%ecx
  mov    %r13,%rdx
  lea    D530(%rip),%rsi
  xor    %eax,%eax
  lea    D227(%rip),%rdi
  call   <Inst_Printf@plt>
  jmp    L91
L134:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D181
type: string
name: disassemble_data
arguments: label: D61
type: string
name: disassemble_data
arguments: label: D197
type: string
name: disassemble_data
arguments: label: D99
type: string
name: disassemble_data
arguments: label: D129
type: string
name: disassemble_data
arguments: label: D131
type: string
name: disassemble_data
arguments: label: D422
type: string
name: disassemble_data
arguments: label: D391
type: string
name: disassemble_data
arguments: label: D189
type: string
name: disassemble_data
arguments: label: D527
type: string
name: disassemble_data
arguments: label: D510
type: string
name: disassemble_data
arguments: label: D545
type: string
name: disassemble_data
arguments: label: D134
type: string
name: disassemble_data
arguments: label: D120
type: string
name: disassemble_data
arguments: label: D7
type: string
name: disassemble_data
arguments: label: D412
type: string
name: disassemble_data
arguments: label: D322
type: string
name: disassemble_data
arguments: label: D151
type: string
name: disassemble_data
arguments: label: D431
type: string
name: disassemble_data
arguments: label: D29
type: string
name: disassemble_data
arguments: label: D190
type: string
name: disassemble_data
arguments: label: D313
type: string
name: disassemble_data
arguments: label: D386
type: string
name: disassemble_data
arguments: label: D495
type: string
name: disassemble_data
arguments: label: D267
type: string
name: disassemble_data
arguments: label: D530
type: string
name: disassemble_data
arguments: label: D363
type: string
name: disassemble_data
arguments: label: D89
type: string
name: disassemble_data
arguments: label: D227
type: string

tool: D181: $f18

tool: D61: %s

tool: D197: $25,pl_foreign_double

tool: D99: la

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

tool: D131: l.d

tool: D422: $f17

tool: D391: $f16

tool: D189: $f15

tool: D527: $f14

tool: D510: $f13

tool: D545: $f12

tool: D134: $f19

tool: D120: $10

tool: D7: %s,pl_foreign_double

tool: D412: %s,%s,%d

tool: D322: addu

tool: D151: $9

tool: D431: $8

tool: D29: $7

tool: D190: $6

tool: D313: $5

tool: D386: $4

tool: D495: $11

tool: D267: $f1

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

tool: D363: s.d

tool: D89: $24

tool: D227: sw

assistant: ```c
int Call_C_Arg_Foreign_D(int offset, int adr_of, int index) {
  char dest[8];
  if (adr_of) {
    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;
    }
    Inst_Printf("la", "%s,pl_foreign_double", dest);
    Inst_Printf("addu", "%s,%s,%d", dest, dest, index * 8);
    if (offset > 7) {
      Inst_Printf("sw", "%s,%d($sp)", dest, (offset - 8) * 8);
    }
    return 1;
  } else {
    switch (offset) {
    case 0:
      sprintf(dest, "%s", "$f12");
      break;
    case 1:
      sprintf(dest, "%s", "$f13");
      break;
    case 2:
      sprintf(dest, "%s", "$f14");
      break;
    case 3:
      sprintf(dest, "%s", "$f15");
      break;
    case 4:
      sprintf(dest, "%s", "$f16");
      break;
    case 5:
      sprintf(dest, "%s", "$f17");
      break;
    case 6:
      sprintf(dest, "%s", "$f18");
      break;
    case 7:
      sprintf(dest, "%s", "$f19");
      break;
    default:
      sprintf(dest, "%s", "$f1");
      break;
    }
    Inst_Printf("la", "$25,pl_foreign_double");
    Inst_Printf("l.d", "%s,%d($25)", dest, index * 8);
    if (offset > 7) {
      Inst_Printf("s.d", "%s,%d($sp)", dest, (offset - 8) * 8);
    }
    return 1;
  }
}
```