user: 请将以下的汇编代码转换成C语言代码：

```asm
<expand>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  movsbl (%rdi),%edi
  test   %dil,%dil
  je     L155
  mov    %rsi,%r15
  mov    %r13,%r14
  xor    %ebx,%ebx
  xor    %ebp,%ebp
  xor    %r12d,%r12d
  jmp    L0
  nopl   0x0(%rax)
L22:
  add    $0x1,%ebp
  add    $0x1,%ebx
  movslq %ebp,%r12
  lea    0x0(%r13,%r12,1),%r14
  movsbl (%r14),%edi
  test   %dil,%dil
  je     L155
L0:
  movslq %ebx,%rax
  mov    %dil,(%r15,%rax,1)
  cmpb   $0x2d,0x1(%r13,%r12,1)
  jne    L22
  call   <isspace@plt>
  test   %eax,%eax
  jne    L22
  movsbl (%r14),%edi
  call   <isalpha@plt>
  movsbl (%r14),%edi
  test   %rax,%rax
  jne    L30
L189:
  call   <isalpha@plt>
  movsbl (%r14),%edi
  test   %rax,%rax
  jne    L136
L219:
  call   <isdigit@plt>
  test   %rax,%rax
  jne    L66
L37:
  add    $0x1,%ebp
  jmp    L22
  xchg   %ax,%ax
L155:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nop
L136:
  call   <isupper@plt>
  test   %rax,%rax
  jne    L51
  movsbl (%r14),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L37
  jmp    L66
  xchg   %ax,%ax
L30:
  call   <islower@plt>
  test   %rax,%rax
  jne    L151
  movsbl (%r14),%edi
  call   <isalpha@plt>
  movsbl (%r14),%edi
  test   %rax,%rax
  je     L219
  jmp    L136
  nopw   0x0(%rax,%rax,1)
L66:
  lea    0x2(%r13,%r12,1),%r8
  movsbl (%r14),%ecx
  movsbl (%r8),%edx
  mov    %ecx,%eax
  sub    %ecx,%edx
  cmp    $0x1,%edx
  jle    L37
  lea    0x1(%rbx),%edx
  mov    $0x1,%ecx
  movslq %edx,%rdx
  nopl   0x0(%rax)
L118:
  add    %ecx,%eax
  add    $0x1,%ecx
  mov    %edx,%ebx
  mov    %al,(%r15,%rdx,1)
  movsbl (%r14),%edi
  add    $0x1,%rdx
  movsbl (%r8),%esi
  mov    %edi,%eax
  sub    %edi,%esi
  cmp    %ecx,%esi
  jg     L118
  add    $0x1,%ebp
  jmp    L22
L51:
  lea    0x2(%r13,%r12,1),%r8
  movsbl (%r14),%edi
  movsbl (%r8),%edx
  mov    %edi,%eax
  sub    %edi,%edx
  cmp    $0x1,%edx
  jle    L219
  lea    0x1(%rbx),%edx
  mov    $0x1,%ecx
  movslq %edx,%rdx
  nopl   0x0(%rax)
L92:
  add    %ecx,%eax
  add    $0x1,%ecx
  mov    %edx,%ebx
  mov    %al,(%r15,%rdx,1)
  movsbl (%r14),%edi
  add    $0x1,%rdx
  movsbl (%r8),%esi
  mov    %edi,%eax
  sub    %edi,%esi
  cmp    %ecx,%esi
  jg     L92
  jmp    L219
L151:
  lea    0x2(%r13,%r12,1),%r8
  movsbl (%r14),%edi
  movsbl (%r8),%edx
  mov    %edi,%eax
  sub    %edi,%edx
  cmp    $0x1,%edx
  jle    L189
  lea    0x1(%rbx),%edx
  mov    $0x1,%ecx
  movslq %edx,%rdx
  nopl   0x0(%rax)
L206:
  add    %ecx,%eax
  add    $0x1,%ecx
  mov    %edx,%ebx
  mov    %al,(%r15,%rdx,1)
  movsbl (%r14),%edi
  add    $0x1,%rdx
  movsbl (%r8),%esi
  mov    %edi,%eax
  sub    %edi,%esi
  cmp    %ecx,%esi
  jg     L206
  jmp    L189
```

assistant: ```c
void expand(char s1[], char s2[]) {
  int i, j, k;
  for (i = 0, j = 0; s1[i] != '\0'; j++, i++) {
    s2[j] = s1[i];
    if (s1[i + 1] == '-' && !isspace(s1[i])) {
      if (isalpha(s1[i]) && islower(s1[i]))
        for (k = 1; k < s1[i + 2] - s1[i]; k++)
          s2[++j] = s1[i] + k;
      if (isalpha(s1[i]) && isupper(s1[i]))
        for (k = 1; k < s1[i + 2] - s1[i]; k++)
          s2[++j] = s1[i] + k;
      if (isdigit(s1[i]))
        for (k = 1; k < s1[i + 2] - s1[i]; k++)
          s2[++j] = s1[i] + k;
      i++;
    }
  }
}
```