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

```asm
<gain_aster>:
  endbr64
  test   %esi,%esi
  jne    L235
  cmp    $0x1,%edi
  je     L179
  movsd  D303(%rip),%xmm0
  cmp    $0x2,%edi
  jne    L357
L57:
  cmp    $0x5,%edi
  jne    L385
  movsd  D350(%rip),%xmm0
L208:
  cmp    $0x8,%edi
  jne    L374
  movsd  D238(%rip),%xmm0
  jmp    L202
L357:
  cmp    $0x3,%edi
  jne    L275
  movsd  D303(%rip),%xmm0
L385:
  cmp    $0x6,%edi
  jne    L53
  movsd  D403(%rip),%xmm0
L374:
  cmp    $0x9,%edi
  jne    L202
  movsd  D130(%rip),%xmm0
L202:
  cmp    $0x3,%esi
  jne    L370
  cmp    $0x4,%edi
  je     L312
  cmp    $0x5,%edi
  jne    L82
  movsd  D333(%rip),%xmm0
L287:
  cmp    $0x8,%edi
  jne    L66
  movsd  D241(%rip),%xmm0
  ret
L275:
  movsd  D110(%rip),%xmm0
  jmp    L313
L179:
  movsd  D54(%rip),%xmm0
L313:
  cmp    $0x4,%edi
  jne    L57
  movsd  D59(%rip),%xmm0
L53:
  cmp    $0x7,%edi
  jne    L208
  movsd  D210(%rip),%xmm0
  jmp    L202
L235:
  cmp    $0x1,%esi
  jne    L227
  cmp    $0x1,%edi
  je     L8
  movsd  D150(%rip),%xmm0
  cmp    $0x2,%edi
  jne    L440
L123:
  cmp    $0x5,%edi
  jne    L372
  movsd  D387(%rip),%xmm0
L310:
  cmp    $0x8,%edi
  jne    L158
  movsd  D39(%rip),%xmm0
L318:
  cmp    $0xb,%edi
  jne    L192
  movsd  D298(%rip),%xmm0
L299:
  cmp    $0xe,%edi
  jne    L370
  movsd  D308(%rip),%xmm0
  ret
L440:
  cmp    $0x3,%edi
  jne    L59
  movsd  D150(%rip),%xmm0
L372:
  cmp    $0x6,%edi
  jne    L371
  movsd  D220(%rip),%xmm0
L158:
  cmp    $0x9,%edi
  jne    L55
  movsd  D286(%rip),%xmm0
L192:
  cmp    $0xc,%edi
  jne    L225
  movsd  D336(%rip),%xmm0
  ret
L59:
  movsd  D76(%rip),%xmm0
  jmp    L79
L8:
  movsd  D206(%rip),%xmm0
L79:
  cmp    $0x4,%edi
  jne    L123
  movsd  D161(%rip),%xmm0
L371:
  cmp    $0x7,%edi
  jne    L310
  movsd  D23(%rip),%xmm0
L55:
  cmp    $0xa,%edi
  jne    L318
  movsd  D277(%rip),%xmm0
L225:
  cmp    $0xd,%edi
  jne    L299
  movsd  D135(%rip),%xmm0
  ret
L227:
  cmp    $0x2,%esi
  jne    L202
  test   %edi,%edi
  je     L81
  movsd  D315(%rip),%xmm0
  cmp    $0x1,%edi
  jne    L35
L84:
  cmp    $0x4,%edi
  jne    L325
  movsd  D8(%rip),%xmm0
L215:
  cmp    $0x7,%edi
  jne    L448
  movsd  D223(%rip),%xmm0
  ret
L35:
  cmp    $0x2,%edi
  jne    L130
  movsd  D143(%rip),%xmm0
L325:
  cmp    $0x5,%edi
  jne    L351
  movsd  D87(%rip),%xmm0
L448:
  cmp    $0x8,%edi
  jne    L46
  movsd  D341(%rip),%xmm0
  ret
L81:
  movsd  D3(%rip),%xmm0
L130:
  cmp    $0x3,%edi
  jne    L84
  movsd  D143(%rip),%xmm0
L351:
  cmp    $0x6,%edi
  jne    L215
  movsd  D304(%rip),%xmm0
L46:
  cmp    $0x9,%edi
  jne    L370
  movsd  D169(%rip),%xmm0
  ret
L82:
  cmp    $0x6,%edi
  jne    L245
  movsd  D43(%rip),%xmm0
L66:
  cmp    $0x9,%edi
  jne    L370
  movsd  D26(%rip),%xmm0
  ret
L312:
  movsd  D8(%rip),%xmm0
L245:
  cmp    $0x7,%edi
  jne    L287
  movsd  D299(%rip),%xmm0
  ret
L370:
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D303
datatype: f64
name: disassemble_data
arguments: data_label: D350
datatype: f64
name: disassemble_data
arguments: data_label: D238
datatype: f64
name: disassemble_data
arguments: data_label: D403
datatype: f64
name: disassemble_data
arguments: data_label: D130
datatype: f64
name: disassemble_data
arguments: data_label: D333
datatype: f64
name: disassemble_data
arguments: data_label: D241
datatype: f64
name: disassemble_data
arguments: data_label: D110
datatype: f64
name: disassemble_data
arguments: data_label: D54
datatype: f64
name: disassemble_data
arguments: data_label: D59
datatype: f64
name: disassemble_data
arguments: data_label: D210
datatype: f64
name: disassemble_data
arguments: data_label: D150
datatype: f64
name: disassemble_data
arguments: data_label: D387
datatype: f64
name: disassemble_data
arguments: data_label: D39
datatype: f64
name: disassemble_data
arguments: data_label: D298
datatype: f64
name: disassemble_data
arguments: data_label: D308
datatype: f64
name: disassemble_data
arguments: data_label: D220
datatype: f64
name: disassemble_data
arguments: data_label: D286
datatype: f64
name: disassemble_data
arguments: data_label: D336
datatype: f64
name: disassemble_data
arguments: data_label: D76
datatype: f64
name: disassemble_data
arguments: data_label: D206
datatype: f64
name: disassemble_data
arguments: data_label: D161
datatype: f64
name: disassemble_data
arguments: data_label: D23
datatype: f64
name: disassemble_data
arguments: data_label: D277
datatype: f64
name: disassemble_data
arguments: data_label: D135
datatype: f64
name: disassemble_data
arguments: data_label: D315
datatype: f64
name: disassemble_data
arguments: data_label: D8
datatype: f64
name: disassemble_data
arguments: data_label: D223
datatype: f64
name: disassemble_data
arguments: data_label: D143
datatype: f64
name: disassemble_data
arguments: data_label: D87
datatype: f64
name: disassemble_data
arguments: data_label: D341
datatype: f64
name: disassemble_data
arguments: data_label: D3
datatype: f64
name: disassemble_data
arguments: data_label: D304
datatype: f64
name: disassemble_data
arguments: data_label: D169
datatype: f64
name: disassemble_data
arguments: data_label: D43
datatype: f64
name: disassemble_data
arguments: data_label: D26
datatype: f64
name: disassemble_data
arguments: data_label: D299
datatype: f64

tool: D303: 0.423

tool: D350: 0.0348

tool: D238: 0.0209

tool: D403: 0.0313

tool: D130: 0.0159

tool: D333: 0.409

tool: D241: 0.245

tool: D110: 0.676

tool: D54: 0.708

tool: D59: 0.1087

tool: D210: 0.0299

tool: D150: 0.862

tool: D387: 0.0696

tool: D39: 0.0417

tool: D298: 0.00678

tool: D308: 0.005225

tool: D220: 0.0625

tool: D286: 0.0318

tool: D336: 0.00659

tool: D76: 1.688

tool: D206: 1.415

tool: D161: 0.2174

tool: D23: 0.0597

tool: D277: 0.006822

tool: D135: 0.005693

tool: D315: 1.89

tool: D8: 0.29

tool: D223: 0.0795

tool: D143: 1.15

tool: D87: 0.0925

tool: D341: 0.0556

tool: D3: 2.25

tool: D304: 0.083

tool: D169: 0.0424

tool: D43: 0.39

tool: D26: 0.265

tool: D299: 0.332

assistant: ```c
double gain_aster(int band_number, int gain_code) {
  double result;
  if (gain_code == 0) {
    if (band_number == 0)
      result = 0.676;
    if (band_number == 1)
      result = 0.708;
    if (band_number == 2)
      result = 0.423;
    if (band_number == 3)
      result = 0.423;
    if (band_number == 4)
      result = 0.1087;
    if (band_number == 5)
      result = 0.0348;
    if (band_number == 6)
      result = 0.0313;
    if (band_number == 7)
      result = 0.0299;
    if (band_number == 8)
      result = 0.0209;
    if (band_number == 9)
      result = 0.0159;
  }
  if (gain_code == 1) {
    if (band_number == 0)
      result = 1.688;
    if (band_number == 1)
      result = 1.415;
    if (band_number == 2)
      result = 0.862;
    if (band_number == 3)
      result = 0.862;
    if (band_number == 4)
      result = 0.2174;
    if (band_number == 5)
      result = 0.0696;
    if (band_number == 6)
      result = 0.0625;
    if (band_number == 7)
      result = 0.0597;
    if (band_number == 8)
      result = 0.0417;
    if (band_number == 9)
      result = 0.0318;
    if (band_number == 10)
      result = 0.006822;
    if (band_number == 11)
      result = 0.006780;
    if (band_number == 12)
      result = 0.006590;
    if (band_number == 13)
      result = 0.005693;
    if (band_number == 14)
      result = 0.005225;
  }
  if (gain_code == 2) {
    if (band_number == 0)
      result = 2.25;
    if (band_number == 1)
      result = 1.89;
    if (band_number == 2)
      result = 1.15;
    if (band_number == 3)
      result = 1.15;
    if (band_number == 4)
      result = 0.290;
    if (band_number == 5)
      result = 0.0925;
    if (band_number == 6)
      result = 0.0830;
    if (band_number == 7)
      result = 0.0795;
    if (band_number == 8)
      result = 0.0556;
    if (band_number == 9)
      result = 0.0424;
  }
  if (gain_code == 3) {
    if (band_number == 4)
      result = 0.290;
    if (band_number == 5)
      result = 0.409;
    if (band_number == 6)
      result = 0.390;
    if (band_number == 7)
      result = 0.332;
    if (band_number == 8)
      result = 0.245;
    if (band_number == 9)
      result = 0.265;
  }
  return result;
}
```