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

```asm
<jsV_fmtexp>:
  endbr64
  sub    $0x28,%rsp
  mov    %rdi,%rdx
  mov    %esi,%eax
  mov    %fs:0x28,%rcx
  mov    %rcx,0x18(%rsp)
  xor    %ecx,%ecx
  movb   $0x65,(%rdi)
  test   %esi,%esi
  js     L86
  movb   $0x2b,0x1(%rdi)
  je     L47
L74:
  mov    %eax,%ecx
  mov    $0xcccccccd,%edi
  imul   %rdi,%rcx
  shr    $0x23,%rcx
  lea    (%rcx,%rcx,4),%esi
  add    %esi,%esi
  sub    %esi,%eax
  lea    0x30(%rax),%r8d
  mov    %ecx,%eax
  mov    %r8b,0xf(%rsp)
  test   %ecx,%ecx
  je     L9
  mov    %ecx,%ecx
  imul   %rdi,%rcx
  shr    $0x23,%rcx
  lea    (%rcx,%rcx,4),%esi
  add    %esi,%esi
  sub    %esi,%eax
  add    $0x30,%eax
  mov    %al,0x10(%rsp)
  test   %ecx,%ecx
  je     L154
  mov    %ecx,%esi
  imul   %rdi,%rsi
  shr    $0x23,%rsi
  lea    (%rsi,%rsi,4),%eax
  add    %eax,%eax
  sub    %eax,%ecx
  add    $0x30,%ecx
  mov    %cl,0x11(%rsp)
  test   %esi,%esi
  je     L32
  mov    %esi,%ecx
  imul   %rdi,%rcx
  shr    $0x23,%rcx
  lea    (%rcx,%rcx,4),%eax
  add    %eax,%eax
  sub    %eax,%esi
  add    $0x30,%esi
  mov    %sil,0x12(%rsp)
  test   %ecx,%ecx
  je     L76
  mov    %ecx,%eax
  imul   %rdi,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%esi
  add    %esi,%esi
  sub    %esi,%ecx
  add    $0x30,%ecx
  mov    %cl,0x13(%rsp)
  test   %eax,%eax
  je     L130
  mov    %eax,%ecx
  imul   %rdi,%rcx
  shr    $0x23,%rcx
  lea    (%rcx,%rcx,4),%esi
  add    %esi,%esi
  sub    %esi,%eax
  add    $0x30,%eax
  mov    %al,0x14(%rsp)
  test   %ecx,%ecx
  je     L196
  mov    %ecx,%eax
  imul   %rdi,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%esi
  add    %esi,%esi
  sub    %esi,%ecx
  add    $0x30,%ecx
  mov    %cl,0x15(%rsp)
  test   %eax,%eax
  je     L161
  mov    %eax,%ecx
  imul   %rdi,%rcx
  shr    $0x23,%rcx
  lea    (%rcx,%rcx,4),%esi
  add    %esi,%esi
  sub    %esi,%eax
  add    $0x30,%eax
  mov    %al,0x16(%rsp)
  test   %ecx,%ecx
  je     L4
  mov    %ecx,%eax
  imul   %rdi,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%ecx
  add    $0x30,%ecx
  mov    %cl,0x17(%rsp)
  mov    $0x9,%ecx
L216:
  lea    -0x1(%rcx),%eax
  mov    %r8b,0xf(%rsp)
  movslq %eax,%rsi
  movzbl 0xf(%rsp,%rsi,1),%esi
  mov    %sil,0x2(%rdx)
  lea    -0x2(%rcx),%esi
  movslq %esi,%rsi
  movzbl 0xf(%rsp,%rsi,1),%esi
  mov    %sil,0x3(%rdx)
  lea    -0x3(%rcx),%esi
  movslq %esi,%rdi
  movzbl 0xf(%rsp,%rdi,1),%edi
  mov    %dil,0x4(%rdx)
  test   %esi,%esi
  je     L114
  lea    -0x4(%rcx),%esi
  movslq %esi,%rdi
  movzbl 0xf(%rsp,%rdi,1),%edi
  mov    %dil,0x5(%rdx)
  test   %esi,%esi
  je     L114
  lea    -0x5(%rcx),%esi
  movslq %esi,%rdi
  movzbl 0xf(%rsp,%rdi,1),%edi
  mov    %dil,0x6(%rdx)
  test   %esi,%esi
  je     L114
  lea    -0x6(%rcx),%esi
  movslq %esi,%rdi
  movzbl 0xf(%rsp,%rdi,1),%edi
  mov    %dil,0x7(%rdx)
  test   %esi,%esi
  je     L114
  lea    -0x7(%rcx),%esi
  movslq %esi,%rdi
  movzbl 0xf(%rsp,%rdi,1),%edi
  mov    %dil,0x8(%rdx)
  test   %esi,%esi
  je     L114
  sub    $0x8,%ecx
  movslq %ecx,%rsi
  movzbl 0xf(%rsp,%rsi,1),%esi
  mov    %sil,0x9(%rdx)
  je     L114
  mov    %r8b,0xa(%rdx)
L114:
  add    $0x1,%eax
  cltq
  movb   $0x0,0x2(%rdx,%rax,1)
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L54
  add    $0x28,%rsp
  ret
  nop
L86:
  movb   $0x2d,0x1(%rdi)
  neg    %eax
  jmp    L74
  nopl   0x0(%rax,%rax,1)
L47:
  movb   $0x30,0x2(%rdi)
  jmp    L114
L130:
  mov    $0x5,%ecx
  jmp    L216
L9:
  mov    %r8b,0x2(%rdx)
  jmp    L114
L154:
  movzwl 0xf(%rsp),%eax
  rol    $0x8,%ax
  mov    %ax,0x2(%rdx)
  mov    $0x1,%eax
  jmp    L114
L32:
  mov    $0x3,%ecx
  jmp    L216
L76:
  mov    $0x4,%ecx
  jmp    L216
L196:
  mov    $0x6,%ecx
  jmp    L216
L161:
  mov    $0x7,%ecx
  jmp    L216
L4:
  mov    $0x8,%ecx
  jmp    L216
L54:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void jsV_fmtexp(char *p, int e) {
  char se[9];
  int i;
  *p++ = 'e';
  if (e < 0) {
    *p++ = '-';
    e = -e;
  } else
    *p++ = '+';
  i = 0;
  while (e) {
    se[i++] = e % 10 + '0';
    e /= 10;
  }
  while (i < 1)
    se[i++] = '0';
  while (i > 0)
    *p++ = se[--i];
  *p++ = '\0';
}
```