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

```asm
<agrega_periodo>:
  endbr64
  cmp    $0xc,%edi
  ja     L20
  sub    $0x8,%rsp
  mov    %rsi,%rcx
  mov    %edi,%edi
  lea    D11(%rip),%rdx
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x6,%edx
  lea    D111(%rip),%rsi
  mov    %rcx,%rdi
  call   <strncat@plt>
  mov    $0x6,%eax
L43:
  add    $0x8,%rsp
  ret
  mov    $0x6,%edx
  lea    D13(%rip),%rsi
  mov    %rcx,%rdi
  call   <strncat@plt>
  mov    $0x6,%eax
  jmp    L43
  mov    $0x7,%edx
  lea    D92(%rip),%rsi
  mov    %rcx,%rdi
  call   <strncat@plt>
  mov    $0x7,%eax
  jmp    L43
  mov    $0xa,%edx
  lea    D98(%rip),%rsi
  mov    %rcx,%rdi
  call   <strncat@plt>
  mov    $0xa,%eax
  jmp    L43
  mov    $0xa,%edx
  lea    D102(%rip),%rsi
  mov    %rcx,%rdi
  call   <strncat@plt>
  mov    $0xa,%eax
  jmp    L43
  mov    $0x9,%edx
  lea    D9(%rip),%rsi
  mov    %rcx,%rdi
  call   <strncat@plt>
  mov    $0x9,%eax
  jmp    L43
  mov    $0x9,%edx
  lea    D23(%rip),%rsi
  mov    %rcx,%rdi
  call   <strncat@plt>
  mov    $0x9,%eax
  jmp    L43
  mov    $0x8,%edx
  lea    D129(%rip),%rsi
  mov    %rcx,%rdi
  call   <strncat@plt>
  mov    $0x8,%eax
  jmp    L43
  mov    $0x8,%edx
  lea    D40(%rip),%rsi
  mov    %rcx,%rdi
  call   <strncat@plt>
  mov    $0x8,%eax
  jmp    L43
  mov    $0x8,%edx
  lea    D126(%rip),%rsi
  mov    %rcx,%rdi
  call   <strncat@plt>
  mov    $0x8,%eax
  jmp    L43
  mov    $0xa,%edx
  lea    D84(%rip),%rsi
  mov    %rcx,%rdi
  call   <strncat@plt>
  mov    $0xa,%eax
  jmp    L43
  mov    $0xb,%edx
  lea    D117(%rip),%rsi
  mov    %rcx,%rdi
  call   <strncat@plt>
  mov    $0xb,%eax
  jmp    L43
  mov    $0x0,%eax
  jmp    L43
L20:
  mov    $0x0,%eax
  ret
```

tool_calls: name: unpack_data
arguments: tag: D111
type: string
name: unpack_data
arguments: tag: D13
type: string
name: unpack_data
arguments: tag: D92
type: string
name: unpack_data
arguments: tag: D98
type: string
name: unpack_data
arguments: tag: D102
type: string
name: unpack_data
arguments: tag: D9
type: string
name: unpack_data
arguments: tag: D23
type: string
name: unpack_data
arguments: tag: D129
type: string
name: unpack_data
arguments: tag: D40
type: string
name: unpack_data
arguments: tag: D126
type: string
name: unpack_data
arguments: tag: D84
type: string
name: unpack_data
arguments: tag: D117
type: string

tool: D111: millon

tool: D13: billon

tool: D92: trillon

tool: D98: cuatrillon

tool: D102: quintillon

tool: D9: sextillon

tool: D23: septillon

tool: D129: octillon

tool: D40: nonillon

tool: D126: decillon

tool: D84: undecillon

tool: D117: duodecillon

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;
}
```