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

```asm
<tst_doublesize>:
  endbr64
  push   %r15
  push   %r14
  lea    D94(%rip),%r14
  push   %r13
  lea    D126(%rip),%r13
  push   %r12
  lea    D232(%rip),%r12
  push   %rbp
  xor    %ebp,%ebp
  push   %rbx
  mov    $0x2,%ebx
  sub    $0x8,%rsp
L19:
  mov    $0x2,%edi
  call   <ed@plt>
  mov    $0x1,%edi
  mov    $0x1,%esi
  call   <cup@plt>
  mov    %r14,%rdi
  test   %ebp,%ebp
  je     L20
  call   <sm@plt>
  lea    D139(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L59:
  lea    -0x1(%rbx,%rbx,1),%r15d
  mov    $0x5,%edi
  mov    %r15d,%esi
  call   <cup@plt>
  lea    D54(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r15d,%esi
  mov    $0x7,%edi
  call   <cup@plt>
  lea    D125(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  xor    %eax,%eax
  call   <decdwl@plt>
  xor    %eax,%eax
  call   <decswl@plt>
  mov    %ebx,%esi
  mov    $0x9,%edi
  call   <cup@plt>
  lea    D22(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  call   <decswl@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  xor    %eax,%eax
  call   <decdwl@plt>
  mov    %ebx,%esi
  mov    $0xb,%edi
  call   <cup@plt>
  xor    %eax,%eax
  call   <decdwl@plt>
  xor    %eax,%eax
  call   <decswl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    %r13,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %ebx,%esi
  mov    $0xc,%edi
  call   <cup@plt>
  xor    %eax,%eax
  call   <decdwl@plt>
  xor    %eax,%eax
  call   <decswl@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    %r13,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %ebx,%esi
  mov    $0xe,%edi
  call   <cup@plt>
  xor    %eax,%eax
  call   <decdwl@plt>
  xor    %eax,%eax
  call   <decswl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    $0x2,%edi
  call   <el@plt>
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %ebx,%esi
  mov    $0xf,%edi
  call   <cup@plt>
  xor    %eax,%eax
  call   <decdwl@plt>
  xor    %eax,%eax
  call   <decswl@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r15d,%esi
  mov    $0x11,%edi
  call   <cup@plt>
  lea    D20(%rip),%rdi
  xor    %eax,%eax
  add    $0xd,%ebx
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0x15,%edi
  call   <cup@plt>
  lea    D141(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x6,%esi
  mov    $0x15,%edi
  call   <cup@plt>
  lea    D28(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  call   <decswl@plt>
  mov    $0x1,%esi
  mov    $0x17,%edi
  call   <cup@plt>
  xor    %eax,%eax
  call   <holdit@plt>
  mov    $0x6,%esi
  mov    $0x15,%edi
  call   <cup@plt>
  lea    D205(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  call   <decdwl@plt>
  mov    $0x1,%esi
  mov    $0x17,%edi
  call   <cup@plt>
  xor    %eax,%eax
  call   <holdit@plt>
  cmp    $0x1,%ebp
  jne    L15
  mov    $0x1,%esi
  mov    $0x1,%edi
  mov    $0x11,%ebx
  call   <cup@plt>
  mov    $0x3,%edi
  call   <tbc@plt>
  nopl   0x0(%rax)
L18:
  mov    $0x8,%edi
  call   <cuf@plt>
  xor    %eax,%eax
  call   <hts@plt>
  sub    $0x1,%ebx
  jne    L18
  mov    %r14,%rdi
  lea    D102(%rip),%rbp
  mov    $0xc,%ebx
  call   <rm@plt>
  mov    $0x2,%edi
  call   <ed@plt>
  xor    %edi,%edi
  mov    $0x30,%esi
  call   <scs@plt>
  mov    $0x1,%esi
  mov    $0x8,%edi
  call   <cup@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0x9,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  lea    D174(%rip),%rbp
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xa,%edi
  call   <cup@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    $0x9,%r9d
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    $0x9,%r8d
  mov    $0x9,%ecx
  mov    $0x9,%edx
  mov    $0x9,%esi
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xb,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    $0x9,%r9d
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    $0x9,%r8d
  mov    $0x9,%ecx
  mov    $0x9,%edx
  mov    $0x9,%esi
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xc,%edi
  call   <cup@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    $0x9,%r9d
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    $0x9,%r8d
  mov    $0x9,%ecx
  mov    $0x9,%edx
  mov    $0x9,%esi
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xd,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    $0x9,%r9d
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    $0x9,%r8d
  mov    $0x9,%ecx
  mov    $0x9,%edx
  mov    $0x9,%esi
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xe,%edi
  lea    D200(%rip),%rbp
  call   <cup@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0xf,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  lea    D178(%rip),%rbp
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0x10,%edi
  call   <cup@plt>
  xor    %edi,%edi
  call   <decdhl@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x1,%esi
  mov    $0x11,%edi
  call   <cup@plt>
  mov    $0x1,%edi
  call   <decdhl@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x42,%esi
  xor    %edi,%edi
  call   <scs@plt>
  lea    D75(%rip),%rdi
  call   <sgr@plt>
  mov    $0x3,%esi
  mov    $0xc,%edi
  call   <cup@plt>
  lea    D98(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x3,%esi
  mov    $0xd,%edi
  call   <cup@plt>
  mov    $0x9,%edi
  call   <putchar@plt>
  mov    $0x6,%edi
  call   <cub@plt>
  lea    D164(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D39(%rip),%rdi
  call   <sgr@plt>
  mov    $0x1,%esi
  mov    $0x16,%edi
  call   <cup@plt>
  lea    D99(%rip),%rdi
  call   <println@plt>
  lea    D153(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  call   <holdit@plt>
  mov    $0x18,%esi
  mov    $0x8,%edi
  call   <decstbm@plt>
  mov    $0x1,%esi
  mov    $0x8,%edi
  call   <cup@plt>
L4:
  xor    %eax,%eax
  call   <ri@plt>
  sub    $0x1,%ebx
  jne    L4
  xor    %esi,%esi
  xor    %edi,%edi
  call   <decstbm@plt>
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <cup@plt>
  lea    D65(%rip),%rsi
  lea    D179(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    12a0 <holdit@plt>
  xchg   %ax,%ax
L15:
  mov    $0x1,%ebp
  jmp    L19
  nopw   0x0(%rax,%rax,1)
L20:
  call   <rm@plt>
  lea    D195(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L59
```

