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

```asm
<run>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x350,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x338(%rbp)
  jmp    L372
L17:
  movl   $0x0,-0x334(%rbp)
  jmp    L230
L253:
  mov    -0x334(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x330,%rax
  movb   $0x2d,(%rax)
  mov    -0x334(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x1a0,%rax
  movb   $0x2d,(%rax)
  addl   $0x1,-0x334(%rbp)
L230:
  cmpl   $0x13,-0x334(%rbp)
  jle    L253
  addl   $0x1,-0x338(%rbp)
L372:
  cmpl   $0x13,-0x338(%rbp)
  jle    L17
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L332:
  lea    D33(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x340(%rbp),%rdx
  lea    -0x344(%rbp),%rax
  mov    %rax,%rsi
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x344(%rbp),%eax
  cmp    $0x63,%eax
  je     L386
  mov    -0x340(%rbp),%eax
  cmp    $0x63,%eax
  je     L386
  mov    -0x344(%rbp),%eax
  mov    -0x340(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x330,%rax
  movb   $0x2a,(%rax)
  jmp    L332
L386:
  movl   $0x0,-0x338(%rbp)
  jmp    L284
L490:
  movl   $0x0,-0x334(%rbp)
  jmp    L312
L381:
  mov    -0x334(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x330,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <putchar@plt>
  addl   $0x1,-0x334(%rbp)
L312:
  cmpl   $0x13,-0x334(%rbp)
  jle    L381
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x338(%rbp)
L284:
  cmpl   $0x13,-0x338(%rbp)
  jle    L490
  mov    $0xa,%edi
  call   <putchar@plt>
L263:
  movl   $0x0,-0x338(%rbp)
  jmp    L419
L363:
  movl   $0x0,-0x334(%rbp)
  jmp    L69
L393:
  movl   $0x0,-0x33c(%rbp)
  cmpl   $0x0,-0x338(%rbp)
  jle    L506
  cmpl   $0x0,-0x334(%rbp)
  jle    L506
  mov    -0x338(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x334(%rbp),%eax
  sub    $0x1,%eax
  movslq %eax,%rcx
  movslq %edx,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x330,%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  jne    L506
  addl   $0x1,-0x33c(%rbp)
L506:
  cmpl   $0x0,-0x334(%rbp)
  jle    L197
  mov    -0x334(%rbp),%eax
  sub    $0x1,%eax
  movslq %eax,%rcx
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x330,%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  jne    L197
  addl   $0x1,-0x33c(%rbp)
L197:
  cmpl   $0x13,-0x338(%rbp)
  jg     L329
  cmpl   $0x0,-0x334(%rbp)
  jle    L329
  mov    -0x338(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x334(%rbp),%eax
  sub    $0x1,%eax
  movslq %eax,%rcx
  movslq %edx,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x330,%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  jne    L329
  addl   $0x1,-0x33c(%rbp)
L329:
  cmpl   $0x0,-0x338(%rbp)
  jle    L430
  mov    -0x338(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x334(%rbp),%eax
  movslq %eax,%rcx
  movslq %edx,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x330,%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  jne    L430
  addl   $0x1,-0x33c(%rbp)
L430:
  cmpl   $0x13,-0x338(%rbp)
  jg     L508
  mov    -0x338(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x334(%rbp),%eax
  movslq %eax,%rcx
  movslq %edx,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x330,%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  jne    L508
  addl   $0x1,-0x33c(%rbp)
L508:
  cmpl   $0x0,-0x338(%rbp)
  jle    L460
  cmpl   $0x13,-0x334(%rbp)
  jg     L460
  mov    -0x338(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x334(%rbp),%eax
  add    $0x1,%eax
  movslq %eax,%rcx
  movslq %edx,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x330,%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  jne    L460
  addl   $0x1,-0x33c(%rbp)
L460:
  cmpl   $0x13,-0x334(%rbp)
  jg     L213
  mov    -0x334(%rbp),%eax
  add    $0x1,%eax
  movslq %eax,%rcx
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x330,%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  jne    L213
  addl   $0x1,-0x33c(%rbp)
L213:
  cmpl   $0x13,-0x338(%rbp)
  jg     L210
  cmpl   $0x13,-0x334(%rbp)
  jg     L210
  mov    -0x338(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x334(%rbp),%eax
  add    $0x1,%eax
  movslq %eax,%rcx
  movslq %edx,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x330,%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  jne    L210
  addl   $0x1,-0x33c(%rbp)
L210:
  cmpl   $0x3,-0x33c(%rbp)
  jne    L248
  mov    -0x334(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x1a0,%rax
  movb   $0x2a,(%rax)
  jmp    L246
L248:
  cmpl   $0x2,-0x33c(%rbp)
  jne    L45
  mov    -0x334(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x330,%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  jne    L45
  mov    -0x334(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x1a0,%rax
  movb   $0x2a,(%rax)
  jmp    L246
L45:
  mov    -0x334(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x1a0,%rax
  movb   $0x2d,(%rax)
L246:
  addl   $0x1,-0x334(%rbp)
L69:
  cmpl   $0x13,-0x334(%rbp)
  jle    L393
  addl   $0x1,-0x338(%rbp)
L419:
  cmpl   $0x13,-0x338(%rbp)
  jle    L363
  movl   $0x0,-0x338(%rbp)
  jmp    L350
L108:
  movl   $0x0,-0x334(%rbp)
  jmp    L374
L512:
  mov    -0x334(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x1a0,%rax
  movzbl (%rax),%edx
  mov    -0x334(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x338(%rbp),%eax
  movslq %eax,%rcx
  mov    %rcx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rsi,%rax
  sub    $0x330,%rax
  mov    %dl,(%rax)
  addl   $0x1,-0x334(%rbp)
L374:
  cmpl   $0x13,-0x334(%rbp)
  jle    L512
  addl   $0x1,-0x338(%rbp)
L350:
  cmpl   $0x13,-0x338(%rbp)
  jle    L108
  movl   $0x0,-0x338(%rbp)
  jmp    L228
L316:
  movl   $0x0,-0x334(%rbp)
  jmp    L50
L161:
  mov    -0x334(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x330,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <putchar@plt>
  addl   $0x1,-0x334(%rbp)
L50:
  cmpl   $0x13,-0x334(%rbp)
  jle    L161
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x338(%rbp)
L228:
  cmpl   $0x13,-0x338(%rbp)
  jle    L316
  movl   $0x0,-0x338(%rbp)
  jmp    L414
L272:
  movl   $0x0,-0x334(%rbp)
  jmp    L517
L514:
  addl   $0x1,-0x334(%rbp)
L517:
  cmpl   $0x270f,-0x334(%rbp)
  jle    L514
  addl   $0x1,-0x338(%rbp)
L414:
  cmpl   $0x270f,-0x338(%rbp)
  jle    L272
  jmp    L263
```

