user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<matrix_mul>:
  endbr64
  movb   $0x0,(%rdi)
  movzbl (%rsi),%eax
  mov    %rdi,%rcx
  mulb   (%rdx)
  mov    %al,(%rcx)
  mov    %eax,%edi
  movzbl 0x1(%rsi),%eax
  mulb   0x2(%rdx)
  add    %eax,%edi
  mov    %dil,(%rcx)
  movzbl 0x2(%rsi),%eax
  mulb   0x4(%rdx)
  add    %eax,%edi
  mov    %dil,(%rcx)
  movzbl 0x3(%rsi),%eax
  mulb   0x6(%rdx)
  movb   $0x0,0x1(%rcx)
  add    %edi,%eax
  mov    %al,(%rcx)
  movzbl (%rsi),%eax
  mulb   0x1(%rdx)
  mov    %al,0x1(%rcx)
  mov    %eax,%edi
  movzbl 0x1(%rsi),%eax
  mulb   0x3(%rdx)
  add    %eax,%edi
  mov    %dil,0x1(%rcx)
  movzbl 0x2(%rsi),%eax
  mulb   0x5(%rdx)
  add    %eax,%edi
  mov    %dil,0x1(%rcx)
  movzbl 0x7(%rdx),%eax
  mulb   0x3(%rsi)
  movb   $0x0,0x2(%rcx)
  add    %edi,%eax
  mov    %al,0x1(%rcx)
  movzbl 0x4(%rsi),%eax
  mulb   (%rdx)
  mov    %al,0x2(%rcx)
  mov    %eax,%edi
  movzbl 0x5(%rsi),%eax
  mulb   0x2(%rdx)
  add    %eax,%edi
  mov    %dil,0x2(%rcx)
  movzbl 0x6(%rsi),%eax
  mulb   0x4(%rdx)
  add    %eax,%edi
  mov    %dil,0x2(%rcx)
  movzbl 0x7(%rsi),%eax
  mulb   0x6(%rdx)
  movb   $0x0,0x3(%rcx)
  add    %edi,%eax
  mov    %al,0x2(%rcx)
  movzbl 0x4(%rsi),%eax
  mulb   0x1(%rdx)
  mov    %al,0x3(%rcx)
  mov    %eax,%edi
  movzbl 0x5(%rsi),%eax
  mulb   0x3(%rdx)
  add    %eax,%edi
  mov    %dil,0x3(%rcx)
  movzbl 0x6(%rsi),%eax
  mulb   0x5(%rdx)
  add    %eax,%edi
  mov    %dil,0x3(%rcx)
  movzbl 0x7(%rsi),%eax
  mulb   0x7(%rdx)
  movb   $0x0,0x4(%rcx)
  add    %edi,%eax
  mov    %al,0x3(%rcx)
  movzbl 0x8(%rsi),%eax
  mulb   (%rdx)
  mov    %al,0x4(%rcx)
  mov    %eax,%edi
  movzbl 0x9(%rsi),%eax
  mulb   0x2(%rdx)
  add    %eax,%edi
  mov    %dil,0x4(%rcx)
  movzbl 0xa(%rsi),%eax
  mulb   0x4(%rdx)
  add    %eax,%edi
  mov    %dil,0x4(%rcx)
  movzbl 0xb(%rsi),%eax
  mulb   0x6(%rdx)
  add    %edi,%eax
  mov    %al,0x4(%rcx)
  movb   $0x0,0x5(%rcx)
  movzbl 0x8(%rsi),%eax
  mulb   0x1(%rdx)
  mov    %al,0x5(%rcx)
  mov    %eax,%edi
  movzbl 0x9(%rsi),%eax
  mulb   0x3(%rdx)
  add    %eax,%edi
  mov    %dil,0x5(%rcx)
  movzbl 0xa(%rsi),%eax
  mulb   0x5(%rdx)
  add    %eax,%edi
  mov    %dil,0x5(%rcx)
  movzbl 0xb(%rsi),%eax
  mulb   0x7(%rdx)
  movb   $0x0,0x6(%rcx)
  add    %edi,%eax
  mov    %al,0x5(%rcx)
  movzbl 0xc(%rsi),%eax
  mulb   (%rdx)
  mov    %al,0x6(%rcx)
  mov    %eax,%edi
  movzbl 0xd(%rsi),%eax
  mulb   0x2(%rdx)
  add    %eax,%edi
  mov    %dil,0x6(%rcx)
  movzbl 0xe(%rsi),%eax
  mulb   0x4(%rdx)
  add    %eax,%edi
  mov    %dil,0x6(%rcx)
  movzbl 0xf(%rsi),%eax
  mulb   0x6(%rdx)
  movb   $0x0,0x7(%rcx)
  add    %edi,%eax
  mov    %al,0x6(%rcx)
  movzbl 0xc(%rsi),%eax
  mulb   0x1(%rdx)
  mov    %al,0x7(%rcx)
  mov    %eax,%edi
  movzbl 0xd(%rsi),%eax
  mulb   0x3(%rdx)
  add    %eax,%edi
  mov    %dil,0x7(%rcx)
  movzbl 0xe(%rsi),%eax
  mulb   0x5(%rdx)
  add    %eax,%edi
  mov    %dil,0x7(%rcx)
  movzbl 0xf(%rsi),%eax
  mulb   0x7(%rdx)
  add    %edi,%eax
  mov    %al,0x7(%rcx)
  ret
```

assistant: ```c
void matrix_mul(C, A, B) char C[][2];
const char A[][4];
const char B[][2];
{
  int i, j, k;
  for (i = 0; i < 4; i++) {
    for (j = 0; j < 2; j++) {
      C[i][j] = 0;
      for (k = 0; k < 4; k++) {
        C[i][j] += A[i][k] * B[k][j];
      }
    }
  }
}
```