user: 下面的汇编指令对应的C源代码是什么：

```asm
<div_s>:
  endbr64
  push   %r13
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  mov    %rdi,%rbp
  cmp    %rsi,%rdi
  jg     L358
  test   %rdi,%rdi
  js     L358
  test   %r12,%r12
  je     L43
L285:
  test   %rbp,%rbp
  jne    L224
L26:
  xor    %r13d,%r13d
L16:
  mov    %r13,%rax
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax,%rax,1)
L358:
  lea    D9(%rip),%rdi
  xor    %eax,%eax
  mov    %r12,%rdx
  mov    %rbp,%rsi
  call   <printf@plt>
  xor    %edi,%edi
  call   <exit@plt>
  test   %r12,%r12
  jne    L285
L43:
  lea    D14(%rip),%rdi
  call   <puts@plt>
  xor    %edi,%edi
  call   <exit@plt>
  test   %rbp,%rbp
  je     L26
L232:
  mov    %rbp,%rdi
  xor    %r13d,%r13d
  call   <L_deposit_l@plt>
  mov    %r12,%rdi
  mov    %eax,%ebp
  call   <L_deposit_l@plt>
  add    %ebp,%ebp
  mov    %eax,%r12d
  cmp    %ebp,%eax
  jle    L86
L323:
  add    %ebp,%ebp
  add    %r13,%r13
  cmp    %ebp,%r12d
  jle    L13
L153:
  add    %ebp,%ebp
  add    %r13,%r13
  cmp    %ebp,%r12d
  jle    L202
L199:
  add    %ebp,%ebp
  add    %r13,%r13
  cmp    %ebp,%r12d
  jle    L137
L128:
  add    %ebp,%ebp
  add    %r13,%r13
  cmp    %ebp,%r12d
  jle    L63
L127:
  add    %ebp,%ebp
  add    %r13,%r13
  cmp    %ebp,%r12d
  jle    L225
L309:
  add    %ebp,%ebp
  add    %r13,%r13
  cmp    %ebp,%r12d
  jle    L201
L33:
  add    %ebp,%ebp
  add    %r13,%r13
  cmp    %ebp,%r12d
  jle    L175
L62:
  add    %ebp,%ebp
  add    %r13,%r13
  cmp    %ebp,%r12d
  jle    L355
L156:
  add    %ebp,%ebp
  add    %r13,%r13
  cmp    %ebp,%r12d
  jle    L179
L70:
  add    %ebp,%ebp
  add    %r13,%r13
  cmp    %ebp,%r12d
  jle    L210
L166:
  add    %ebp,%ebp
  add    %r13,%r13
  cmp    %ebp,%r12d
  jle    L119
L196:
  add    %ebp,%ebp
  add    %r13,%r13
  cmp    %ebp,%r12d
  jle    L349
L161:
  add    %ebp,%ebp
  add    %r13,%r13
  cmp    %ebp,%r12d
  jle    L4
L347:
  lea    0x0(%rbp,%rbp,1),%edi
  add    %r13,%r13
  cmp    %edi,%r12d
  jg     L16
  mov    %r12d,%esi
  call   <L_sub@plt>
  pop    %rbp
  mov    %r13,%rdi
  pop    %r12
  mov    $0x1,%esi
  pop    %r13
  jmp    10a0 <add@plt>
  nopw   0x0(%rax,%rax,1)
L224:
  mov    $0x7fff,%r13d
  cmp    %r12,%rbp
  jne    L232
  mov    %r13,%rax
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax,%rax,1)
L4:
  mov    %ebp,%edi
  mov    %r12d,%esi
  call   <L_sub@plt>
  mov    %r13,%rdi
  mov    $0x1,%esi
  mov    %eax,%ebp
  call   <add@plt>
  mov    %rax,%r13
  jmp    L347
  xchg   %ax,%ax
L349:
  mov    %ebp,%edi
  mov    %r12d,%esi
  call   <L_sub@plt>
  mov    %r13,%rdi
  mov    $0x1,%esi
  mov    %eax,%ebp
  call   <add@plt>
  mov    %rax,%r13
  jmp    L161
  nopl   0x0(%rax)
L119:
  mov    %ebp,%edi
  mov    %r12d,%esi
  call   <L_sub@plt>
  mov    %r13,%rdi
  mov    $0x1,%esi
  mov    %eax,%ebp
  call   <add@plt>
  mov    %rax,%r13
  jmp    L196
  nopl   0x0(%rax)
L210:
  mov    %ebp,%edi
  mov    %r12d,%esi
  call   <L_sub@plt>
  mov    %r13,%rdi
  mov    $0x1,%esi
  mov    %eax,%ebp
  call   <add@plt>
  mov    %rax,%r13
  jmp    L166
  nopl   0x0(%rax)
L179:
  mov    %ebp,%edi
  mov    %r12d,%esi
  call   <L_sub@plt>
  mov    %r13,%rdi
  mov    $0x1,%esi
  mov    %eax,%ebp
  call   <add@plt>
  mov    %rax,%r13
  jmp    L70
  nopl   0x0(%rax)
L355:
  mov    %ebp,%edi
  mov    %r12d,%esi
  call   <L_sub@plt>
  mov    %r13,%rdi
  mov    $0x1,%esi
  mov    %eax,%ebp
  call   <add@plt>
  mov    %rax,%r13
  jmp    L156
  nopl   0x0(%rax)
L175:
  mov    %ebp,%edi
  mov    %r12d,%esi
  call   <L_sub@plt>
  mov    %r13,%rdi
  mov    $0x1,%esi
  mov    %eax,%ebp
  call   <add@plt>
  mov    %rax,%r13
  jmp    L62
  nopl   0x0(%rax)
L201:
  mov    %ebp,%edi
  mov    %r12d,%esi
  call   <L_sub@plt>
  mov    %r13,%rdi
  mov    $0x1,%esi
  mov    %eax,%ebp
  call   <add@plt>
  mov    %rax,%r13
  jmp    L33
  nopl   0x0(%rax)
L225:
  mov    %ebp,%edi
  mov    %r12d,%esi
  call   <L_sub@plt>
  mov    %r13,%rdi
  mov    $0x1,%esi
  mov    %eax,%ebp
  call   <add@plt>
  mov    %rax,%r13
  jmp    L309
  nopl   0x0(%rax)
L63:
  mov    %ebp,%edi
  mov    %r12d,%esi
  call   <L_sub@plt>
  mov    %r13,%rdi
  mov    $0x1,%esi
  mov    %eax,%ebp
  call   <add@plt>
  mov    %rax,%r13
  jmp    L127
  nopl   0x0(%rax)
L137:
  mov    %ebp,%edi
  mov    %r12d,%esi
  call   <L_sub@plt>
  mov    %r13,%rdi
  mov    $0x1,%esi
  mov    %eax,%ebp
  call   <add@plt>
  mov    %rax,%r13
  jmp    L128
  nopl   0x0(%rax)
L202:
  mov    %ebp,%edi
  mov    %r12d,%esi
  call   <L_sub@plt>
  mov    %r13,%rdi
  mov    $0x1,%esi
  mov    %eax,%ebp
  call   <add@plt>
  mov    %rax,%r13
  jmp    L199
  nopl   0x0(%rax)
L13:
  mov    %ebp,%edi
  mov    %r12d,%esi
  call   <L_sub@plt>
  mov    %r13,%rdi
  mov    $0x1,%esi
  mov    %eax,%ebp
  call   <add@plt>
  mov    %rax,%r13
  jmp    L153
  nopl   0x0(%rax)
L86:
  mov    %ebp,%edi
  mov    %eax,%esi
  call   <L_sub@plt>
  mov    $0x1,%esi
  xor    %edi,%edi
  mov    %eax,%ebp
  call   <add@plt>
  mov    %rax,%r13
  jmp    L323
```

tool_calls: name: extract_symbolic_data
arguments: label: D9
data_type: string
name: extract_symbolic_data
arguments: label: D14
data_type: string

tool: D9: Division Error var1=%d  var2=%d


tool: D14: Division by 0, Fatal error 

assistant: ```c
int16_t div_s(int16_t var1, int16_t var2) {
  int16_t var_out = 0;
  int16_t iteration;
  int32_t L_num;
  int32_t L_denom;
  if ((var1 > var2) || (var1 < 0) || (var2 < 0)) {
    printf("Division Error var1=%d  var2=%d\n", var1, var2);
    exit(0);
  }
  if (var2 == 0) {
    printf("Division by 0, Fatal error \n");
    exit(0);
  }
  if (var1 == 0) {
    var_out = 0;
  } else {
    if (var1 == var2) {
      var_out = (int16_t)0x7fff;
    } else {
      L_num = L_deposit_l(var1);
      L_denom = L_deposit_l(var2);
      for (iteration = 0; iteration < 15; iteration++) {
        var_out <<= 1;
        L_num <<= 1;
        if (L_num >= L_denom) {
          L_num = L_sub(L_num, L_denom);
          var_out = add(var_out, 1);
        }
      }
    }
  }
  return (var_out);
}
```