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

```asm
<eb_send_data_get_ack>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %rdi,-0x98(%rbp)
  mov    %rsi,-0xa0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x7c(%rbp)
  movl   $0x63,-0x78(%rbp)
L56:
  lea    -0x70(%rbp),%rax
  mov    $0x64,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  movl   $0x64,-0x84(%rbp)
  lea    -0x84(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <eb_serial_recv@plt>
  mov    %eax,-0x74(%rbp)
  cmpl   $0x0,-0x74(%rbp)
  jns    L36
  mov    $0xffffffff,%eax
  jmp    L147
L36:
  mov    -0x84(%rbp),%eax
  test   %eax,%eax
  jle    L4
  movl   $0x0,-0x80(%rbp)
  jmp    L154
L146:
  mov    -0x80(%rbp),%eax
  cltq
  movzbl -0x70(%rbp,%rax,1),%edx
  mov    -0x7c(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x98(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L6
  mov    -0xa0(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x7c(%rbp)
  jge    L6
  mov    $0xfffffffe,%eax
  jmp    L147
L6:
  mov    -0xa0(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x7c(%rbp)
  jl     L149
  mov    -0x80(%rbp),%eax
  cltq
  movzbl -0x70(%rbp,%rax,1),%eax
  test   %al,%al
  jne    L143
  movl   $0x0,-0x78(%rbp)
  jmp    L188
L143:
  mov    -0x80(%rbp),%eax
  cltq
  movzbl -0x70(%rbp,%rax,1),%eax
  cmp    $0xff,%al
  jne    L69
  movl   $0x0,-0x78(%rbp)
  jmp    L188
L69:
  mov    -0x80(%rbp),%eax
  cltq
  movzbl -0x70(%rbp,%rax,1),%eax
  cmp    $0xaa,%al
  jne    L73
  movl   $0xfffffffd,-0x78(%rbp)
  jmp    L188
L73:
  movl   $0xfffffffc,-0x78(%rbp)
L188:
  addl   $0x1,-0x80(%rbp)
  jmp    L4
L149:
  addl   $0x1,-0x80(%rbp)
  addl   $0x1,-0x7c(%rbp)
L154:
  mov    -0x84(%rbp),%eax
  cmp    %eax,-0x80(%rbp)
  jl     L146
L4:
  cmpl   $0x63,-0x78(%rbp)
  je     L56
  mov    -0x84(%rbp),%eax
  sub    -0x80(%rbp),%eax
  mov    %eax,%edx
  mov    -0xa0(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x98(%rbp),%rax
  mov    $0x8,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  movl   $0x0,-0x7c(%rbp)
  jmp    L138
L18:
  mov    -0x7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x98(%rbp),%rax
  add    %rax,%rdx
  mov    -0x80(%rbp),%eax
  cltq
  movzbl -0x70(%rbp,%rax,1),%eax
  mov    %al,(%rdx)
  addl   $0x1,-0x80(%rbp)
  addl   $0x1,-0x7c(%rbp)
L138:
  mov    -0x84(%rbp),%eax
  cmp    %eax,-0x80(%rbp)
  jl     L18
  mov    -0x78(%rbp),%eax
L147:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L172
  call   <__stack_chk_fail@plt>
L172:
  leave
  ret
```

assistant: ```c
int eb_send_data_get_ack(unsigned char *buf, int *buflen) {
  unsigned char tmp[100];
  int tmplen, ret, i, j, found;
  j = 0;
  found = 99;
  do {
    memset(tmp, '\0', sizeof(tmp));
    tmplen = sizeof(tmp);
    ret = eb_serial_recv(tmp, &tmplen);
    if (ret < 0)
      return -1;
    if (tmplen > 0) {
      i = 0;
      while (i < tmplen) {
        if (tmp[i] != buf[j] && j < *buflen)
          return -2;
        if (j > (*buflen - 1)) {
          if (tmp[i] == 0x00)
            found = 0;
          else if (tmp[i] == 0xFF)
            found = 0;
          else if (tmp[i] == 0xAA)
            found = -3;
          else
            found = -4;
          i++;
          break;
        }
        i++;
        j++;
      }
    }
  } while (found == 99);
  *buflen = tmplen - i;
  memset(buf, '\0', sizeof(buf));
  for (j = 0; i < tmplen; i++, j++)
    buf[j] = tmp[i];
  return found;
}
```