user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<test_width_minus_20>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x78,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x68(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rbx
  lea    D105(%rip),%rdx
  lea    D156(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  lea    D128(%rip),%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  mov    $0x400,%edx
  lea    D162(%rip),%r12
  mov    %r12,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    D29(%rip),%rbp
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  mov    $0xfffffc00,%edx
  mov    %r12,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    D190(%rip),%r12
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  mov    $0x400,%edx
  lea    D70(%rip),%r13
  mov    %r13,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  mov    $0xfffffc00,%edx
  mov    %r13,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  mov    $0x400,%edx
  lea    D213(%rip),%r12
  mov    %r12,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  movsd  D102(%rip),%xmm0
  lea    D132(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x1,%eax
  call   <sprintf@plt>
  lea    D11(%rip),%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  mov    $0xfffffc00,%edx
  mov    %r12,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    D45(%rip),%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  mov    $0x1ff,%edx
  lea    D198(%rip),%rbp
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    D58(%rip),%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  mov    $0xfffffe01,%edx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    D153(%rip),%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  mov    $0x1234abcd,%edx
  lea    D209(%rip),%rbp
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    D113(%rip),%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  mov    $0xedcb5433,%edx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    D55(%rip),%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  mov    $0x1234abcd,%edx
  lea    D127(%rip),%rbp
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    D186(%rip),%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  mov    $0xedcb5433,%edx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    D26(%rip),%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  mov    $0x78,%edx
  lea    D10(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    D229(%rip),%rsi
  mov    %rbx,%rdi
  call   <assertStringsEqual@plt>
  mov    0x68(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L1
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L1:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D105
datatype: string
name: disassemble_data
arguments: data_label: D156
datatype: string
name: disassemble_data
arguments: data_label: D128
datatype: string
name: disassemble_data
arguments: data_label: D162
datatype: string
name: disassemble_data
arguments: data_label: D29
datatype: string
name: disassemble_data
arguments: data_label: D190
datatype: string
name: disassemble_data
arguments: data_label: D70
datatype: string
name: disassemble_data
arguments: data_label: D213
datatype: string
name: disassemble_data
arguments: data_label: D102
datatype: f64
name: disassemble_data
arguments: data_label: D132
datatype: string
name: disassemble_data
arguments: data_label: D11
datatype: string
name: disassemble_data
arguments: data_label: D45
datatype: string
name: disassemble_data
arguments: data_label: D198
datatype: string
name: disassemble_data
arguments: data_label: D58
datatype: string
name: disassemble_data
arguments: data_label: D153
datatype: string
name: disassemble_data
arguments: data_label: D209
datatype: string
name: disassemble_data
arguments: data_label: D113
datatype: string
name: disassemble_data
arguments: data_label: D55
datatype: string
name: disassemble_data
arguments: data_label: D127
datatype: string
name: disassemble_data
arguments: data_label: D186
datatype: string
name: disassemble_data
arguments: data_label: D26
datatype: string
name: disassemble_data
arguments: data_label: D10
datatype: string
name: disassemble_data
arguments: data_label: D229
datatype: string

tool: D105: Hello

tool: D156: %-20s

tool: D128: Hello               

tool: D162: %-20d

tool: D29: 1024                

tool: D190: -1024               

tool: D70: %-20i

tool: D213: %-20u

tool: D102: 1024.1234

tool: D132: %-20.4f

tool: D11: 1024.1234           

tool: D45: 4294966272          

tool: D198: %-20o

tool: D58: 777                 

tool: D153: 37777777001         

tool: D209: %-20x

tool: D113: 1234abcd            

tool: D55: edcb5433            

tool: D127: %-20X

tool: D186: 1234ABCD            

tool: D26: EDCB5433            

tool: D10: %-20c

tool: D229: x                   

assistant: ```c
void test_width_minus_20() {
  char buffer[100];
  sprintf(buffer, "%-20s", "Hello");
  assertStringsEqual(buffer, "Hello               ");
  sprintf(buffer, "%-20d", 1024);
  assertStringsEqual(buffer, "1024                ");
  sprintf(buffer, "%-20d", -1024);
  assertStringsEqual(buffer, "-1024               ");
  sprintf(buffer, "%-20i", 1024);
  assertStringsEqual(buffer, "1024                ");
  sprintf(buffer, "%-20i", -1024);
  assertStringsEqual(buffer, "-1024               ");
  sprintf(buffer, "%-20u", 1024);
  assertStringsEqual(buffer, "1024                ");
  sprintf(buffer, "%-20.4f", 1024.1234);
  assertStringsEqual(buffer, "1024.1234           ");
  sprintf(buffer, "%-20u", 4294966272U);
  assertStringsEqual(buffer, "4294966272          ");
  sprintf(buffer, "%-20o", 511);
  assertStringsEqual(buffer, "777                 ");
  sprintf(buffer, "%-20o", 4294966785U);
  assertStringsEqual(buffer, "37777777001         ");
  sprintf(buffer, "%-20x", 305441741);
  assertStringsEqual(buffer, "1234abcd            ");
  sprintf(buffer, "%-20x", 3989525555U);
  assertStringsEqual(buffer, "edcb5433            ");
  sprintf(buffer, "%-20X", 305441741);
  assertStringsEqual(buffer, "1234ABCD            ");
  sprintf(buffer, "%-20X", 3989525555U);
  assertStringsEqual(buffer, "EDCB5433            ");
  sprintf(buffer, "%-20c", 'x');
  assertStringsEqual(buffer, "x                   ");
}
```