user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<Spsum>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdi,%rbp
  mov    %rsi,%rbx
  mov    %edx,%r13d
  mov    %rsi,%rdi
  call   <Digits@plt>
  mov    %eax,%r12d
  lea    -0x1(%rax),%r14d
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %eax,%r15d
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %eax,%ecx
  mov    %rbx,%rax
  or     %rbp,%rax
  je     L167
  cmp    $0x1,%r13d
  je     L286
  movslq %r15d,%r15
  mov    %rbp,%rax
  cqto
  idiv   %r15
  mov    %rax,(%rsp)
  movslq %ecx,%rcx
  mov    %rbx,%rax
  cqto
  idiv   %rcx
  mov    %rax,%r15
  test   $0x1,%r13b
  jne    L61
  cmp    $0x1,%r12d
  je     L105
  mov    %r13d,%eax
  sub    %r12d,%eax
  test   $0x1,%al
  jne    L113
  test   %rbp,%rbp
  je     L66
  mov    (%rsp),%rsi
  cmp    %r15d,%esi
  je     L23
  lea    -0x1(%r15),%eax
  imul   %r15d,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  sar    %edx
  lea    -0x1(%rsi),%ecx
  imul   (%rsp),%ecx
  mov    %ecx,%eax
  shr    $0x1f,%eax
  add    %ecx,%eax
  sar    %eax
  sub    %eax,%edx
  mov    %edx,%ebp
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %eax,0xc(%rsp)
  lea    -0x2(%r12),%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %eax,%ecx
  mov    %r14d,%edx
  shr    $0x1f,%edx
  lea    (%r14,%rdx,1),%eax
  and    $0x1,%eax
  sub    %edx,%eax
  imul   %ecx,%eax
  mov    %r15d,%edx
  sub    (%rsp),%edx
  imul   %edx,%eax
  imul   $0x2d,%eax,%r12d
  movslq %r12d,%r12
  imul   0xc(%rsp),%ebp
  movslq %ebp,%rbp
  sub    %rbp,%r12
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  imul   %r15d,%eax
  movslq %eax,%rdi
  mov    %r13d,%edx
  mov    %rbx,%rsi
  call   <Spsum>
  add    %r12,%rax
  jmp    L167
L286:
  test   %rbx,%rbx
  jle    L126
  add    $0x1,%ebx
  mov    $0x1,%edi
  mov    $0x1,%edx
  mov    $0x0,%eax
L107:
  mov    %edx,%ecx
  imul   %edi,%ecx
  movslq %ecx,%rcx
  add    %rcx,%rax
  neg    %edi
  add    $0x1,%edx
  cmp    %ebx,%edx
  jne    L107
L167:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L105:
  lea    0x1(%rbx),%rdx
  imul   %rbx,%rdx
  mov    %rdx,%rax
  shr    $0x3f,%rax
  add    %rdx,%rax
  sar    %rax
  jmp    L167
L66:
  lea    -0x2(%r12),%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %eax,%ebp
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %eax,%ecx
  imul   %r15d,%ebp
  imul   $0x2d,%ebp,%ebp
  movslq %ebp,%rbp
  lea    -0x1(%r15),%edx
  imul   %r15d,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  imul   %ecx,%eax
  cltq
  sub    %rax,%rbp
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  imul   %r15d,%eax
  movslq %eax,%rdi
  mov    %r13d,%edx
  mov    %rbx,%rsi
  call   <Spsum>
  add    %rbp,%rax
  jmp    L167
L23:
  mov    %rbx,%rax
  sub    %rbp,%rax
  lea    0x1(%rax),%rbp
  movslq %r15d,%rax
  imul   %rax,%rbp
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  imul   %r15d,%eax
  cltq
  sub    %rax,%rbx
  mov    %rbx,%rsi
  mov    %r13d,%edx
  mov    $0x0,%edi
  call   <Spsum>
  sub    %rbp,%rax
  jmp    L167
L113:
  test   %rbp,%rbp
  je     L48
  cmp    %r15d,(%rsp)
  jne    L48
  mov    %rbx,%rax
  sub    %rbp,%rax
  add    $0x1,%rax
  movslq (%rsp),%rdx
  imul   %rdx,%rax
  mov    %rax,%rbp
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  imul   %r15d,%eax
  cltq
  sub    %rax,%rbx
  mov    %rbx,%rsi
  mov    %r13d,%edx
  mov    $0x0,%edi
  call   <Spsum>
  add    %rbp,%rax
  jmp    L167
L48:
  lea    -0x1(%r15),%eax
  imul   %r15d,%eax
  mov    %eax,%ebp
  shr    $0x1f,%ebp
  add    %eax,%ebp
  sar    %ebp
  mov    (%rsp),%rsi
  mov    %esi,%eax
  sub    $0x1,%eax
  imul   %esi,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  sar    %edx
  sub    %edx,%ebp
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %eax,%r12d
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  imul   %r15d,%eax
  movslq %eax,%rdi
  mov    %r13d,%edx
  mov    %rbx,%rsi
  call   <Spsum>
  mov    %rax,%rdx
  imul   %r12d,%ebp
  movslq %ebp,%rax
  add    %rdx,%rax
  jmp    L167