tool_calls: name: parse_data
arguments: data_tag: D1
datatype: string
name: parse_data
arguments: data_tag: D36
datatype: string
name: parse_data
arguments: data_tag: D33
datatype: string
name: parse_data
arguments: data_tag: D18
datatype: string

tool: D1: Input default alive cell location.(x,y)

tool: D36: When input number 99, setting is finished.

tool: D33: x, y = 

tool: D18: %d%d

assistant: ```c
void run() {
  char field[20][20];
  char nfield[20][20];
  int x, y;
  int count;
  int i, j;
  for (i = 0; i < 20; i++) {
    for (j = 0; j < 20; j++) {
      field[i][j] = '-';
      nfield[i][j] = '-';
    }
  }
  printf("Input default alive cell location.(x,y)\n");
  printf("When input number 99, setting is finished.\n");
  while (1) {
    printf("x, y = ");
    scanf("%d%d", &x, &y);
    if (x == 99 || y == 99) {
      break;
    }
    field[x][y] = '*';
  }
  for (i = 0; i < 20; i++) {
    for (j = 0; j < 20; j++) {
      printf("%c", field[i][j]);
    }
    printf("\n");
  }
  printf("\n");
  while (1) {
    for (i = 0; i < 20; i++) {
      for (j = 0; j < 20; j++) {
        count = 0;
        if ((i - 1 < 0) || (j - 1 < 0)) {
          ;
        } else if (field[i - 1][j - 1] == '*') {
          count++;
        }
        if (j - 1 < 0) {
          ;
        } else if (field[i][j - 1] == '*') {
          count++;
        }
        if ((i + 1 > 20) || (j - 1 < 0)) {
          ;
        } else if (field[i + 1][j - 1] == '*') {
          count++;
        }
        if (i - 1 < 0) {
          ;
        } else if (field[i - 1][j] == '*') {
          count++;
        }
        if (i + 1 > 20) {
          ;
        } else if (field[i + 1][j] == '*') {
          count++;
        }
        if ((i - 1 < 0) || (j + 1 > 20)) {
          ;
        } else if (field[i - 1][j + 1] == '*') {
          count++;
        }
        if (j + 1 > 20) {
          ;
        } else if (field[i][j + 1] == '*') {
          count++;
        }
        if ((i + 1 > 20) || (j + 1 > 20)) {
          ;
        } else if (field[i + 1][j + 1] == '*') {
          count++;
        }
        if (count == 3) {
          nfield[i][j] = '*';
        } else if (count == 2 && field[i][j] == '*') {
          nfield[i][j] = '*';
        } else {
          nfield[i][j] = '-';
        }
      }
    }
    for (i = 0; i < 20; i++) {
      for (j = 0; j < 20; j++) {
        field[i][j] = nfield[i][j];
      }
    }
    for (i = 0; i < 20; i++) {
      for (j = 0; j < 20; j++) {
        printf("%c", field[i][j]);
      }
      printf("\n");
    }
    for (i = 0; i < 10000; i++) {
      for (j = 0; j < 10000; j++) {
        ;
      }
    }
  }
}
```