user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<CdAudio535DeviceControl>:
  endbr64
  push   %r15
  xor    %eax,%eax
  push   %r14
  push   %r13
  mov    %edi,%r13d
  push   %r12
  push   %rbp
  mov    %esi,%ebp
  push   %rbx
  sub    $0x38,%rsp
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  mov    %eax,%r14d
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  mov    %eax,%r12d
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  mov    %eax,%ebx
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  mov    %eax,0x8(%rsp)
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  mov    %eax,0xc(%rsp)
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  mov    %eax,0x28(%rsp)
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  mov    %eax,0x2c(%rsp)
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  mov    %eax,0x10(%rsp)
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  mov    %eax,0x20(%rsp)
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  mov    %eax,0x14(%rsp)
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  mov    %eax,0x18(%rsp)
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  mov    %eax,%r15d
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  mov    %eax,0x1c(%rsp)
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  mov    %eax,0x24(%rsp)
  xor    %eax,%eax
  call   <__VERIFIER_nondet_int@plt>
  cmp    $0x24038,%ebx
  je     L57
  cmp    $0x24034,%ebx
  jg     L185
  cmp    $0x23fff,%ebx
  jle    L282
  lea    -0x24000(%rbx),%ecx
  cmp    $0x34,%ecx
  ja     L282
  lea    D9(%rip),%rsi
  movslq (%rsi,%rcx,4),%rdx
  add    %rsi,%rdx
  notrack jmp *%rdx
  nopl   0x0(%rax)
L185:
  cmp    $0x24800,%ebx
  je     L92
  cmp    $0x24808,%ebx
  jne    L282
L274:
  mov    %r14d,%edi
  xor    %ecx,%ecx
  xor    %edx,%edx
  mov    %r15d,%esi
  call   <SendSrbSynchronous@plt>
  mov    %eax,%edi
L272:
  mov    %r12d,%edx
  mov    %ebp,%esi
L233:
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    10c0 <AG_SetStatusAndReturn@plt>
  nopl   0x0(%rax)
L92:
  mov    %r13d,%edi
  call   <CdAudioIsPlayActive@plt>
L282:
  add    $0x38,%rsp
  mov    %ebp,%esi
  mov    %r13d,%edi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1090 <CdAudioSendToNextDriver@plt>
  nopl   0x0(%rax,%rax,1)
  mov    $0xc0000010,%edi
  jmp    L272
  nopw   0x0(%rax,%rax,1)
  mov    0x8(%rsp),%esi
  test   %esi,%esi
  je     L224
L286:
  mov    $0xc0000023,%edi
  jmp    L272
  nopl   0x0(%rax,%rax,1)
  mov    0x10(%rsp),%ecx
  cmp    %ecx,0x8(%rsp)
  jl     L286
  test   %eax,%eax
  je     L106
  cmpl   $0x1,0x20(%rsp)
  je     L75
  mov    %r12d,%edx
  mov    %ebp,%esi
  mov    $0xc0000001,%edi
  jmp    L233
  nopl   0x0(%rax)
  mov    0x18(%rsp),%edx
  mov    $0xc0000004,%edi
  cmp    %edx,0xc(%rsp)
  jl     L272
  jmp    L274
  mov    0x14(%rsp),%edx
  mov    $0xc0000004,%edi
  cmp    %edx,0xc(%rsp)
  jl     L272
  jmp    L274
  nopl   0x0(%rax,%rax,1)
L57:
  mov    %r13d,%edi
  call   <CdAudioIsPlayActive@plt>
  test   %eax,%eax
  jne    L37
  mov    0x8(%rsp),%ecx
  test   %ecx,%ecx
  jne    L286
  mov    0x1c(%rsp),%edx
  test   %edx,%edx
  je     L106
  mov    0x28(%rsp),%ecx
  mov    0x1c(%rsp),%edx
  mov    %r15d,%esi
  mov    %r14d,%edi
  call   <SendSrbSynchronous@plt>
  test   %eax,%eax
  js     L180
L35:
  xor    %edi,%edi
  jmp    L272
  nopw   0x0(%rax,%rax,1)
L37:
  mov    $0x80000011,%edi
  jmp    L272
  nopw   0x0(%rax,%rax,1)
L224:
  mov    %r13d,%edi
  call   <CdAudioIsPlayActive@plt>
  test   %eax,%eax
  jne    L37
  mov    0x24(%rsp),%eax
  test   %eax,%eax
  je     L106
  mov    0x2c(%rsp),%ecx
  mov    0x24(%rsp),%edx
  mov    %r15d,%esi
  mov    %r14d,%edi
  call   <SendSrbSynchronous@plt>
  test   %eax,%eax
  jns    L35
  mov    $0xc000003c,%edi
  cmp    $0xc000003c,%eax
  je     L272
