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

```asm
<AddRoundKey>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  xor    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  movzbl (%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  movzbl (%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x8(%rbp),%rax
  movzbl 0x1(%rax),%edx
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  xor    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %dl,0x1(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movzbl 0x1(%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0x5,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  xor    %ecx,%edx
  mov    %dl,0x1(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  movzbl 0x1(%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0x6,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  xor    %ecx,%edx
  mov    %dl,0x1(%rax)
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  movzbl 0x1(%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0x7,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  xor    %ecx,%edx
  mov    %dl,0x1(%rax)
  mov    -0x8(%rbp),%rax
  movzbl 0x2(%rax),%edx
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  movzbl (%rax),%eax
  xor    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %dl,0x2(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movzbl 0x2(%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0x9,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  xor    %ecx,%edx
  mov    %dl,0x2(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  movzbl 0x2(%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0xa,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  xor    %ecx,%edx
  mov    %dl,0x2(%rax)
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  movzbl 0x2(%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0xb,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  xor    %ecx,%edx
  mov    %dl,0x2(%rax)
  mov    -0x8(%rbp),%rax
  movzbl 0x3(%rax),%edx
  mov    -0x10(%rbp),%rax
  add    $0xc,%rax
  movzbl (%rax),%eax
  xor    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %dl,0x3(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movzbl 0x3(%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0xd,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  xor    %ecx,%edx
  mov    %dl,0x3(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  movzbl 0x3(%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0xe,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  xor    %ecx,%edx
  mov    %dl,0x3(%rax)
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  movzbl 0x3(%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0xf,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  xor    %ecx,%edx
  mov    %dl,0x3(%rax)
  nop
  pop    %rbp
  ret
```

assistant: ```c
void AddRoundKey(unsigned char state[][4], unsigned char w[]) {
  state[0][0] ^= w[0];
  state[1][0] ^= w[1];
  state[2][0] ^= w[2];
  state[3][0] ^= w[3];
  state[0][1] ^= w[4];
  state[1][1] ^= w[5];
  state[2][1] ^= w[6];
  state[3][1] ^= w[7];
  state[0][2] ^= w[8];
  state[1][2] ^= w[9];
  state[2][2] ^= w[10];
  state[3][2] ^= w[11];
  state[0][3] ^= w[12];
  state[1][3] ^= w[13];
  state[2][3] ^= w[14];
  state[3][3] ^= w[15];
}
```