user: 请从给定的汇编指令推导出C源代码：

```asm
<rover_stats>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %edi,%eax
  mov    %esi,-0x18(%rbp)
  mov    %edx,-0x1c(%rbp)
  mov    %ecx,-0x20(%rbp)
  mov    %r8d,-0x24(%rbp)
  mov    %r9d,-0x28(%rbp)
  mov    %al,-0x14(%rbp)
  mov    -0x20(%rbp),%eax
  imul   $0x64,%eax,%eax
  cltd
  idivl  -0x28(%rbp)
  mov    %eax,-0x8(%rbp)
  mov    -0x24(%rbp),%eax
  imul   $0x64,%eax,%eax
  cltd
  idivl  -0x28(%rbp)
  mov    %eax,-0x4(%rbp)
  movsbl -0x14(%rbp),%eax
  cmp    %eax,-0x18(%rbp)
  jne    L57
  movsbl -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D98(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x28(%rbp),%edx
  mov    -0x20(%rbp),%eax
  mov    %eax,%esi
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x8(%rbp),%eax
  mov    0x10(%rbp),%edx
  mov    %eax,%esi
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L22
L57:
  movsbl -0x14(%rbp),%eax
  cmp    %eax,-0x1c(%rbp)
  jne    L55
  movsbl -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D98(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x28(%rbp),%edx
  mov    -0x24(%rbp),%eax
  mov    %eax,%esi
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  mov    0x10(%rbp),%edx
  mov    %eax,%esi
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L22
L55:
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  cmpl   $0x1,0x18(%rbp)
  jne    L44
  mov    -0x20(%rbp),%eax
  mov    %eax,%esi
  lea    D94(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x24(%rbp),%eax
  mov    %eax,%esi
  lea    D108(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L45
L44:
  mov    -0x20(%rbp),%eax
  mov    %eax,%esi
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x24(%rbp),%eax
  mov    %eax,%esi
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L45:
  mov    0x10(%rbp),%esi
  lea    D117(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L22:
  nop
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D98
type_infered: string
name: unpack_data
arguments: data_label: D27
type_infered: string
name: unpack_data
arguments: data_label: D38
type_infered: string
name: unpack_data
arguments: data_label: D66
type_infered: string
name: unpack_data
arguments: data_label: D94
type_infered: string
name: unpack_data
arguments: data_label: D108
type_infered: string
name: unpack_data
arguments: data_label: D40
type_infered: string
name: unpack_data
arguments: data_label: D18
type_infered: string
name: unpack_data
arguments: data_label: D117
type_infered: string

tool: D98: TicTacToe! %c wins!


tool: D27: Current winner has won %d game(s) out of %d, 

tool: D38: %d%% win(s) including %d stalemate(s)


tool: D66: Stalemate... nobody won :(

tool: D94: Human player has won %d game(s), 

tool: D108: Computer player has won %d game(s)


tool: D40: Player 1 has won %d game(s), 

tool: D18: Player 2 has won %d game(s)


tool: D117: Stalemate count is %d time(s)


assistant: ```c
void rover_stats(char winner, int player1, int player2, int wplayer1, int wplayer2, int nreplays, int nstalemates, int mode) {
  int p1stats, p2stats;
  p1stats = wplayer1 * 100 / nreplays;
  p2stats = wplayer2 * 100 / nreplays;
  if (winner == player1) {
    printf("TicTacToe! %c wins!\n", winner);
    printf("Current winner has won %d game(s) out of %d, ", wplayer1, nreplays);
    printf("%d%% win(s) including %d stalemate(s)\n", p1stats, nstalemates);
  } else if (winner == player2) {
    printf("TicTacToe! %c wins!\n", winner);
    printf("Current winner has won %d game(s) out of %d, ", wplayer2, nreplays);
    printf("%d%% win(s) including %d stalemate(s)\n", p2stats, nstalemates);
  } else {
    printf("Stalemate... nobody won :(\n");
    if (mode == 1) {
      printf("Human player has won %d game(s), ", wplayer1);
      printf("Computer player has won %d game(s)\n", wplayer2);
    } else {
      printf("Player 1 has won %d game(s), ", wplayer1);
      printf("Player 2 has won %d game(s)\n", wplayer2);
    }
    printf("Stalemate count is %d time(s)\n", nstalemates);
  }
}
```