옵코드 표
옵코드 열 이해하기:
- 옵코드에 나타나는 16진수 숫자(0-9, A-F)는 문자 그대로 해석되며, 해당 연산을 결정하는 데 사용됩니다.
- X 또는 Y 와일드카드는 VX/VY에 저장된 값을 사용합니다.
- N은 리터럴 16진수 값을 나타냅니다. NN과 NNN은 각각 두 자리와 세 자리 16진수를 나타냅니다.
예: 명령어 0xD123은 DXYN 옵코드와 일치하며, 이때 VX는 V1, VY는 V2, N은 3입니다((V1, V2) 위치에 8x3 스프라이트를 그립니다)
| 옵코드 | 설명 | 비고 |
|---|---|---|
| 0000 | Nop | 아무것도 하지 않고 다음 옵코드로 진행합니다 |
| 00E0 | 화면을 지웁니다 | |
| 00EE | 서브루틴에서 반환합니다 | |
| 1NNN | 주소 0xNNN으로 점프합니다 | |
| 2NNN | 0xNNN을 호출합니다 | 0xNNN에 있는 서브루틴에 진입하며, 이곳으로 돌아올 수 있도록 현재 PC를 스택에 추가합니다 |
| 3XNN | VX == 0xNN이면 건너뜁니다 | |
| 4XNN | VX != 0xNN이면 건너뜁니다 | |
| 5XY0 | VX == VY이면 건너뜁니다 | |
| 6XNN | VX = 0xNN | |
| 7XNN | VX += 0xNN | 캐리 플래그에 영향을 주지 않습니다 |
| 8XY0 | VX = VY | |
| 8XY1 | VX |= VY | |
| 8XY2 | VX &= VY | |
| 8XY3 | VX ^= VY | |
| 8XY4 | VX += VY | 캐리가 발생하면 VF를 설정합니다 |
| 8XY5 | VX -= VY | 빌림이 발생하면 VF를 지웁니다 |
| 8XY6 | VX >>= 1 | 밀려난 비트를 VF에 저장합니다 |
| 8XY7 | VX = VY - VX | 빌림이 발생하면 VF를 지웁니다 |
| 8XYE | VX <<= 1 | 밀려난 비트를 VF에 저장합니다 |
| 9XY0 | VX != VY이면 건너뜁니다 | |
| ANNN | I = 0xNNN | |
| BNNN | V0 + 0xNNN으로 점프합니다 | |
| CXNN | VX = rand() & 0xNN | |
| DXYN | (VX, VY)에 스프라이트를 그립니다 | 스프라이트의 높이는 0xN 픽셀이며, I의 값에 따라 켜짐/꺼짐이 정해지고, 반전된 픽셀이 하나라도 있으면 VF가 설정됩니다 |
| EX9E | VX에 담긴 인덱스의 키가 눌려 있으면 건너뜁니다 | |
| EXA1 | VX에 담긴 인덱스의 키가 눌려 있지 않으면 건너뜁니다 | |
| FX07 | VX = 지연 타이머 | |
| FX0A | 키 입력을 기다린 뒤 그 인덱스를 VX에 저장합니다 | 블로킹 연산 |
| FX15 | 지연 타이머 = VX | |
| FX18 | 사운드 타이머 = VX | |
| FX1E | I += VX | |
| FX29 | I를 VX에 있는 폰트 문자의 주소로 설정합니다 | |
| FX33 | VX의 BCD 인코딩을 I에 저장합니다 | |
| FX55 | V0부터 VX까지를 I에서 시작하는 RAM 주소에 저장합니다 | 양 끝을 포함하는 범위 |
| FX65 | I에 담긴 주소부터 시작하는 RAM 값으로 V0부터 VX까지 채웁니다 | 양 끝 포함 |