펜티엄 이전의 인텔 CPU | ||||||||||||
아키텍처 분류 | 제품 | |||||||||||
x86 이전 (4비트) | 4004 (1971) | 4040 (1974) | ||||||||||
x86 이전 (8비트) | 8008 (1972) | 8080 (1974) | 8085 (1977) | |||||||||
x86 (16비트) | 8086/8088 (1978/1979) | 80186/80188 (1982) | 80286 (1982) | |||||||||
x86(IA32) (32비트) | 80386 (1985) | 80486 (1989) | ||||||||||
기타 | iAPX432(8800) | i860 | i960 | |||||||||
관련 문서 | 인텔 펜티엄 시리즈 | 인텔 코어 시리즈 | 인텔 코어2 시리즈 | |||||||||
인텔 코어i 시리즈 | 인텔 코어 Ultra 시리즈 |
1. 개요
1974년에 출시된 인텔의 4비트 마이크로프로세서. 인텔 4004의 후속작이다.2. 상세
주로 전자제품용을 목적으로 사용되었으며 인텔 4004보다 너비가 2배 이상 더 넓었고 24핀[1] 방식으로 제작되었다.기존 4004의 명령어에 14개의 명령어가 추가해 총 60개의 명령어를 지원하고, 인터럽트 지원 및 디버깅 관련 기능이 추가되었다. 2개의 뱅크를 선택하는 방식으로 지원 롬 용량이 기존의 4KB(4096B)에서 8KB(8192B)로 증가하였으며 인덱스 레지스터 8개 및 스택 4칸이 추가되어 총 24개의 인덱스 레지스터 및 7단계의 스택을 제공한다. 새로 추가된 인덱스 레지스터는 확장된 ROM과 유사하게 뱅크를 전환하는 방식으로 사용할 수 있다.
3. 제원
클럭 | 500~740KHz |
데이터 폭 | 4비트 |
어드레스 폭 | 12비트 |
지원 명령어 | 60개 |
트랜지스터 | 3,000개 |
공정 | 10μm |
4. 아키텍처
4.1. 레지스터
- 4비트 인덱스 레지스터 24개: 0~7, 0*~7*, 8~15
- 0~7, 총 8개의 레지스터는 Z80의 레지스터 토글과 유사하게 Bank 0, 1을 지정해 사용할 수 있다.
- 12비트 주소 레지스터 8개: PC 및 7단계 호출 스택
===# 명령어 #===
명령어는 1 word(8-bit) 또는 2 word(16-bit) 이진수로 인코딩된다.
- RRRR: 인덱스 레지스터 1개
- RRRX: 인덱스 레지스터 쌍
- DDDD: 데이터
- AAAA: 주소
- CCCC: 조건
16진수 코드 | Mnemonic | OPR(M1) | OPA(M2) | 설명 | ||||||
D3 | D2 | D1 | D1 | D3 | D2 | D1 | D1 | |||
4004 명령어 | ||||||||||
머신 명령어 | ||||||||||
00 | NOP | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | No operation |
1- -- | JCN[*] | 0 | 0 | 0 | 1 | C1 | C2 | C3 | C4 | if C1...C4[3]: PC2:1 ← ROM[RRR*] ; 조건 C1...C4 만족시 JCN 명령어와 동일한 ROM의 A2...A1로 점프 |
A2 | A2 | A2 | A2 | A1 | A1 | A1 | A1 | |||
2- -- | FIM[*] | 0 | 0 | 1 | 0 | R | R | R | 0 | RRR* ← ROM[D2...D1] ; Fetch immediate (direct) from ROM to index register pair RRR |
D2 | D2 | D2 | D2 | D1 | D1 | D1 | D1 | |||
3- | FIN | 0 | 0 | 1 | 1 | R | R | R | 0 | R*0 ← ROM[RRR*] |
3- | JIN | 0 | 0 | 1 | 1 | R | R | R | 1 | PC2:1 ← ROM[RRR*] |
4- -- | JUN[*] | 0 | 1 | 0 | 0 | A3 | A3 | A3 | A3 | PC ← A3...A1 ; ROM의 A3...A1로 점프 |
A2 | A2 | A2 | A2 | A1 | A1 | A1 | A1 | |||
5- -- | JMS[*] | 0 | 1 | 0 | 1 | A3 | A3 | A3 | A3 | Stack ← PC, PC ← A3...A1 ; ROM의 A3...A1로 점프 및 이전 주소를 스택에 저장 |
A2 | A2 | A2 | A2 | A1 | A1 | A1 | A1 | |||
6- | INC | 0 | 1 | 1 | 0 | R | R | R | R | RRRR ← RRRR+1 |
7- -- | ISZ[*] | 0 | 1 | 1 | 1 | R | R | R | R | RRRR ← RRRR+1, PC2:1 ← ROM[RRR*] |
A2 | A2 | A2 | A2 | A1 | A1 | A1 | A1 | |||
8- | ADD | 1 | 0 | 0 | 0 | R | R | R | R | A ← A + RRRR + C |
9- | SUB | 1 | 0 | 0 | 1 | R | R | R | R | A ← A - RRRR - C |
A- | LD | 1 | 0 | 1 | 0 | R | R | R | R | A ← RRRR |
B- | XCH | 1 | 0 | 1 | 1 | R | R | R | R | A ↔ RRRR |
C- | BBL | 1 | 1 | 0 | 0 | D | D | D | D | PC ← Stack, A ← DDDD |
D- | LDM | 1 | 1 | 0 | 1 | D | D | D | D | A ← DDDD |
누산기 명령어 | ||||||||||
F0 | CLB | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | A ← 0, C ← 0; Clear both. |
F1 | CLC | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | C ← 0; Clear carry. |
F2 | IAC | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | A ← A+1; Increment accumulator. |
F3 | CMC | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | C ← ~C; Complement carry. |
F4 | CMA | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | A ← ~A; Complement accumulator. |
F5 | RAL | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | ; Rotate left. (Accumulator and carry) |
F6 | RAR | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | ; Rotate right. (Accumulator and carry) |
F7 | TCC | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | A ← C, C ← 0; Transmit carry to accumulator and clear carry. |
F8 | DAC | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | A ← A-1;Decrement accumulator. |
F9 | TCS | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | ; Transfer carry subtract and clear carry. |
FA | STC | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | Set carry. |
FB | DAA | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | Decimal adjust accumulator |
FC | KBP | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | Keyboard process. |
FD | DCL | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | Designate command line. |
입출력 명령어 | ||||||||||
2- | SRC | 0 | 0 | 1 | 0 | R | R | R | 1 | |
E0 | WRM | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | |
E1 | WMP | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | |
E2 | WRR | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | |
E3 | WPM | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | |
E4 | WR0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | |
E5 | WR1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | |
E6 | WR2 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | |
E7 | WR3 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | |
E8 | SBM | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | |
E9 | RDM | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | |
EA | RDR | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | |
EB | ADM | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | |
EC | RD0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | |
ED | RD1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | |
EE | RD2 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | |
EF | RD3 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | |
4040 추가 명령어 | ||||||||||
01 | HLT | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | Halt |
02 | BBS | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | |
03 | LCR | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | |
04 | OR4 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | A ← A | R[4] |
05 | OR5 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | A ← A | R[5] |
06 | AN6 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | A ← A & R[6] |
07 | AN7 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | A ← A & R[7] |
08 | DB0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | Designate ROM bank 0. CM-ROM0 becomes enabled. |
09 | DB1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | Designate ROM bank 1. CM-ROM1 becomes enabled. |
0A | SB0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | Select index register bank 0. |
0B | SB1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | Select index register bank 1. |
0C | EIN | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | Enable interrupt. |
0D | DIN | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | Disable interrupt. |
0E | RPM | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | Read program memory. |