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

```asm
<agrega_periodo>:
  endbr64
  cmp    $0xc,%edi
  ja     L82
  lea    D61(%rip),%rdx
  mov    %edi,%edi
  sub    $0x8,%rsp
  mov    %rsi,%r8
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
  mov    $0xb,%edx
  lea    D62(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0xb,%eax
L52:
  add    $0x8,%rsp
  ret
  xchg   %ax,%ax
  mov    $0x6,%edx
  lea    D57(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x6,%eax
  jmp    L52
  nopl   0x0(%rax,%rax,1)
  mov    $0x6,%edx
  lea    D95(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x6,%eax
  jmp    L52
  nopl   0x0(%rax,%rax,1)
  mov    $0x7,%edx
  lea    D116(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x7,%eax
  jmp    L52
  nopl   0x0(%rax,%rax,1)
  mov    $0xa,%edx
  lea    D73(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0xa,%eax
  jmp    L52
  xchg   %ax,%ax
  mov    $0xa,%edx
  lea    D112(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0xa,%eax
  jmp    L52
  xchg   %ax,%ax
  mov    $0x9,%edx
  lea    D13(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x9,%eax
  jmp    L52
  xchg   %ax,%ax
  mov    $0x9,%edx
  lea    D36(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x9,%eax
  jmp    L52
  xchg   %ax,%ax
  mov    $0x8,%edx
  lea    D25(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x8,%eax
  jmp    L52
  xchg   %ax,%ax
  mov    $0x8,%edx
  lea    D117(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x8,%eax
  jmp    L52
  xchg   %ax,%ax
  mov    $0x8,%edx
  lea    D56(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0x8,%eax
  jmp    L52
  xchg   %ax,%ax
  mov    $0xa,%edx
  lea    D54(%rip),%rsi
  mov    %r8,%rdi
  call   <strncat@plt>
  mov    $0xa,%eax
  jmp    L52
L82:
  xor    %eax,%eax
  ret
  xor    %eax,%eax
  jmp    L52
```

tool_calls: name: disassemble_data
arguments: tag: D62
type: string
name: disassemble_data
arguments: tag: D57
type: string
name: disassemble_data
arguments: tag: D95
type: string
name: disassemble_data
arguments: tag: D116
type: string
name: disassemble_data
arguments: tag: D73
type: string
name: disassemble_data
arguments: tag: D112
type: string
name: disassemble_data
arguments: tag: D13
type: string
name: disassemble_data
arguments: tag: D36
type: string
name: disassemble_data
arguments: tag: D25
type: string
name: disassemble_data
arguments: tag: D117
type: string
name: disassemble_data
arguments: tag: D56
type: string
name: disassemble_data
arguments: tag: D54
type: string

tool: D62: duodecillon

tool: D57: millon

tool: D95: billon

tool: D116: trillon

tool: D73: cuatrillon

tool: D112: quintillon

tool: D13: sextillon

tool: D36: septillon

tool: D25: octillon

tool: D117: nonillon

tool: D56: decillon

tool: D54: undecillon

assistant: ```c
int agrega_periodo(const unsigned int numero, char *buffer) {
  int len = 0;
  if (numero == 1) {
    len = 6;
    strncat(buffer, "millon", len);
  } else if (numero == 2) {
    len = 6;
    strncat(buffer, "billon", len);
  } else if (numero == 3) {
    len = 7;
    strncat(buffer, "trillon", len);
  } else if (numero == 4) {
    len = 10;
    strncat(buffer, "cuatrillon", len);
  } else if (numero == 5) {
    len = 10;
    strncat(buffer, "quintillon", len);
  } else if (numero == 6) {
    len = 9;
    strncat(buffer, "sextillon", len);
  } else if (numero == 7) {
    len = 9;
    strncat(buffer, "septillon", len);
  } else if (numero == 8) {
    len = 8;
    strncat(buffer, "octillon", len);
  } else if (numero == 9) {
    len = 8;
    strncat(buffer, "nonillon", len);
  } else if (numero == 10) {
    len = 8;
    strncat(buffer, "decillon", len);
  } else if (numero == 11) {
    len = 10;
    strncat(buffer, "undecillon", len);
  } else if (numero == 12) {
    len = 11;
    strncat(buffer, "duodecillon", len);
  }
  return len;
}
```