펜티엄 이전의 인텔 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. |