L180:
  mov    %r12d,%edx
  mov    %ebp,%esi
  mov    %eax,%edi
  jmp    L233
  nop
L106:
  mov    %r12d,%edx
  mov    %ebp,%esi
  mov    $0xc000009a,%edi
  jmp    L233
  nop
L75:
  mov    %r14d,%edi
  mov    %eax,%edx
  mov    %r15d,%esi
  call   <SendSrbSynchronous@plt>
  mov    %eax,%edi
  jmp    L272
```

assistant: ```c
int CdAudio535DeviceControl(int DeviceObject, int Irp) {
  int Irp__Tail__Overlay__CurrentStackLocation = __VERIFIER_nondet_int();
  int DeviceObject__DeviceExtension = __VERIFIER_nondet_int();
  int deviceExtension__TargetDeviceObject = __VERIFIER_nondet_int();
  int Irp__AssociatedIrp__SystemBuffer = __VERIFIER_nondet_int();
  int srb__Cdb = __VERIFIER_nondet_int();
  int currentIrpStack__Parameters__DeviceIoControl__IoControlCode = __VERIFIER_nondet_int();
  int Irp__IoStatus__Information;
  int currentIrpStack__Parameters__DeviceIoControl__OutputBufferLength = __VERIFIER_nondet_int();
  int currentIrpStack__Parameters__DeviceIoControl__InputBufferLength = __VERIFIER_nondet_int();
  int srb__CdbLength;
  int cdb__CDB10__OperationCode;
  int srb__TimeOutValue;
  int sizeof__READ_CAPACITY_DATA = __VERIFIER_nondet_int();
  int lastSession__LogicalBlockAddress = __VERIFIER_nondet_int();
  int cdaudioDataOut__FirstTrack = __VERIFIER_nondet_int();
  int cdaudioDataOut__LastTrack = __VERIFIER_nondet_int();
  int sizeof__CDROM_TOC = __VERIFIER_nondet_int();
  int sizeof__SUB_Q_CURRENT_POSITION = __VERIFIER_nondet_int();
  int userPtr__Format = __VERIFIER_nondet_int();
  int sizeof__CDROM_PLAY_AUDIO_MSF = __VERIFIER_nondet_int();
  int inputBuffer__StartingM = __VERIFIER_nondet_int();
  int inputBuffer__EndingM = __VERIFIER_nondet_int();
  int inputBuffer__StartingS = __VERIFIER_nondet_int();
  int inputBuffer__EndingS = __VERIFIER_nondet_int();
  int inputBuffer__StartingF = __VERIFIER_nondet_int();
  int inputBuffer__EndingF = __VERIFIER_nondet_int();
  int cdb__PLAY_AUDIO_MSF__OperationCode = __VERIFIER_nondet_int();
  int sizeof__CDROM_SEEK_AUDIO_MSF = __VERIFIER_nondet_int();
  int currentIrpStack;
  int deviceExtension;
  int cdaudioDataOut;
  int srb = __VERIFIER_nondet_int();
  int lastSession = __VERIFIER_nondet_int();
  int cdb;
  int status;
  int i = __VERIFIER_nondet_int();
  int bytesTransfered = __VERIFIER_nondet_int();
  int Toc = __VERIFIER_nondet_int();
  int tmp;
  int tmp___0;
  int tmp___1;
  int tmp___2;
  int tmp___3;
  int tmp___4;
  int tracksToReturn;
  int tracksOnCd;
  int tracksInBuffer;
  int userPtr;
  int SubQPtr = __VERIFIER_nondet_int();
  int tmp___5;
  int tmp___6;
  int inputBuffer;
  int inputBuffer___0;
  int tmp___7;
  int tmp___8;
  int __cil_tmp58;
  int __cil_tmp59;
  int __cil_tmp60;
  int __cil_tmp61;
  int __cil_tmp62;
  int __cil_tmp63;
  int __cil_tmp64;
  int __cil_tmp65;
  int __cil_tmp66;
  int __cil_tmp67;
  int __cil_tmp68;
  int __cil_tmp69;
  int __cil_tmp70;
  int __cil_tmp71;
  int __cil_tmp72;
  int __cil_tmp73;
  int __cil_tmp74;
  int __cil_tmp75;
  int __cil_tmp76;
  int __cil_tmp77;
  int __cil_tmp78;
  int __cil_tmp79;
  int __cil_tmp80;
  int __cil_tmp81;
  int __cil_tmp82;
  int __cil_tmp83;
  int __cil_tmp84;
  int __cil_tmp85;
  int __cil_tmp86;
  int __cil_tmp87;
  int __cil_tmp88;
  int __cil_tmp89;
  int __cil_tmp90;
  int __cil_tmp91;
  int __cil_tmp92;
  int __cil_tmp93;
  int __cil_tmp94;
  int __cil_tmp95;
  int __cil_tmp96;
  int __cil_tmp97;
  int __cil_tmp98;
  int __cil_tmp99;
  int __cil_tmp100;
  int __cil_tmp101;
  int __cil_tmp102;
  int __cil_tmp103;
  int __cil_tmp104;
  int __cil_tmp105;
  int __cil_tmp106;
  unsigned long __cil_tmp107;
  unsigned long __cil_tmp108;
  int __cil_tmp109;
  int __cil_tmp110;
  {
    currentIrpStack = Irp__Tail__Overlay__CurrentStackLocation;
    deviceExtension = DeviceObject__DeviceExtension;
    cdaudioDataOut = Irp__AssociatedIrp__SystemBuffer;
    cdb = srb__Cdb;
    {
      __cil_tmp58 = 56;
      __cil_tmp59 = 16384;
      __cil_tmp60 = 131072;
      __cil_tmp61 = 147456;
      __cil_tmp62 = 147512;
      if (currentIrpStack__Parameters__DeviceIoControl__IoControlCode == __cil_tmp62) {
        goto switch_3_exp_0;
      } else {
        {
          __cil_tmp63 = 16384;
          __cil_tmp64 = 131072;
          __cil_tmp65 = 147456;
          if (currentIrpStack__Parameters__DeviceIoControl__IoControlCode == __cil_tmp65) {
            goto switch_3_exp_1;
          } else {
            {
              __cil_tmp66 = 44;
              __cil_tmp67 = 16384;
              __cil_tmp68 = 131072;
              __cil_tmp69 = 147456;
              __cil_tmp70 = 147500;
              if (currentIrpStack__Parameters__DeviceIoControl__IoControlCode == __cil_tmp70) {
                goto switch_3_exp_2;
              } else {
                {
                  __cil_tmp71 = 24;
                  __cil_tmp72 = 16384;
                  __cil_tmp73 = 131072;
                  __cil_tmp74 = 147456;
                  __cil_tmp75 = 147480;
                  if (currentIrpStack__Parameters__DeviceIoControl__IoControlCode == __cil_tmp75) {
                    goto switch_3_exp_3;
                  } else {
                    {
                      __cil_tmp76 = 4;
                      __cil_tmp77 = 16384;
                      __cil_tmp78 = 131072;
                      __cil_tmp79 = 147456;
                      __cil_tmp80 = 147460;
                      if (currentIrpStack__Parameters__DeviceIoControl__IoControlCode == __cil_tmp80) {
                        goto switch_3_exp_4;
                      } else {
                        {
                          __cil_tmp81 = 2056;
                          __cil_tmp82 = 16384;
                          __cil_tmp83 = 131072;
                          __cil_tmp84 = 147456;
                          __cil_tmp85 = 149512;
                          if (currentIrpStack__Parameters__DeviceIoControl__IoControlCode == __cil_tmp85) {
                            goto switch_3_exp_5;
                          } else {
                            {
                              __cil_tmp86 = 52;
                              __cil_tmp87 = 16384;
                              __cil_tmp88 = 131072;
                              __cil_tmp89 = 147456;
                              __cil_tmp90 = 147508;
                              if (currentIrpStack__Parameters__DeviceIoControl__IoControlCode == __cil_tmp90) {
                                goto switch_3_exp_6;
                              } else {
                                {
                                  __cil_tmp91 = 20;
                                  __cil_tmp92 = 16384;
                                  __cil_tmp93 = 131072;
                                  __cil_tmp94 = 147456;
                                  __cil_tmp95 = 147476;
                                  if (currentIrpStack__Parameters__DeviceIoControl__IoControlCode == __cil_tmp95) {
                                    goto switch_3_exp_7;
                                  } else {
                                    {
                                      __cil_tmp96 = 40;
                                      __cil_tmp97 = 16384;
                                      __cil_tmp98 = 131072;
                                      __cil_tmp99 = 147456;
                                      __cil_tmp100 = 147496;
                                      if (currentIrpStack__Parameters__DeviceIoControl__IoControlCode == __cil_tmp100) {
                                        goto switch_3_exp_8;
                                      } else {
                                        {
                                          __cil_tmp101 = 2048;
                                          __cil_tmp102 = 16384;
                                          __cil_tmp103 = 131072;
                                          __cil_tmp104 = 147456;
                                          __cil_tmp105 = 149504;
                                          if (currentIrpStack__Parameters__DeviceIoControl__IoControlCode == __cil_tmp105) {
                                            goto switch_3_exp_9;
                                          } else {
                                            goto switch_3_default;
                                            if (0) {
                                            switch_3_exp_0 : { tmp = CdAudioIsPlayActive(DeviceObject); }
                                              if (tmp) {
                                                status = -2147483631;
                                                Irp__IoStatus__Information = 0;
                                                goto switch_3_break;
                                              }
                                              if (currentIrpStack__Parameters__DeviceIoControl__OutputBufferLength) {
                                                status = -1073741789;
                                                Irp__IoStatus__Information = 0;
                                                goto switch_3_break;
                                              }
                                              if (lastSession == 0) {
                                                {
                                                  status = -1073741670;
                                                  Irp__IoStatus__Information = 0;
                                                  tmp___0 = AG_SetStatusAndReturn(status, Irp, deviceExtension__TargetDeviceObject);
                                                }
                                                return (tmp___0);
                                              }
                                              {
                                                srb__CdbLength = 10;
                                                cdb__CDB10__OperationCode = 38;
                                                srb__TimeOutValue = 10;
                                                status = SendSrbSynchronous(deviceExtension, srb, lastSession, sizeof__READ_CAPACITY_DATA);
                                              }
                                              {
                                                if (status < 0) {
                                                  {
                                                    Irp__IoStatus__Information = 0;
                                                    tmp___1 = AG_SetStatusAndReturn(status, Irp, deviceExtension__TargetDeviceObject);
                                                  }
                                                  return (tmp___1);
                                                } else {
                                                  status = 0;
                                                }
                                              }
                                              Irp__IoStatus__Information = bytesTransfered;
                                              if (lastSession__LogicalBlockAddress == 0) {
                                                goto switch_3_break;
                                              }
                                              cdaudioDataOut__FirstTrack = 1;
                                              cdaudioDataOut__LastTrack = 2;
                                              goto switch_3_break;
                                            switch_3_exp_1:;
                                              if (currentIrpStack__Parameters__DeviceIoControl__OutputBufferLength) {
                                                status = -1073741789;
                                                Irp__IoStatus__Information = 0;
                                                goto switch_3_break;
                                              }
                                              { tmp___2 = CdAudioIsPlayActive(DeviceObject); }
                                              if (tmp___2) {
                                                status = -2147483631;
                                                Irp__IoStatus__Information = 0;
                                                goto switch_3_break;
                                              }
                                              if (Toc == 0) {
                                                {
                                                  status = -1073741670;
                                                  Irp__IoStatus__Information = 0;
                                                  tmp___3 = AG_SetStatusAndReturn(status, Irp, deviceExtension__TargetDeviceObject);
                                                }
                                                return (tmp___3);
                                              }
                                              {
                                                srb__TimeOutValue = 10;
                                                srb__CdbLength = 10;
                                                status = SendSrbSynchronous(deviceExtension, srb, Toc, sizeof__CDROM_TOC);
                                              }
                                              if (status >= 0) {
                                                {
                                                  __cil_tmp107 = (unsigned long)status;
                                                  if (__cil_tmp107 != -1073741764) {
                                                    status = 0;
                                                  } else {
                                                    goto _L;
                                                  }
                                                }
                                              } else {
                                              _L : {
                                                __cil_tmp108 = (unsigned long)status;
                                                if (__cil_tmp108 != -1073741764) {
                                                  {
                                                    Irp__IoStatus__Information = 0;
                                                    tmp___4 = AG_SetStatusAndReturn(status, Irp, deviceExtension__TargetDeviceObject);
                                                  }
                                                  return (tmp___4);
                                                }
                                              }
                                              }
                                              __cil_tmp109 = cdaudioDataOut__LastTrack - cdaudioDataOut__FirstTrack;
                                              tracksOnCd = __cil_tmp109 + 1;
                                              tracksInBuffer = currentIrpStack__Parameters__DeviceIoControl__OutputBufferLength;
                                              if (tracksInBuffer < tracksOnCd) {
                                                tracksToReturn = tracksInBuffer;
                                              } else {
                                                tracksToReturn = tracksOnCd;
                                              }
                                              if (tracksInBuffer > tracksOnCd) {
                                                i++;
                                              }
                                              goto switch_3_break;
                                            switch_3_exp_2:
                                              userPtr = Irp__AssociatedIrp__SystemBuffer;
                                              if (currentIrpStack__Parameters__DeviceIoControl__OutputBufferLength < sizeof__SUB_Q_CURRENT_POSITION) {
                                                status = -1073741789;
                                                Irp__IoStatus__Information = 0;
                                                goto switch_3_break;
                                              }
                                              if (SubQPtr == 0) {
                                                {
                                                  status = -1073741670;
                                                  Irp__IoStatus__Information = 0;
                                                  tmp___5 = AG_SetStatusAndReturn(status, Irp, deviceExtension__TargetDeviceObject);
                                                }
                                                return (tmp___5);
                                              }
                                              if (userPtr__Format != 1) {
                                                {
                                                  status = -1073741823;
                                                  Irp__IoStatus__Information = 0;
                                                  tmp___6 = AG_SetStatusAndReturn(status, Irp, deviceExtension__TargetDeviceObject);
                                                }
                                                return (tmp___6);
                                              }
                                              {
                                                srb__CdbLength = 10;
                                                srb__TimeOutValue = 10;
                                                status = SendSrbSynchronous(deviceExtension, srb, SubQPtr, sizeof__SUB_Q_CURRENT_POSITION);
                                              }
                                              if (status >= 0) {
                                                Irp__IoStatus__Information = sizeof__SUB_Q_CURRENT_POSITION;
                                              } else {
                                                Irp__IoStatus__Information = 0;
                                              }
                                              goto switch_3_break;
                                            switch_3_exp_3:
                                              inputBuffer = Irp__AssociatedIrp__SystemBuffer;
                                              Irp__IoStatus__Information = 0;
                                              if (currentIrpStack__Parameters__DeviceIoControl__InputBufferLength < sizeof__CDROM_PLAY_AUDIO_MSF) {
                                                status = -1073741820;
                                                goto switch_3_break;
                                              }
                                              if (inputBuffer__StartingM == inputBuffer__EndingM) {
                                                if (inputBuffer__StartingS == inputBuffer__EndingS) {
                                                  if (inputBuffer__StartingF == inputBuffer__EndingF) {
                                                  }
                                                }
                                              }
                                              {
                                                srb__CdbLength = 10;
                                                srb__TimeOutValue = 10;
                                                status = SendSrbSynchronous(deviceExtension, srb, 0, 0);
                                              }
                                              if (status >= 0) {
                                                if (cdb__PLAY_AUDIO_MSF__OperationCode == 71) {
                                                }
                                              }
                                              goto switch_3_break;
                                            switch_3_exp_4:
                                              inputBuffer___0 = Irp__AssociatedIrp__SystemBuffer;
                                              Irp__IoStatus__Information = 0;
                                              if (currentIrpStack__Parameters__DeviceIoControl__InputBufferLength < sizeof__CDROM_SEEK_AUDIO_MSF) {
                                                status = -1073741820;
                                                goto switch_3_break;
                                              }
                                              {
                                                srb__CdbLength = 10;
                                                srb__TimeOutValue = 10;
                                                status = SendSrbSynchronous(deviceExtension, srb, 0, 0);
                                              }
                                              {
                                                if (status < 0) {
                                                }
                                              }
                                              goto switch_3_break;
                                            switch_3_exp_5 : {
                                              Irp__IoStatus__Information = 0;
                                              srb__CdbLength = 10;
                                              srb__TimeOutValue = 10;
                                              status = SendSrbSynchronous(deviceExtension, srb, 0, 0);
                                            }
                                              goto switch_3_break;
                                            switch_3_exp_6:;
                                            switch_3_exp_7:;
                                            switch_3_exp_8:
                                              Irp__IoStatus__Information = 0;
                                              status = -1073741808;
                                              goto switch_3_break;
                                            switch_3_exp_9 : { CdAudioIsPlayActive(DeviceObject); }
                                            switch_3_default : { tmp___7 = CdAudioSendToNextDriver(DeviceObject, Irp); }
                                              return (tmp___7);
                                              goto switch_3_break;
                                            } else {
                                            switch_3_break:;
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    { tmp___8 = AG_SetStatusAndReturn(status, Irp, deviceExtension__TargetDeviceObject); }
    return (tmp___8);
  }
}
```