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

```asm
<main>:
  endbr64
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  lea    0x10(%rsp),%rcx
  lea    0xc(%rsp),%rdx
  lea    0x8(%rsp),%rsi
  lea    0x14(%rsp),%r8
  lea    D76(%rip),%rdi
  call   <scanf@plt>
  mov    0x8(%rsp),%esi
  mov    0xc(%rsp),%eax
  cmp    %eax,%esi
  jl     L150
  mov    0x10(%rsp),%edx
  cmp    %edx,%esi
  jl     L191
  mov    0x14(%rsp),%ecx
  cmp    %ecx,%esi
  jl     L191
  cmp    %ecx,%edx
  mov    %ecx,%esi
  cmovge %edx,%esi
  cmp    %esi,%eax
  jge    L154
  cmp    %ecx,%edx
  jl     L261
  mov    %edx,%esi
  lea    D0(%rip),%rdi
  call   <printf@plt>
  jmp    L123
L154:
  mov    %eax,%esi
  lea    D0(%rip),%rdi
  call   <printf@plt>
  jmp    L123
L261:
  mov    %ecx,%esi
  lea    D0(%rip),%rdi
  call   <printf@plt>
  jmp    L123
L191:
  cmp    %eax,%esi
  je     L150
L208:
  mov    0x10(%rsp),%edx
  cmp    %edx,%esi
  jg     L85
  cmp    %edx,%eax
  jle    L186
L85:
  cmp    %eax,%esi
  mov    %eax,%ecx
  cmovge %esi,%ecx
  cmp    %edx,%ecx
  cmovl  %edx,%ecx
  cmp    %ecx,0x14(%rsp)
  jge    L21
L123:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L74
  mov    $0x0,%eax
  add    $0x28,%rsp
  ret
L150:
  mov    0x10(%rsp),%edx
  cmp    %edx,%eax
  jl     L208
  mov    0x14(%rsp),%ecx
  cmp    %ecx,%eax
  jl     L208
  cmp    %ecx,%edx
  mov    %ecx,%eax
  cmovge %edx,%eax
  cmp    %eax,%esi
  jge    L22
  cmp    %ecx,%edx
  jl     L202
  mov    %edx,%esi
  lea    D0(%rip),%rdi
  call   <printf@plt>
  jmp    L123
L22:
  lea    D0(%rip),%rdi
  call   <printf@plt>
  jmp    L123
L202:
  mov    %ecx,%esi
  lea    D0(%rip),%rdi
  call   <printf@plt>
  jmp    L123
L186:
  mov    0x14(%rsp),%ecx
  cmp    %ecx,%edx
  jl     L85
  cmp    %ecx,%eax
  mov    %ecx,%edx
  cmovge %eax,%edx
  cmp    %edx,%esi
  jge    L244
  cmp    %ecx,%eax
  jl     L45
  mov    %eax,%esi
  lea    D0(%rip),%rdi
  call   <printf@plt>
  jmp    L123
L244:
  lea    D0(%rip),%rdi
  call   <printf@plt>
  jmp    L123
L45:
  mov    %ecx,%esi
  lea    D0(%rip),%rdi
  call   <printf@plt>
  jmp    L123
L21:
  cmp    %edx,%esi
  mov    %edx,%ecx
  cmovge %esi,%ecx
  cmp    %ecx,%eax
  jge    L277
  cmp    %edx,%esi
  jg     L140
  mov    %edx,%esi
  lea    D0(%rip),%rdi
  call   <printf@plt>
  jmp    L123
L277:
  mov    %eax,%esi
  lea    D0(%rip),%rdi
  call   <printf@plt>
  jmp    L123
L140:
  lea    D0(%rip),%rdi
  call   <printf@plt>
  jmp    L123
L74:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_tag: D76
type_infered: string
name: parse_data
arguments: data_tag: D0
type_infered: string

tool: D76: %d%d%d%d

tool: D0: The second largest number is %d

assistant: ```c
int main() {
  int a, b, c, d;
  scanf("%d%d%d%d", &a, &b, &c, &d);
  if (a >= b && a >= c && a >= d) {
    if (b >= c && b >= d) {
      printf("The second largest number is %d", b);
    } else {
      if (c >= d) {
        printf("The second largest number is %d", c);
      } else {
        printf("The second largest number is %d", d);
      }
    }
  } else if (b >= a && b >= c && b >= d) {
    if (a >= c && a >= d) {
      printf("The second largest number is %d", a);
    } else {
      if (c >= d) {
        printf("The second largest number is %d", c);
      } else {
        printf("The second largest number is %d", d);
      }
    }
  } else if (c >= b && c >= a && c >= d) {
    if (a >= b && a >= d) {
      printf("The second largest number is %d", a);
    } else {
      if (b >= d) {
        printf("The second largest number is %d", b);
      } else {
        printf("The second largest number is %d", d);
      }
    }
  } else if (d >= b && d >= c && d >= a) {
    if (b >= c && b >= a) {
      printf("The second largest number is %d", b);
    } else {
      if (c >= a) {
        printf("The second largest number is %d", c);
      } else {
        printf("The second largest number is %d", a);
      }
    }
  }
  return 0;
}
```