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

```asm
<draw_room>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    D39(%rip),%rax
  mov    (%rax),%ecx
  mov    D14(%rip),%rax
  mov    (%rax),%eax
  lea    D35(%rip),%rdx
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <glMaterialfv@plt>
  mov    D3(%rip),%rax
  mov    (%rax),%eax
  mov    %eax,%edi
  call   <glBegin@plt>
  mov    $0x0,%edx
  mov    $0x1,%esi
  mov    $0x0,%edi
  call   <glNormal3f@plt>
  mov    $0x1,%edx
  mov    $0xffffffff,%esi
  mov    $0xffffffff,%edi
  call   <glVertex3f@plt>
  mov    $0x1,%edx
  mov    $0xffffffff,%esi
  mov    $0x1,%edi
  call   <glVertex3f@plt>
  mov    $0xffffffff,%edx
  mov    $0xffffffff,%esi
  mov    $0x1,%edi
  call   <glVertex3f@plt>
  mov    $0xffffffff,%edx
  mov    $0xffffffff,%esi
  mov    $0xffffffff,%edi
  call   <glVertex3f@plt>
  mov    $0x0,%edx
  mov    $0xffffffff,%esi
  mov    $0x0,%edi
  call   <glNormal3f@plt>
  mov    $0xffffffff,%edx
  mov    $0x1,%esi
  mov    $0xffffffff,%edi
  call   <glVertex3f@plt>
  mov    $0xffffffff,%edx
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <glVertex3f@plt>
  mov    $0x1,%edx
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <glVertex3f@plt>
  mov    $0x1,%edx
  mov    $0x1,%esi
  mov    $0xffffffff,%edi
  call   <glVertex3f@plt>
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    $0x1,%edi
  call   <glNormal3f@plt>
  mov    $0xffffffff,%edx
  mov    $0xffffffff,%esi
  mov    $0xffffffff,%edi
  call   <glVertex3f@plt>
  mov    $0x1,%edx
  mov    $0xffffffff,%esi
  mov    $0xffffffff,%edi
  call   <glVertex3f@plt>
  mov    $0x1,%edx
  mov    $0x1,%esi
  mov    $0xffffffff,%edi
  call   <glVertex3f@plt>
  mov    $0xffffffff,%edx
  mov    $0x1,%esi
  mov    $0xffffffff,%edi
  call   <glVertex3f@plt>
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    $0xffffffff,%edi
  call   <glNormal3f@plt>
  mov    $0xffffffff,%edx
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <glVertex3f@plt>
  mov    $0x1,%edx
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <glVertex3f@plt>
  mov    $0x1,%edx
  mov    $0xffffffff,%esi
  mov    $0x1,%edi
  call   <glVertex3f@plt>
  mov    $0xffffffff,%edx
  mov    $0xffffffff,%esi
  mov    $0x1,%edi
  call   <glVertex3f@plt>
  mov    $0x1,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <glNormal3f@plt>
  mov    $0xffffffff,%edx
  mov    $0xffffffff,%esi
  mov    $0xffffffff,%edi
  call   <glVertex3f@plt>
  mov    $0xffffffff,%edx
  mov    $0xffffffff,%esi
  mov    $0x1,%edi
  call   <glVertex3f@plt>
  mov    $0xffffffff,%edx
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <glVertex3f@plt>
  mov    $0xffffffff,%edx
  mov    $0x1,%esi
  mov    $0xffffffff,%edi
  call   <glVertex3f@plt>
  mov    $0x0,%eax
  call   <glEnd@plt>
  nop
  pop    %rbp
  ret
```

assistant: ```c
void draw_room(void) {
  static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 1.f};
  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat);
  glBegin(GL_QUADS);
  glNormal3f(0, 1, 0);
  glVertex3f(-1, -1, 1);
  glVertex3f(1, -1, 1);
  glVertex3f(1, -1, -1);
  glVertex3f(-1, -1, -1);
  glNormal3f(0, -1, 0);
  glVertex3f(-1, 1, -1);
  glVertex3f(1, 1, -1);
  glVertex3f(1, 1, 1);
  glVertex3f(-1, 1, 1);
  glNormal3f(1, 0, 0);
  glVertex3f(-1, -1, -1);
  glVertex3f(-1, -1, 1);
  glVertex3f(-1, 1, 1);
  glVertex3f(-1, 1, -1);
  glNormal3f(-1, 0, 0);
  glVertex3f(1, 1, -1);
  glVertex3f(1, 1, 1);
  glVertex3f(1, -1, 1);
  glVertex3f(1, -1, -1);
  glNormal3f(0, 0, 1);
  glVertex3f(-1, -1, -1);
  glVertex3f(1, -1, -1);
  glVertex3f(1, 1, -1);
  glVertex3f(-1, 1, -1);
  glEnd();
}
```