user: 下面的汇编指令对应的C源代码是什么:

```asm
<InvMixColumn>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rsi
  movzbl 0x1(%rdi),%edx
  movzbl 0x2(%rdi),%eax
  movzbl 0x3(%rdi),%ebx
  movzbl (%rdi),%r12d
  mov    %edx,%ebp
  xor    %r12d,%ebp
  lea    (%r12,%r12,1),%r11d
  mov    %r12d,%ecx
  sar    $0x7,%cl
  and    $0x1b,%ecx
  xor    %ecx,%r11d
  lea    (%rdx,%rdx,1),%r8d
  mov    %edx,%ecx
  sar    $0x7,%cl
  and    $0x1b,%ecx
  xor    %ecx,%r8d
  lea    (%rax,%rax,1),%r10d
  mov    %eax,%ecx
  sar    $0x7,%cl
  and    $0x1b,%ecx
  xor    %ecx,%r10d
  lea    (%rbx,%rbx,1),%r9d
  mov    %ebx,%ecx
  sar    $0x7,%cl
  and    $0x1b,%ecx
  xor    %ecx,%r9d
  xor    %eax,%edx
  mov    %edx,%ecx
  xor    %ebx,%ecx
  xor    %r11d,%ecx
  xor    %r8d,%ecx
  mov    %eax,%edi
  xor    %ebx,%edi
  xor    %r12d,%edi
  xor    %r8d,%edi
  xor    %r10d,%edi
  xor    %ebp,%ebx
  xor    %r10d,%ebx
  xor    %r9d,%ebx
  xor    %ebp,%eax
  xor    %r11d,%eax
  xor    %r9d,%eax
  lea    (%r11,%r11,1),%edx
  sar    $0x7,%r11b
  and    $0x1b,%r11d
  xor    %r11d,%edx
  lea    (%r8,%r8,1),%r11d
  sar    $0x7,%r8b
  and    $0x1b,%r8d
  xor    %r8d,%r11d
  lea    (%r10,%r10,1),%r8d
  sar    $0x7,%r10b
  and    $0x1b,%r10d
  xor    %r10d,%r8d
  lea    (%r9,%r9,1),%ebp
  sar    $0x7,%r9b
  and    $0x1b,%r9d
  xor    %r9d,%ebp
  mov    %edx,%r9d
  xor    %r8d,%r9d
  xor    %r9d,%ecx
  mov    %r11d,%r10d
  xor    %ebp,%r10d
  xor    %r10d,%edi
  xor    %ebx,%r9d
  xor    %eax,%r10d
  mov    %edx,%ebx
  sar    $0x7,%bl
  and    $0x1b,%ebx
  mov    %edx,%eax
  xor    %r11d,%eax
  sar    $0x7,%r11b
  and    $0x1b,%r11d
  xor    %r8d,%eax
  sar    $0x7,%r8b
  and    $0x1b,%r8d
  mov    %ebp,%edx
  sar    $0x7,%dl
  and    $0x1b,%edx
  xor    %ebp,%eax
  add    %eax,%eax
  xor    %ebx,%eax
  xor    %r11d,%eax
  xor    %r8d,%eax
  xor    %edx,%eax
  xor    %eax,%ecx
  mov    %cl,(%rsi)
  xor    %eax,%edi
  mov    %dil,0x1(%rsi)
  xor    %eax,%r9d
  mov    %r9b,0x2(%rsi)
  xor    %r10d,%eax
  mov    %al,0x3(%rsi)
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

assistant: ```c
void InvMixColumn(unsigned char *column) {
  unsigned char r0, r1, r2, r3;
  r0 = column[1] ^ column[2] ^ column[3];
  r1 = column[0] ^ column[2] ^ column[3];
  r2 = column[0] ^ column[1] ^ column[3];
  r3 = column[0] ^ column[1] ^ column[2];
  column[0] = (column[0] << 1) ^ (column[0] & 0x80 ? 0x1b : 0);
  column[1] = (column[1] << 1) ^ (column[1] & 0x80 ? 0x1b : 0);
  column[2] = (column[2] << 1) ^ (column[2] & 0x80 ? 0x1b : 0);
  column[3] = (column[3] << 1) ^ (column[3] & 0x80 ? 0x1b : 0);
  r0 ^= column[0] ^ column[1];
  r1 ^= column[1] ^ column[2];
  r2 ^= column[2] ^ column[3];
  r3 ^= column[0] ^ column[3];
  column[0] = (column[0] << 1) ^ (column[0] & 0x80 ? 0x1b : 0);
  column[1] = (column[1] << 1) ^ (column[1] & 0x80 ? 0x1b : 0);
  column[2] = (column[2] << 1) ^ (column[2] & 0x80 ? 0x1b : 0);
  column[3] = (column[3] << 1) ^ (column[3] & 0x80 ? 0x1b : 0);
  r0 ^= column[0] ^ column[2];
  r1 ^= column[1] ^ column[3];
  r2 ^= column[0] ^ column[2];
  r3 ^= column[1] ^ column[3];
  column[0] = (column[0] << 1) ^ (column[0] & 0x80 ? 0x1b : 0);
  column[1] = (column[1] << 1) ^ (column[1] & 0x80 ? 0x1b : 0);
  column[2] = (column[2] << 1) ^ (column[2] & 0x80 ? 0x1b : 0);
  column[3] = (column[3] << 1) ^ (column[3] & 0x80 ? 0x1b : 0);
  column[0] ^= column[1] ^ column[2] ^ column[3];
  r0 ^= column[0];
  r1 ^= column[0];
  r2 ^= column[0];
  r3 ^= column[0];
  column[0] = r0;
  column[1] = r1;
  column[2] = r2;
  column[3] = r3;
}
```