user: 请将以下的汇编代码转换成C语言代码:

```asm
<main>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  call   <menu@plt>
  pxor   %xmm7,%xmm7
  movss  %xmm7,0x8(%rsp)
  movss  %xmm7,0xc(%rsp)
  movss  %xmm7,0x4(%rsp)
  lea    D141(%rip),%rbx
  lea    D41(%rip),%r13
  lea    D229(%rip),%rbp
  lea    D226(%rip),%r12
  jmp    L111
L144:
  lea    D119(%rip),%rdi
  call   <puts@plt>
  lea    0x24(%rsp),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movss  0x4(%rsp),%xmm2
  addss  0x24(%rsp),%xmm2
  movss  %xmm2,0x4(%rsp)
L81:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%al
  jne    L81
  mov    $0x0,%eax
  call   <menu@plt>
L111:
  lea    0x23(%rsp),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  test   %rax,%rax
  je     L162
  cmpb   $0x71,0x23(%rsp)
  je     L162
L154:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%al
  jne    L154
  movzbl 0x23(%rsp),%eax
  cmp    $0x62,%al
  je     L19
  cmp    $0x63,%al
  je     L17
  cmp    $0x61,%al
  je     L144
  lea    D6(%rip),%rdi
  call   <puts@plt>
  jmp    L111
L19:
  mov    %r13,%rdi
  call   <puts@plt>
  lea    0x24(%rsp),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movss  0xc(%rsp),%xmm3
  addss  0x24(%rsp),%xmm3
  movss  %xmm3,0xc(%rsp)
  jmp    L81
L17:
  mov    %r12,%rdi
  call   <puts@plt>
  lea    0x24(%rsp),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movss  0x8(%rsp),%xmm4
  addss  0x24(%rsp),%xmm4
  movss  %xmm4,0x8(%rsp)
  jmp    L81
L162:
  movss  0x4(%rsp),%xmm5
  movaps %xmm5,%xmm6
  mulss  D299(%rip),%xmm6
  movss  %xmm6,0x14(%rsp)
  movss  0xc(%rsp),%xmm2
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm2,%xmm1
  movq   %xmm1,%r12
  movapd %xmm1,%xmm0
  mulsd  D103(%rip),%xmm0
  pxor   %xmm3,%xmm3
  cvtsd2ss %xmm0,%xmm3
  movss  %xmm3,0x18(%rsp)
  movss  0x8(%rsp),%xmm1
  pxor   %xmm7,%xmm7
  cvtss2sd %xmm1,%xmm7
  movq   %xmm7,%rbp
  movapd %xmm7,%xmm0
  mulsd  D272(%rip),%xmm0
  pxor   %xmm4,%xmm4
  cvtsd2ss %xmm0,%xmm4
  movss  %xmm4,0x1c(%rsp)
  addss  %xmm3,%xmm6
  movaps %xmm6,%xmm0
  addss  %xmm4,%xmm0
  movss  %xmm0,0x8(%rsp)
  addss  %xmm5,%xmm2
  movaps %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  D198(%rip),%xmm6
  movss  %xmm6,0xc(%rsp)
  movss  D275(%rip),%xmm1
  comiss %xmm0,%xmm1
  ja     L163
  movss  D14(%rip),%xmm1
  comiss %xmm0,%xmm1
  ja     L130
  subss  %xmm1,%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  D257(%rip),%xmm0
  addsd  D264(%rip),%xmm0
  pxor   %xmm2,%xmm2
  cvtsd2ss %xmm0,%xmm2
  movss  %xmm2,0xc(%rsp)
L163:
  movss  0x8(%rsp),%xmm5
  comiss D159(%rip),%xmm5
  jbe    L139
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm5,%xmm0
  mulsd  D117(%rip),%xmm0
  pxor   %xmm6,%xmm6
  cvtsd2ss %xmm0,%xmm6
  movss  %xmm6,0x10(%rsp)
  jmp    L98
L130:
  movss  D69(%rip),%xmm2
  movss  %xmm2,0xc(%rsp)
  jmp    L163
L139:
  pxor   %xmm6,%xmm6
  movss  %xmm6,0x10(%rsp)
L98:
  lea    D127(%rip),%rbx
  mov    %rbx,%rdi
  call   <puts@plt>
  lea    D48(%rip),%rdi
  call   <puts@plt>
  movsd  D103(%rip),%xmm1
  movsd  D37(%rip),%xmm0
  lea    D136(%rip),%r13
  mov    %r13,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movsd  D272(%rip),%xmm0
  lea    D81(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D164(%rip),%rdi
  call   <puts@plt>
  pxor   %xmm0,%xmm0
  cvtss2sd 0x4(%rsp),%xmm0
  movq   %r12,%xmm1
  lea    D132(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movq   %rbp,%xmm0
  lea    D106(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D183(%rip),%rdi
  call   <puts@plt>
  pxor   %xmm0,%xmm0
  cvtss2sd 0x14(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd 0x18(%rsp),%xmm1
  mov    %r13,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  pxor   %xmm0,%xmm0
  cvtss2sd 0x1c(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd 0x8(%rsp),%xmm1
  lea    D253(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  pxor   %xmm0,%xmm0
  cvtss2sd 0x10(%rsp),%xmm0
  lea    D263(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  pxor   %xmm0,%xmm0
  cvtss2sd 0xc(%rsp),%xmm0
  lea    D74(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movss  0x8(%rsp),%xmm0
  subss  0x10(%rsp),%xmm0
  addss  0xc(%rsp),%xmm0
  cvtss2sd %xmm0,%xmm0
  lea    D215(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    %rbx,%rdi
  call   <puts@plt>
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L141
  mov    $0x0,%eax
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L141:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D141
data_type: string
name: parse_data
arguments: data_label: D41
data_type: string
name: parse_data
arguments: data_label: D229
data_type: string
name: parse_data
arguments: data_label: D226
data_type: string
name: parse_data
arguments: data_label: D119
data_type: string
name: parse_data
arguments: data_label: D6
data_type: string
name: parse_data
arguments: data_label: D299
data_type: f32
name: parse_data
arguments: data_label: D103
data_type: f64
name: parse_data
arguments: data_label: D272
data_type: f64
name: parse_data
arguments: data_label: D198
data_type: f32
name: parse_data
arguments: data_label: D275
data_type: f32
name: parse_data
arguments: data_label: D14
data_type: f32
name: parse_data
arguments: data_label: D257
data_type: f64
name: parse_data
arguments: data_label: D264
data_type: f64
name: parse_data
arguments: data_label: D159
data_type: f32
name: parse_data
arguments: data_label: D117
data_type: f64
name: parse_data
arguments: data_label: D69
data_type: f32
name: parse_data
arguments: data_label: D127
data_type: string
name: parse_data
arguments: data_label: D48
data_type: string
name: parse_data
arguments: data_label: D37
data_type: f32[2]
name: parse_data
arguments: data_label: D136
data_type: string
name: parse_data
arguments: data_label: D81
data_type: string
name: parse_data
arguments: data_label: D164
data_type: string
name: parse_data
arguments: data_label: D132
data_type: string
name: parse_data
arguments: data_label: D106
data_type: string
name: parse_data
arguments: data_label: D183
data_type: string
name: parse_data
arguments: data_label: D253
data_type: string
name: parse_data
arguments: data_label: D263
data_type: string
name: parse_data
arguments: data_label: D74
data_type: string
name: parse_data
arguments: data_label: D215
data_type: string

tool: D141: %c

tool: D41: please enter the weight (in pound) of beet

tool: D229: %f

tool: D226: please enter the weight (in pound) of carrot

tool: D119: please enter the weight (in pound) of artichoke

tool: D6: No such option! Please enter a letter within the range a ~ c & q.

tool: D299: 1.25

tool: D103: 0.65

tool: D272: 0.89

tool: D198: 3.5

tool: D275: 5

tool: D14: 20

tool: D257: 0.1

tool: D264: 8

tool: D159: 100

tool: D117: 0.05

tool: D69: 10

tool: D127: 
***********************************


tool: D48: Unit price:

tool: {"D37": [0.0,1.90625]}

tool: D136: Artichoke: $%.2f	Beet: $%.2f


tool: D81: Carrot: $%.2f



tool: D164: Weight ordered:

tool: D132: Artichoke: %.2f		Beet: %.2f


tool: D106: Carrot: %.2f



tool: D183: Order price:

tool: D253: Carrot: $%.2f		All: $%.2f



tool: D263: Discount: $%.2f


tool: D74: Transportation cost: $%.2f



tool: D215: Total: $%.2f


assistant: ```c
int main(void) {
  float weightA = 0, weightB = 0, weightC = 0;
  char type;
  menu();
  while (scanf("%c", &type) && type != 'q') {
    while (getchar() != '\n')
      continue;
    float addition;
    switch (type) {
    case 'a':
      printf("please enter the weight (in pound) of artichoke\n");
      scanf("%f", &addition);
      weightA += addition;
      break;
    case 'b':
      printf("please enter the weight (in pound) of beet\n");
      scanf("%f", &addition);
      weightB += addition;
      break;
    case 'c':
      printf("please enter the weight (in pound) of carrot\n");
      scanf("%f", &addition);
      weightC += addition;
      break;
    default:
      printf("No such option! Please enter a letter within the range a ~ c & q.\n");
      continue;
    }
    while (getchar() != '\n')
      continue;
    menu();
  }
  float costA = weightA * 1.25, costB = weightB * 0.65, costC = weightC * 0.89, costABC = costA + costB + costC, weight = weightA + weightB + weightC, costTrans = weight < 5 ? 3.5 : weight < 20 ? 10.0 : 8 + 0.1 * (weight - 20), discount = costABC > 100 ? 0.05 * costABC : 0, costT = costABC - discount + costTrans;
  printf("\n***********************************\n\n");
  printf("Unit price:\n");
  printf("Artichoke: $%.2f\tBeet: $%.2f\n", 1.25, 0.65);
  printf("Carrot: $%.2f\n\n", 0.89);
  printf("Weight ordered:\n");
  printf("Artichoke: %.2f\t\tBeet: %.2f\n", weightA, weightB);
  printf("Carrot: %.2f\n\n", weightC);
  printf("Order price:\n");
  printf("Artichoke: $%.2f\tBeet: $%.2f\n", costA, costB);
  printf("Carrot: $%.2f\t\tAll: $%.2f\n\n", costC, costABC);
  printf("Discount: $%.2f\n", discount);
  printf("Transportation cost: $%.2f\n\n", costTrans);
  printf("Total: $%.2f\n", costT);
  printf("\n***********************************\n\n");
  return 0;
}
```