user: 请从给定的汇编指令推导出C源代码:

```asm
<string_nformat>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xe0,%rsp
  mov    %rdi,-0xc8(%rbp)
  mov    %rsi,-0xd0(%rbp)
  mov    %rdx,-0xd8(%rbp)
  mov    %rcx,-0xe0(%rbp)
  mov    %r8,-0x90(%rbp)
  mov    %r9,-0x88(%rbp)
  test   %al,%al
  je     L40
  movaps %xmm0,-0x80(%rbp)
  movaps %xmm1,-0x70(%rbp)
  movaps %xmm2,-0x60(%rbp)
  movaps %xmm3,-0x50(%rbp)
  movaps %xmm4,-0x40(%rbp)
  movaps %xmm5,-0x30(%rbp)
  movaps %xmm6,-0x20(%rbp)
  movaps %xmm7,-0x10(%rbp)
L40:
  cmpq   $0x0,-0xd8(%rbp)
  je     L80
  mov    -0xd8(%rbp),%rax
  mov    (%rax),%rax
  jmp    L62
L80:
  mov    $0x0,%eax
L62:
  mov    %rax,-0xb8(%rbp)
  mov    -0xe0(%rbp),%rdx
  mov    -0xbc(%rbp),%eax
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <va_start@plt>
  mov    -0xd0(%rbp),%rax
  sub    -0xb8(%rbp),%rax
  mov    -0xc8(%rbp),%rcx
  mov    -0xb8(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rdi
  mov    -0xbc(%rbp),%ecx
  mov    -0xe0(%rbp),%rdx
  mov    %rax,%rsi
  call   <vsnprintf@plt>
  mov    %eax,-0xc0(%rbp)
  mov    -0xbc(%rbp),%eax
  mov    %eax,%edi
  call   <va_end@plt>
  mov    -0xc0(%rbp),%eax
  movslq %eax,%rdx
  mov    -0xd0(%rbp),%rax
  sub    -0xb8(%rbp),%rax
  cmp    %rax,%rdx
  jb     L110
  mov    D25(%rip),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L110
  mov    -0xd0(%rbp),%rax
  sub    -0xb8(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xb8(%rbp),%rax
  add    %rdx,%rax
  lea    -0x1(%rax),%rdx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0xd0(%rbp),%rax
  sub    -0xb8(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xb8(%rbp),%rax
  add    %rdx,%rax
  lea    -0x2(%rax),%rdx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x2e,(%rax)
  mov    -0xd0(%rbp),%rax
  sub    -0xb8(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xb8(%rbp),%rax
  add    %rdx,%rax
  lea    -0x3(%rax),%rdx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x2e,(%rax)
  mov    -0xd0(%rbp),%rax
  sub    -0xb8(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xb8(%rbp),%rax
  add    %rdx,%rax
  lea    -0x4(%rax),%rdx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x2e,(%rax)
  mov    -0xd0(%rbp),%rax
  mov    %eax,%edx
  mov    -0xb8(%rbp),%rax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  sub    $0x1,%eax
  mov    %eax,-0xc0(%rbp)
  jmp    L49
L110:
  cmpl   $0x0,-0xc0(%rbp)
  js     L56
  mov    -0xc0(%rbp),%eax
  movslq %eax,%rdx
  mov    -0xd0(%rbp),%rax
  sub    -0xb8(%rbp),%rax
  cmp    %rax,%rdx
  jb     L49
L56:
  movl   $0xffffffff,-0xc0(%rbp)
L49:
  cmpq   $0x0,-0xd8(%rbp)
  je     L42
  cmpl   $0x0,-0xc0(%rbp)
  jle    L42
  mov    -0xc0(%rbp),%eax
  movslq %eax,%rdx
  mov    -0xb8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xd8(%rbp),%rax
  mov    %rdx,(%rax)
L42:
  mov    -0xb8(%rbp),%rax
  cmp    -0xd0(%rbp),%rax
  jb     L36
  mov    D25(%rip),%rax
  mov    (%rax),%eax
  jmp    L48
L36:
  mov    D17(%rip),%rax
  mov    (%rax),%eax
L48:
  leave
  ret
```

assistant: ```c
bool __attribute__((format(printf, 4, 5))) string_nformat(char *buf, size_t bufsize, size_t *bufpos, const char *fmt, ...) {
  size_t pos = bufpos ? *bufpos : 0;
  int retval;
  do {
    va_list args;
    va_start(args, fmt);
    retval = vsnprintf(buf + pos, bufsize - pos, fmt, args);
    va_end(args);
    if (retval >= (bufsize - pos) && FALSE) {
      (buf + pos)[(bufsize - pos) - 1] = 0;
      (buf + pos)[(bufsize - pos) - 2] = '.';
      (buf + pos)[(bufsize - pos) - 3] = '.';
      (buf + pos)[(bufsize - pos) - 4] = '.';
      retval = (bufsize - pos) - 1;
    } else if (retval < 0 || retval >= (bufsize - pos)) {
      retval = -1;
    }
  } while (0);
  if (bufpos && retval > 0)
    *bufpos = pos + retval;
  return pos >= bufsize ? FALSE : TRUE;
}
```