L61:
  cmp    $0x1,%r12d
  je     L286
  movabs $0x6666666666666667,%rdx
  mov    %rbx,%rax
  imul   %rdx
  sar    $0x2,%rdx
  mov    %rbx,%rax
  sar    $0x3f,%rax
  sub    %rax,%rdx
  lea    (%rdx,%rdx,4),%rdx
  add    %rdx,%rdx
  mov    %rbx,%rax
  sub    %rdx,%rax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  and    $0x1,%eax
  sub    %edx,%eax
  cmp    $0x1,%eax
  je     L151
  mov    %r13d,%eax
  sub    %r12d,%eax
  and    $0x1,%eax
  cmp    $0x1,%eax
  sbb    %eax,%eax
  or     $0x1,%eax
  mov    %eax,0xc(%rsp)
  test   %rbp,%rbp
  je     L248
  cmp    %r15d,(%rsp)
  je     L32
  lea    -0x2(%r12),%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %eax,%ebp
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  imul   %r15d,%eax
  movslq %eax,%rdi
  mov    %r13d,%edx
  mov    %rbx,%rsi
  call   <Spsum>
  mov    %rax,%rdx
  sub    (%rsp),%r15d
  imul   %ebp,%r15d
  lea    (%r15,%r15,4),%eax
  cltq
  add    %rdx,%rax
  jmp    L167
L151:
  test   %rbp,%rbp
  je     L199
  cmp    %r15d,(%rsp)
  je     L186
  lea    -0x2(%r12),%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %eax,%ebp
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  imul   %r15d,%eax
  movslq %eax,%rdi
  mov    %r13d,%edx
  mov    %rbx,%rsi
  call   <Spsum>
  mov    %rax,%rdx
  sub    (%rsp),%r15d
  imul   %ebp,%r15d
  lea    (%r15,%r15,4),%eax
  cltq
  add    %rdx,%rax
  jmp    L167
L199:
  lea    -0x2(%r12),%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %eax,%ebp
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  imul   %r15d,%eax
  movslq %eax,%rdi
  mov    %r13d,%edx
  mov    %rbx,%rsi
  call   <Spsum>
  mov    %rax,%rdx
  imul   %r15d,%ebp
  lea    0x0(%rbp,%rbp,4),%eax
  cltq
  add    %rdx,%rax
  jmp    L167
L186:
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  imul   %r15d,%eax
  cltq
  sub    %rax,%rbx
  mov    %rbx,%rsi
  mov    %r13d,%edx
  mov    $0x0,%edi
  call   <Spsum>
  jmp    L167
L248:
  lea    -0x2(%r12),%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %eax,%ebp
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  imul   %r15d,%eax
  movslq %eax,%rdi
  mov    %r13d,%edx
  mov    %rbx,%rsi
  call   <Spsum>
  mov    %rax,%rdx
  imul   %r15d,%ebp
  lea    0x0(%rbp,%rbp,4),%eax
  cltq
  add    %rdx,%rax
  jmp    L167
L32:
  mov    %r14d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  imul   %r15d,%eax
  cltq
  sub    %rax,%rbx
  mov    %rbx,%rsi
  mov    %r13d,%edx
  mov    $0x0,%edi
  call   <Spsum>
  mov    %rax,%rdx
  mov    0xc(%rsp),%eax
  imul   %r15d,%eax
  cltq
  add    %rdx,%rax
  jmp    L167
L126:
  mov    $0x0,%eax
  jmp    L167
```

assistant: ```c
long long int Spsum(long long int a, long long int b, int se) {
  long long int s = 0;
  int i, o, p, f1, f2, d = 0, l2;
  d = Digits(b);
  f1 = a / pow(10, d - 1);
  f2 = b / pow(10, d - 1);
  l2 = b % 10;
  if (a == 0 && b == 0)
    return 0;
  if (se == 1) {
    s = 0;
  l:
    p = 1;
    for (i = 1; i <= b; i++) {
      s = s + p * i;
      p = p * -1;
    }
    return s;
  }
  if (se % 2 == 0) {
    if (d == 1) {
      s = b * (b + 1) / 2;
      return s;
    }
    if ((se - d) % 2 == 0) {
      if (a == 0) {
        s = s + 45 * pow(10, d - 2) * f2;
        s = s - f2 * (f2 - 1) / 2 * pow(10, d - 1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else if (f1 != f2) {
        s = s - (f2 * (f2 - 1) / 2 - f1 * (f1 - 1) / 2) * pow(10, d - 1);
        s = s + (d - 1) % 2 * 45 * pow(10, d - 2) * (f2 - f1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else {
        s = s - f2 * (b - a + 1);
        s = s + Spsum(0, b - f2 * pow(10, d - 1), se);
      }
    } else {
      if (a == 0 || f1 != f2) {
        s = s + (f2 * (f2 - 1) / 2 - f1 * (f1 - 1) / 2) * pow(10, d - 1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else {
        s = s + f1 * (b - a + 1);
        s = s + Spsum(0, b - f2 * pow(10, d - 1), se);
      }
    }
  } else {
    if (d == 1)
      goto l;
    if (l2 % 2 == 1) {
      if (a == 0) {
        s = s + 5 * pow(10, d - 2) * f2;
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else if (f1 != f2) {
        s = s + 5 * pow(10, d - 2) * (f2 - f1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else
        s = s + Spsum(0, b - f2 * pow(10, d - 1), se);
    } else {
      p = ((se - d) % 2 == 0) ? -1 : 1;
      if (a == 0) {
        s = s + 5 * pow(10, d - 2) * f2;
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else if (f1 != f2) {
        s = s + 5 * pow(10, d - 2) * (f2 - f1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else {
        s = s + p * f2;
        s = s + Spsum(0, b - f2 * pow(10, d - 1), se);
      }
    }
  }
  return s;
}
```