최근 수정 시각 : 2023-08-04 18:27:25

인텔 4040


펜티엄 이전의 인텔 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. 개요2. 상세3. 제원4. 아키텍처
4.1. 레지스터
5. 핀아웃6. 지원 칩7. 여담

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. 아키텍처

파일:1052px-4040_arch.svg.png

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.

5. 핀아웃

파일:Intel_4040_processor_pinout.png

6. 지원 칩

7. 여담


[1] 전작인 4004는 16핀을 적용했다.[*] 2바이트 명령어[3] C1: 점프 조건을 반전, C2: A = 0, C3: C = 1, C4: Test 핀 = 0; 1 = JNT, 2 = JC, 4 = JZ, 9 = JT, 10 = JNC, 12 = JNZ[*] 2바이트 명령어[*] 2바이트 명령어[*] 2바이트 명령어[*] 2바이트 명령어