1. Addressing Mode
: Operand 어떻게 표시할 것인가. 데이터가 들어있는 위치(주소)를 어떻게 표시할 것이냐.
- EA: 유효 주소. Effective Address. 데이터가 저장된 기억장치의 실제 주소
- A: 명령어 내 주소 필드 내용(Operand 내용이 기억장치 주소)
- R: 명령어 내 레지스터 번호(Operand 내용이 레지스터 번호)
- (A): 기억 장치 A 번지의 내용
- (R): 레지스터 R의 내용
1.1 명령어의 operand에 data 포함
1.1.1 Implied Mode 묵시적 주소지정 방식
- 명령어에 주소를 지정하는 영역이 존재X. 이미 정해진 주소를 사용. (스택의 SP가 가리키는 주소부를 암시)
1.1.2 즉치 주소지정 방식
- instruciton(data) (not in 메모리)
- 데이터가 명령어에 포함되어 있는 방식
- 오퍼랜드의 필드 내용이 연산에 사용할 실제 데이터
- 용도: 프로그램에서 레지스터나 변수의 초기 값을 어떤 상수 값(constant value)으로 세트하는데 유용하게 사용
- 데이터를 인출하기 위해 기억장치를 액세스할 필요가 없음
- 상수 값의 크기가 오퍼랜드 필드의 비트 수에 의해 제한됨
ADD R1, #3
R1<-R1+#3
1.2. 데이터가 저장된 메모리의 주소를 지정
1.2.1 Direct Addressing 직접 주소 지정 방식
- instruction(메모리주소->메모리(data))
- EA=A
- 장: 데이터 인출을 위해 한 번의 기억장치 액세스만 필요
- 단: 연산 코드를 제외하고 남은 비트들만 주소 비트로 사용될 수 있으므로 직접 지정할 수 있는 기억 장소의 수가 제한됨.
ADD R1, (0x1111);
R1<-R1+M(0x111)
1.2.2 (Memory)Indirect Addressing 간접 주소 지정 방식
- instruction(메모리 주소->메모리(메모리주소->메모리(data)))
- EA=(A)
- 최대 기억장치 용량이 단어의 길이에 의하여 결정
- 주소 지정 가능한 기억장치 용량 확장
- 실행 사이클 동안에 두 번의 기억장치 액세스 필요
ADD R1, @(R2);
R1<-R1+M(M(R2))
- 명령어 형식에 간접비트 필요
-간접 주소 지정방식이므로 1
1.3 데이터가 저장된 register를 지정
1.3.1 Register Addressing 레지스터 주소지정 방식
- instruction(register(data))
- EA=R
- 주소 지정에 사용될 수 있는 레지스터들의 수=2^k개 (k는 R필드의 비트 수)
- 오퍼랜드 필드의 비트 수가 적어도 된다.
- 데이터 인출을 위해 기억 장치 액세스가 필요 없기 때문
- 데이터가 저장될 수 있는 공간이 CPU 내부 레지스터들로 제한됨
ADD R4, R3
R4 <- R4+R3
1.3.2 Register Indirect Addressing 레지스터 간접 주소 지정 방식
- instruction(register(메모리주소->메모리(data)))
- EA=(R)
- 주소 지정할 수 있는 기억장치 영역이 확장
- 레지스터 길이 =16bit라면, 주소 지정 영역=2^16=64Kbyte
- 레지스터 길이 =32bit라면, 주소 지정 영역=2^32=4G byte
- 구현이 상대적으로 어렵고 비용 상승
ADD R1, (R2);
R1 <- R1+M(R2)
1.3.3 Register Indirect Addressing with indexing 변위 지정 방식
- instruction(register(메모리주소값))+ instruction의 주소필드(더해서 읽을 주소 값) -> 메모리(더한값주소->(data))
- EA=A+(R)
- array 구조에 유용한 대신 많은 시간이 요구됨
사용 되는 레지스터에 따라 여러 종류의 변위 주소지정 방식 정의
1.3.3+ relative addressing mode 상대 주소지정 방식
1.3.3+ indexed addressing mode 인덱스 주소지정 방식
1.3.3+ base-register addressing mode 베이스-레지스터 주소지정 방식
1.3.? 이건뭐지
- instruction(register(메모리주소->메모리(메모리주소->메모리(data))))
2. Instructoin
2.1 Instructon Set
1) Register Type
- 연산이 Register의 데이터에서만 이루어지는 명령어
2) Data Load from Memory
- 연산에 필요한 데이터가 외부 메모리에 존재하여 메모리로부터 데이터를 읽는 동작이 필요한 명령어
3) Data Save to Memory
4) Jump(Branch)
- 명령어 진행 순서를 변경하는 명령어 (flow control)
- branch, subroutine call .etc
2.2 ALU (Arithmetic and Logic Unit)
2.3 Control Unit
2.3.1 정의
IR 에 의해 해석된 명령어 수행을 위해 CPU 내/외부 동작 제어를 위한 제어 신호를 발생하는 장치
2.3.2 기능
- OP code 해독
- 신호 제작
- 명령어 실행에 필요한 제어신호 발생시키기
- Micro Operation 초기화
2.3.3 구현 방식
1) 고정 배선 방식 (Hard-Wired)
- 하드웨어 고정회선. 모든 제어 로직을 FIX
- RISC (고정된 명령어 길이) 에서 주로 활용
- 하드웨어 회로로 제어신호를 생성하여 고속 처리
- 고가
- 오류 발생률 높음
2) S/W 방식 (Micro Programming)
- 소프트웨어적 제어신호 생성으로 저속
- Firmware 구조이므로 기능 개선 용이
- HW 단순
- 저가
- CISC에서 주로 활용
3. MU0-Execution Step
3.1 Fetch Instruction
- PC가 가리키는 데이터(명령어)를 읽어 IR에 넣겠다.
- PC -> Address bus -> memory -> data bus -> IR
3.2 Instruction Decode
- OP code를 분할해서 control signal을 만들겠다.
- 그동안 PC값은 ALU의 연산 기능을 이용하여 값 +1 하겠다.
3.3 Operand Fetch
- IR -> address bus -> memory -> LOAD라면 ACC , ADD라면 ALU
3.4 Execute Instruction
- 파란색 : ADD 명령일 경우의 CYCLE
- ALU와 ACC에 들어온 data에 대해 ALU에서 연산한 후에 ACC에 write back
- Memory -> data bus -> ALU,ACC / ALU -> ACC
- 핑크색: STORE 명령일 경우의 CYCLE
- IR -> Memory, ACC->Memory
3.5 STORE 중 Write BACK
- ALU -> ACC -> data bus -> Memory