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

```asm
<EEPROMProgram>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbp
  mov    %esi,%r12d
L140:
  mov    0x400af018,%eax
  test   $0x1,%al
  jne    L140
  mov    %r12d,%eax
  sar    $0x6,%eax
  mov    %eax,0x400af004
  mov    %r12d,%eax
  sar    $0x2,%eax
  and    $0xf,%eax
  mov    %eax,0x400af008
  lea    0x3(%rdx),%eax
  test   %edx,%edx
  cmovns %edx,%eax
  sar    $0x2,%eax
  je     L97
  lea    -0x1(%rax),%eax
  lea    0x0(%rbp,%rax,4),%r13
  jmp    L24
L32:
  mov    0x400fe000,%eax
  test   %ax,%ax
  jne    L156
  mov    %r12d,%edi
  call   <_EEPROMSectorMaskSet@plt>
  jmp    L156
L99:
  mov    0x400fe000,%eax
  and    $0x70ff0000,%eax
  cmp    $0x10050000,%eax
  jne    L144
  mov    0x400fe000,%eax
  test   %ax,%ax
  jne    L144
  call   <_EEPROMSectorMaskClear@plt>
  jmp    L144
L97:
  mov    0x400fe000,%eax
  and    $0x70ff0000,%eax
  cmp    $0x10050000,%eax
  je     L36
L35:
  mov    0x400af018,%ebx
L144:
  mov    %ebx,%eax
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L36:
  mov    0x400fe000,%eax
  test   %ax,%ax
  jne    L35
  call   <_EEPROMSectorMaskClear@plt>
  jmp    L35
L117:
  add    $0x4,%rbp
L24:
  mov    0x400fe000,%eax
  and    $0x70ff0000,%eax
  cmp    $0x10050000,%eax
  je     L32
L156:
  mov    0x0(%rbp),%eax
  mov    %eax,0x400af014
  mov    $0xa,%edi
  call   <SysCtlDelay@plt>
L67:
  mov    0x400af018,%ebx
  test   $0x1,%bl
  jne    L67
  test   $0x10,%bl
  jne    L99
  cmp    %rbp,%r13
  je     L97
  mov    0x400af008,%eax
  test   %eax,%eax
  jne    L117
  mov    0x400af004,%eax
  add    $0x1,%eax
  mov    %eax,0x400af004
  jmp    L117
```

assistant: ```c
uint32_t EEPROMProgram(uint32_t *pui32Data, uint32_t ui32Address, uint32_t ui32Count) {
  uint32_t ui32Status;
  ;
  ;

  ;
  ;
  ;
  do {
    ui32Status = (*((volatile uint32_t *)(0x400AF018)));
  } while (ui32Status & 0x00000001);
  (*((volatile uint32_t *)(0x400AF004))) = ((ui32Address) >> 6);
  (*((volatile uint32_t *)(0x400AF008))) = (((ui32Address) >> 2) & 0x0F);
  ui32Count /= 4;
  while (ui32Count) {
    if ((((*((volatile uint32_t *)(0x400FE000))) & (0x70000000 | 0x00FF0000)) == (0x10000000 | 0x00050000)) && (((*((volatile uint32_t *)(0x400FE000))) & (0x0000FF00 | 0x000000FF)) == (0x00000000 | 0x00000000))) {
      _EEPROMSectorMaskSet(ui32Address);
    }
    (*((volatile uint32_t *)(0x400AF014))) = *pui32Data;
    SysCtlDelay(10);
    do {
      ui32Status = (*((volatile uint32_t *)(0x400AF018)));
    } while (ui32Status & 0x00000001);
    if (ui32Status & 0x00000010) {
      if ((((*((volatile uint32_t *)(0x400FE000))) & (0x70000000 | 0x00FF0000)) == (0x10000000 | 0x00050000)) && (((*((volatile uint32_t *)(0x400FE000))) & (0x0000FF00 | 0x000000FF)) == (0x00000000 | 0x00000000))) {
        _EEPROMSectorMaskClear();
      }
      return (ui32Status);
    }
    pui32Data++;
    ui32Count--;
    if (ui32Count && ((*((volatile uint32_t *)(0x400AF008))) == 0)) {
      (*((volatile uint32_t *)(0x400AF004))) += 1;
    }
  }
  if ((((*((volatile uint32_t *)(0x400FE000))) & (0x70000000 | 0x00FF0000)) == (0x10000000 | 0x00050000)) && (((*((volatile uint32_t *)(0x400FE000))) & (0x0000FF00 | 0x000000FF)) == (0x00000000 | 0x00000000))) {
    _EEPROMSectorMaskClear();
  }
  return ((*((volatile uint32_t *)(0x400AF018))));
}
```