tool_calls: name: retrieve_data
arguments: data_label: D94
type: string
name: retrieve_data
arguments: data_label: D126
type: string
name: retrieve_data
arguments: data_label: D232
type: string
name: retrieve_data
arguments: data_label: D139
type: string
name: retrieve_data
arguments: data_label: D54
type: string
name: retrieve_data
arguments: data_label: D125
type: string
name: retrieve_data
arguments: data_label: D22
type: string
name: retrieve_data
arguments: data_label: D20
type: string
name: retrieve_data
arguments: data_label: D141
type: string
name: retrieve_data
arguments: data_label: D28
type: string
name: retrieve_data
arguments: data_label: D205
type: string
name: retrieve_data
arguments: data_label: D102
type: string
name: retrieve_data
arguments: data_label: D174
type: string
name: retrieve_data
arguments: data_label: D200
type: string
name: retrieve_data
arguments: data_label: D178
type: string
name: retrieve_data
arguments: data_label: D75
type: string
name: retrieve_data
arguments: data_label: D98
type: string
name: retrieve_data
arguments: data_label: D164
type: string
name: retrieve_data
arguments: data_label: D39
type: string
name: retrieve_data
arguments: data_label: D99
type: string
name: retrieve_data
arguments: data_label: D153
type: string
name: retrieve_data
arguments: data_label: D65
type: string
name: retrieve_data
arguments: data_label: D179
type: string
name: retrieve_data
arguments: data_label: D195
type: string

tool: D94: ?3

tool: D126: This is a Double-width-and-height line

tool: D232: This is another such line

tool: D139: 132 column mode

tool: D54: v------- left margin

tool: D125: This is a normal-sized line

tool: D22: This is a Double-width line

