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

```asm
<norm>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x850,%rsp
  mov    %rdi,-0x838(%rbp)
  mov    %esi,-0x83c(%rbp)
  mov    %rdx,-0x848(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x848(%rbp),%rax
  mov    %rax,-0x820(%rbp)
  mov    -0x838(%rbp),%rax
  mov    %rax,-0x818(%rbp)
  movl   $0x0,-0x82c(%rbp)
  movl   $0x0,-0x828(%rbp)
  mov    -0x848(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    %eax,-0x83c(%rbp)
  setge  %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  nop
  jmp    L301
L417:
  mov    -0x820(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x82d(%rbp)
  movsbl -0x82d(%rbp),%eax
  cmp    $0x2e,%eax
  je     L22
  cmp    $0x2f,%eax
  jne    L5
  movl   $0x0,-0x824(%rbp)
  jmp    L287
L22:
  movl   $0x1,-0x824(%rbp)
  jmp    L287
L5:
  movl   $0x2,-0x824(%rbp)
L287:
  cmpl   $0x4,-0x828(%rbp)
  ja     L301
  mov    -0x828(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D13(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D13(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  cmpl   $0x0,-0x824(%rbp)
  je     L165
  mov    -0x824(%rbp),%eax
  sub    $0x1,%eax
  cmp    $0x1,%eax
  ja     L301
  jmp    L141
L165:
  mov    -0x820(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x820(%rbp)
  mov    -0x818(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x818(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  movl   $0x1,-0x828(%rbp)
  jmp    L200
L141:
  mov    -0x838(%rbp),%rax
  movb   $0x0,(%rax)
  mov    $0xffffffff,%eax
  jmp    L48
L200:
  jmp    L301
  cmpl   $0x2,-0x824(%rbp)
  je     L204
  cmpl   $0x2,-0x824(%rbp)
  ja     L301
  cmpl   $0x0,-0x824(%rbp)
  je     L378
  cmpl   $0x1,-0x824(%rbp)
  je     L242
  jmp    L301
L378:
  addq   $0x1,-0x820(%rbp)
  jmp    L348
L242:
  mov    -0x82c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x82c(%rbp)
  cltq
  mov    -0x818(%rbp),%rdx
  mov    %rdx,-0x810(%rbp,%rax,8)
  mov    -0x820(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x820(%rbp)
  mov    -0x818(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x818(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  movl   $0x2,-0x828(%rbp)
  jmp    L348
L204:
  mov    -0x82c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x82c(%rbp)
  cltq
  mov    -0x818(%rbp),%rdx
  mov    %rdx,-0x810(%rbp,%rax,8)
  mov    -0x820(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x820(%rbp)
  mov    -0x818(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x818(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  movl   $0x4,-0x828(%rbp)
  nop
L348:
  jmp    L301
  cmpl   $0x2,-0x824(%rbp)
  je     L229
  cmpl   $0x2,-0x824(%rbp)
  ja     L301
  cmpl   $0x0,-0x824(%rbp)
  je     L228
  cmpl   $0x1,-0x824(%rbp)
  je     L382
  jmp    L301
L228:
  cmpl   $0x0,-0x82c(%rbp)
  jne    L102
  mov    -0x838(%rbp),%rax
  movb   $0x0,(%rax)
  mov    $0xffffffff,%eax
  jmp    L48
L102:
  subl   $0x1,-0x82c(%rbp)
  mov    -0x82c(%rbp),%eax
  cltq
  mov    -0x810(%rbp,%rax,8),%rax
  mov    %rax,-0x818(%rbp)
  movl   $0x1,-0x828(%rbp)
  jmp    L104
L382:
  mov    -0x820(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x820(%rbp)
  mov    -0x818(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x818(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  movl   $0x3,-0x828(%rbp)
  jmp    L104
L229:
  mov    -0x820(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x820(%rbp)
  mov    -0x818(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x818(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  movl   $0x4,-0x828(%rbp)
  nop
L104:
  jmp    L301
  cmpl   $0x0,-0x824(%rbp)
  je     L157
  mov    -0x824(%rbp),%eax
  sub    $0x1,%eax
  cmp    $0x1,%eax
  ja     L301
  jmp    L290
L157:
  cmpl   $0x0,-0x82c(%rbp)
  jne    L321
  mov    -0x838(%rbp),%rax
  movb   $0x0,(%rax)
  mov    $0xffffffff,%eax
  jmp    L48
L321:
  subl   $0x1,-0x82c(%rbp)
  mov    -0x82c(%rbp),%eax
  cltq
  mov    -0x810(%rbp,%rax,8),%rax
  mov    %rax,-0x818(%rbp)
  cmpl   $0x0,-0x82c(%rbp)
  jne    L174
  mov    -0x838(%rbp),%rax
  movb   $0x0,(%rax)
  mov    $0xffffffff,%eax
  jmp    L48
L174:
  subl   $0x1,-0x82c(%rbp)
  mov    -0x82c(%rbp),%eax
  cltq
  mov    -0x810(%rbp,%rax,8),%rax
  mov    %rax,-0x818(%rbp)
  movl   $0x1,-0x828(%rbp)
  jmp    L216
L290:
  mov    -0x820(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x820(%rbp)
  mov    -0x818(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x818(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  movl   $0x4,-0x828(%rbp)
  nop
L216:
  jmp    L301
  cmpl   $0x0,-0x824(%rbp)
  je     L329
  mov    -0x824(%rbp),%eax
  sub    $0x1,%eax
  cmp    $0x1,%eax
  ja     L137
  jmp    L243
L329:
  mov    -0x820(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x820(%rbp)
  mov    -0x818(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x818(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  movl   $0x1,-0x828(%rbp)
  jmp    L137
L243:
  mov    -0x820(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x820(%rbp)
  mov    -0x818(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x818(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  nop
L137:
  nop
L301:
  mov    -0x820(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L417
  mov    -0x818(%rbp),%rax
  movb   $0x0,(%rax)
  mov    $0x0,%eax
L48:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L201
  call   <__stack_chk_fail@plt>
L201:
  leave
  ret
```

