user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<Serial_Openport>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %edx,%ebp
  push   %rbx
  mov    %ecx,%ebx
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  cmp    $0x12c0,%esi
  je     L177
  jg     L315
  cmp    $0xc8,%esi
  je     L441
  jle    L51
  cmp    $0x4b0,%esi
  je     L506
  jle    L463
  cmp    $0x708,%esi
  je     L225
  cmp    $0x960,%esi
  jne    L77
  mov    D234(%rip),%rax
  mov    (%rax),%r12d
  nopl   0x0(%rax)
L100:
  mov    D263(%rip),%rax
  mov    (%rax),%esi
  mov    D51(%rip),%rax
  or     (%rax),%esi
  call   <open@plt>
  mov    %eax,%r13d
  test   %eax,%eax
  js     L404
  mov    D265(%rip),%rax
  xor    %edx,%edx
  mov    %r13d,%edi
  mov    %rsp,%r14
  mov    (%rax),%esi
  call   <fcntl@plt>
  xor    %esi,%esi
  mov    $0x28,%edx
  mov    %r14,%rdi
  call   <memset@plt>
  mov    D164(%rip),%rdx
  mov    D2(%rip),%rax
  mov    %r13d,%edi
  movq   $0x0,0x18(%rsp)
  movq   $0x0,0x10(%rsp)
  mov    (%rax),%eax
  or     (%rdx),%eax
  mov    D245(%rip),%rdx
  or     (%rdx),%eax
  mov    D324(%rip),%rdx
  or     %r12d,%eax
  mov    %eax,(%rsp)
  mov    D314(%rip),%rax
  mov    (%rdx),%rdx
  mov    (%rax),%eax
  mov    %eax,0x20(%rsp)
  mov    0x8(%rsp),%rax
  mov    %ebp,(%rax,%rdx,4)
  mov    D273(%rip),%rdx
  mov    (%rdx),%rdx
  mov    %ebx,(%rax,%rdx,4)
  mov    D42(%rip),%rax
  mov    %r14,%rdx
  mov    (%rax),%esi
  call   <tcsetattr@plt>
  cmp    $0xffffffff,%eax
  je     L68
L518:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L327
  add    $0x30,%rsp
  mov    %r13d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L463:
  cmp    $0x12c,%esi
  je     L543
  cmp    $0x258,%esi
  jne    L77
  mov    D277(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  xchg   %ax,%ax
L51:
  cmp    $0x6e,%esi
  je     L342
  jle    L545
  cmp    $0x86,%esi
  je     L454
  cmp    $0x96,%esi
  jne    L77
  mov    D177(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nopw   0x0(%rax,%rax,1)
L315:
  cmp    $0x70800,%esi
  je     L107
  jle    L278
  cmp    $0xe1000,%esi
  je     L465
  jle    L18
  cmp    $0xf4240,%esi
  jne    L77
  mov    D303(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L545:
  cmp    $0x32,%esi
  je     L239
  cmp    $0x4b,%esi
  jne    L77
  mov    D40(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nopl   0x0(%rax)
L18:
  cmp    $0x7a120,%esi
  je     L390
  cmp    $0x8ca00,%esi
  jne    L77
  mov    D198(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nopl   0x0(%rax,%rax,1)
L278:
  cmp    $0x9600,%esi
  je     L143
  jle    L93
  cmp    $0xe100,%esi
  je     L86
  cmp    $0x38400,%esi
  jne    L77
  mov    D94(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nopl   0x0(%rax)
L93:
  cmp    $0x2580,%esi
  je     L397
  cmp    $0x4b00,%esi
  jne    L77
  mov    D238(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nopl   0x0(%rax,%rax,1)
L77:
  mov    D153(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L543:
  mov    D184(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L225:
  mov    D13(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L506:
  mov    D84(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L441:
  mov    D88(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L177:
  mov    D278(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L397:
  mov    D7(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L86:
  mov    D35(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L143:
  mov    D283(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L390:
  mov    D156(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L239:
  mov    D196(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L465:
  mov    D21(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L107:
  mov    D313(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L454:
  mov    D315(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L342:
  mov    D295(%rip),%rax
  mov    (%rax),%r12d
  jmp    L100
  nop
L404:
  mov    $0xffffffff,%r13d
  jmp    L518
L68:
  mov    %r13d,%edi
  mov    $0xffffffff,%r13d
  call   <close@plt>
  jmp    L518
L327:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int Serial_Openport(const char *port, int baudrate, int rec_chars, int block_time) {
  struct termios options;
  int baudr;
  int port_id;
  switch (baudrate) {
  case 50:
    baudr = B50;
    break;
  case 75:
    baudr = B75;
    break;
  case 110:
    baudr = B110;
    break;
  case 134:
    baudr = B134;
    break;
  case 150:
    baudr = B150;
    break;
  case 200:
    baudr = B200;
    break;
  case 300:
    baudr = B300;
    break;
  case 600:
    baudr = B600;
    break;
  case 1200:
    baudr = B1200;
    break;
  case 1800:
    baudr = B1800;
    break;
  case 2400:
    baudr = B2400;
    break;
  case 4800:
    baudr = B4800;
    break;
  case 9600:
    baudr = B9600;
    break;
  case 19200:
    baudr = B19200;
    break;
  case 38400:
    baudr = B38400;
    break;
  case 57600:
    baudr = B57600;
    break;
  case 115200:
    baudr = B115200;
    break;
  case 230400:
    baudr = B230400;
    break;
  case 460800:
    baudr = B460800;
    break;
  case 500000:
    baudr = B500000;
    break;
  case 576000:
    baudr = B576000;
    break;
  case 921600:
    baudr = B921600;
    break;
  case 1000000:
    baudr = B1000000;
    break;
  default:
    baudr = B115200;
    break;
  }
  port_id = open(port, O_RDWR | O_NOCTTY);
  if (port_id < 0)
    return (-1);
  fcntl(port_id, F_SETFL, 0);
  memset(&options, 0, sizeof(options));
  options.c_cflag = baudr | CS8 | CLOCAL | CREAD;
  options.c_iflag = IGNPAR;
  options.c_oflag = 0;
  options.c_lflag = 0;
  options.c_cc[VMIN] = rec_chars;
  options.c_cc[VTIME] = block_time;
  if (tcsetattr(port_id, TCSANOW, &options) == -1) {
    close(port_id);
    return (-1);
  }
  return port_id;
}
```