Special Purpose Registers
- AR(Address Register): 메모리 주소 저장, size 12
- PC(Program Counter): 다음에 실행될 명령어의 주소 저장, size 12
- IR(Instruction Register): 지금 실행될 명령어 저장, size 16
- DR(Data Register): 데이터를 저장, size 16
- TR(Temporary Register): 임시 데이터 저장, size 16
- AC(Accumulator): 산술연산, AC <- AC + DR, size 16
Data units in CPU
- 이 그림을 그릴줄 알아야 함
- 7개의 레지스터가 버스를 통해서 서로 연결
- 데이터가 동시에 들어오면 안되기 때문에 MUX(multiplexer)를 통해 데이터를 보낼 레지스터 결정
- ex: S2 = 1 S1 = 1 S0 = 1이라면, Memory Unit으로 데이터가 흘러감
- ex: PC에 있는 값을 AR로 보내고 싶다면? S2, S1, S2를 각각 010으로 세팅하고 AR의 LD를 1로 세팅
- LD(load): 이 단자의 값이 1이면 버스를 통해 해당 레지스터로 데이터가 들어옴
- INR(increment): 이 단자의 값이 1이면 레지스터가 1 증가
- CLR(clear): 이 단자의 값이 1이면 레지스터 값이 0이 됌
- IR에는 레지스터 값이 변하면 안되므로 LD단자 밖에 없다
- Memory Unit의 주소를 Address 단자를 통해 AR이 결정한다
- E(overflow bit)
CPu Instruction Cycle
- Instruction Fetch
- 메모리에서 IR로 명령어를 가져옴
- Decode
- IR의 명령어 opcode를 알아냄
- Decide effective address, if MRI instruction
- 메모리로부터 effective address를 읽어들임 (if I bit = 1)
- Data Fetch, if necessary, if MRI instruction
- Execute
- decoded instruction을 실행
- Store result data, if necessary
- result data를 AC로부터 타겟 메모리 주소에 씀
예시로 보는 프로그램의 CPU단 실행 순서
- 프로그램의 아이콘을 클릭
- OS가 HDD(SSD)에서 해당 파일을 찾는다
- OS가 메인메모리에서 빈 공간을 찾는다
- OS가 프로그램의 첫 번째 명령어의 주소를 불러온다
- CPU가 PC값을 AR로 보낸다 (AR <- PC)
- CPU가 M[AR]의 값을 IR로 보내고 PC값을 증가 시킴 (IR <- M[AR], PC++)
- CPU가 IR에 저장된 명령어를 decode한다 (AR <- IR(0-11))
- CPU가 메인메모리에서 DR로 데이터를 이동시킨다 (DR <- M[AR])
- CPU가 adder와 AC를 이용해 ADD op를 실행시킨다 (AC <- AC+DR)