assistant: ```c
int norm(char *dest, int len, const char *src) {
  const char *s = src;
  char *d = dest;
  char *stk[256];
  int top = 0;
  enum { L0, L1, L2, L3, L4 } state = L0;
  assert(strlen(src) <= len);
  while (*s) {
    char c = *s;
    enum { slash, dot, other } cls;
    switch (c) {
    case '/': {
      cls = slash;
      break;
    }
    case '.': {
      cls = dot;
      break;
    }
    default: {
      cls = other;
    }
    }
    switch (state) {
    case L0: {
      switch (cls) {
      case slash: {
        do {
          *d++ = *s++;
        } while (0);
        state = L1;
        break;
      }
      case dot:
      case other: {
        dest[0] = '\0';
        return -1;
      }
      }
      break;
    }
    case L1: {
      switch (cls) {
      case slash: {
        do {
          s++;
        } while (0);
        break;
      }
      case dot: {
        do {
          do {
            stk[top++] = d;
          } while (0);
        } while (0);
        do {
          *d++ = *s++;
        } while (0);
        state = L2;
        break;
      }
      case other: {
        do {
          do {
            stk[top++] = d;
          } while (0);
        } while (0);
        do {
          *d++ = *s++;
        } while (0);
        state = L4;
        break;
      }
      }
      break;
    }
    case L2: {
      switch (cls) {
      case slash: {
        do {
          do {
            if (top == 0) {
              dest[0] = '\0';
              return -1;
            }
            d = stk[--top];
          } while (0);
        } while (0);
        state = L1;
        break;
      }
      case dot: {
        do {
          *d++ = *s++;
        } while (0);
        state = L3;
        break;
      }
      case other: {
        do {
          *d++ = *s++;
        } while (0);
        state = L4;
        break;
      }
      }
      break;
    }
    case L3: {
      switch (cls) {
      case slash: {
        do {
          do {
            if (top == 0) {
              dest[0] = '\0';
              return -1;
            }
            d = stk[--top];
          } while (0);
          do {
            if (top == 0) {
              dest[0] = '\0';
              return -1;
            }
            d = stk[--top];
          } while (0);
        } while (0);
        state = L1;
        break;
      }
      case dot:
      case other: {
        do {
          *d++ = *s++;
        } while (0);
        state = L4;
        break;
      }
      }
      break;
    }
    case L4: {
      switch (cls) {
      case slash: {
        do {
          *d++ = *s++;
        } while (0);
        state = L1;
        break;
      }
      case dot:
      case other: {
        do {
          *d++ = *s++;
        } while (0);
        break;
      }
      }
      break;
    }
    }
  }
  *d = '\0';
  return 0;
}
```