tool: D20: ^------- left margin

tool: D141: This is not a double-width line

tool: D28: is not

tool: D205: **is**

tool: D102: lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk

tool: D174: x%c%c%c%c%cx

tool: D200: x                                      x

tool: D178: mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

tool: D75: 1;5

tool: D98: * The mad programmer strikes again * 

tool: D164: * The mad programmer strikes again *

tool: D39: 0

tool: D99: Another test pattern...  a frame with blinking bold text,

tool: D153: all in double-height double-width size. 

tool: D65: Exactly half of the box should remain. 

tool: D179: %s

tool: D195:  80 column mode

assistant: ```c
tst_doublesize() {
  int col, i, w, w1;
  for (w = 0; w <= 1; w++) {
    w1 = 13 * w;
    ed(2);
    cup(1, 1);
    if (w) {
      sm("?3");
      printf("132 column mode");
    } else {
      rm("?3");
      printf(" 80 column mode");
    }
    cup(5, 3 + 2 * w1);
    printf("v------- left margin");
    cup(7, 3 + 2 * w1);
    printf("This is a normal-sized line");
    decdhl(0);
    decdhl(1);
    decdwl();
    decswl();
    cup(9, 2 + w1);
    printf("This is a Double-width line");
    decswl();
    decdhl(0);
    decdhl(1);
    decdwl();
    cup(11, 2 + w1);
    decdwl();
    decswl();
    decdhl(1);
    decdhl(0);
    printf("This is a Double-width-and-height line");
    cup(12, 2 + w1);
    decdwl();
    decswl();
    decdhl(0);
    decdhl(1);
    printf("This is a Double-width-and-height line");
    cup(14, 2 + w1);
    decdwl();
    decswl();
    decdhl(1);
    decdhl(0);
    el(2);
    printf("This is another such line");
    cup(15, 2 + w1);
    decdwl();
    decswl();
    decdhl(0);
    decdhl(1);
    printf("This is another such line");
    cup(17, 3 + 2 * w1);
    printf("^------- left margin");
    cup(21, 1);
    printf("This is not a double-width line");
    for (i = 0; i <= 1; i++) {
      cup(21, 6);
      if (i) {
        printf("**is**");
        decdwl();
      } else {
        printf("is not");
        decswl();
      }
      cup(23, 1);
      holdit();
    }
  }
  cup(1, 1);
  tbc(3);
  for (col = 1; col <= 132; col += 8) {
    cuf(8);
    hts();
  }
  rm("?3");
  ed(2);
  scs(0, '0');
  cup(8, 1);
  decdhl(0);
  printf("lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk");
  cup(9, 1);
  decdhl(1);
  printf("lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk");
  cup(10, 1);
  decdhl(0);
  printf("x%c%c%c%c%cx", 9, 9, 9, 9, 9);
  cup(11, 1);
  decdhl(1);
  printf("x%c%c%c%c%cx", 9, 9, 9, 9, 9);
  cup(12, 1);
  decdhl(0);
  printf("x%c%c%c%c%cx", 9, 9, 9, 9, 9);
  cup(13, 1);
  decdhl(1);
  printf("x%c%c%c%c%cx", 9, 9, 9, 9, 9);
  cup(14, 1);
  decdhl(0);
  printf("x                                      x");
  cup(15, 1);
  decdhl(1);
  printf("x                                      x");
  cup(16, 1);
  decdhl(0);
  printf("mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj");
  cup(17, 1);
  decdhl(1);
  printf("mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj");
  scs(0, 'B');
  sgr("1;5");
  cup(12, 3);
  printf("* The mad programmer strikes again * ");
  cup(13, 3);
  printf("%c", 9);
  cub(6);
  printf("* The mad programmer strikes again *");
  sgr("0");
  cup(22, 1);
  println("Another test pattern...  a frame with blinking bold text,");
  printf("all in double-height double-width size. ");
  holdit();
  decstbm(8, 24);
  cup(8, 1);
  for (i = 1; i <= 12; i++)
    ri();
  decstbm(0, 0);
  cup(1, 1);
  printf("%s", "Exactly half of the box should remain. ");
  holdit();
}
```