user: Translate the below assembly code into C programming language:

```asm
<one>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r12
  push   %rbx
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x20(%rbp),%rdx
  lea    -0x24(%rbp),%rax
  mov    %rax,%rsi
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x20(%rbp),%edx
  mov    -0x24(%rbp),%eax
  mov    %eax,%esi
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x1,-0x1c(%rbp)
  jmp    L23
L48:
  mov    -0x24(%rbp),%eax
  imul   -0x1c(%rbp),%eax
  mov    %eax,%r12d
  mov    -0x20(%rbp),%edx
  mov    -0x24(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,%edi
  call   <log10@plt>
  test   %eax,%eax
  jle    L65
  mov    -0x20(%rbp),%edx
  mov    -0x24(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,%edi
  call   <log10@plt>
  lea    0x1(%rax),%ebx
  jmp    L43
L65:
  mov    -0x20(%rbp),%edx
  mov    -0x24(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,%edi
  call   <log10@plt>
  mov    $0x1,%edx
  mov    %edx,%ebx
  sub    %eax,%ebx
L43:
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <log10@plt>
  test   %eax,%eax
  jle    L57
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <log10@plt>
  add    $0x1,%eax
  jmp    L59
L57:
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <log10@plt>
  mov    %eax,%edx
  mov    $0x1,%eax
  sub    %edx,%eax
L59:
  mov    -0x24(%rbp),%esi
  mov    -0x1c(%rbp),%edx
  mov    %r12d,%r9d
  mov    %ebx,%r8d
  mov    %edx,%ecx
  mov    %eax,%edx
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x1c(%rbp)
L23:
  mov    -0x20(%rbp),%eax
  cmp    %eax,-0x1c(%rbp)
  jle    L48
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D33(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  nop
  mov    -0x18(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L9
  call   <__stack_chk_fail@plt>
L9:
  add    $0x20,%rsp
  pop    %rbx
  pop    %r12
  pop    %rbp
  ret
```

tool_calls: name: parse_data
arguments: data_label: D48
type: string
name: parse_data
arguments: data_label: D16
type: string
name: parse_data
arguments: data_label: D38
type: string
name: parse_data
arguments: data_label: D49
type: string
name: parse_data
arguments: data_label: D33
type: string

tool: D48: enter number (int), length (int) of table: 

tool: D16: %d%d

tool: D38: 
generated table of %d of length %d:



tool: D49: %d * %*d = %*d


tool: D33: 
returning to menu. press Enter...

assistant: ```c
void one() {
  int number, length, i;
  printf("enter number (int), length (int) of table: ");
  scanf("%d%d", &number, &length);
  printf("\ngenerated table of %d of length %d:\n\n", number, length);
  for (i = 1; i <= length; ++i)
    printf("%d * %*d = %*d\n", number, log10(length) > 0 ? (int)(1 + log10(length)) : (int)(1 - log10(length)), i, log10(length * number) > 0 ? (int)(1 + log10(length * number)) : (int)(1 - log10(length * number)), (number * i));
  getchar();
  printf("\nreturning to menu. press Enter...");
  getchar();
}
```