* Design Principle
- smaller is faster : 작은 것일 수록 빠르다
- regularity : 단순한 일을 반복 실행
- Good common part : 항상 수행되는 일에 걸리는 시간ㅇ르 단축
- Good design demands compromise(타협)
* Controller 결함
- CPU결함. 따라서, Controller는 잘 만들어야 한다.
- 이는 ISA와 밀접한 연관 관계를 같는다.
> 컴퓨터에서 어떤 명령이 수행될 수 있는 가를 알려준다.
> 컴퓨터를 구현하기 위해서 어떤 하드웨어 기능이 필요한가를 알려준다.
* 명령 표현 형식
- 각각의 명령을 이진수로 어떻게 표현되는가를 규정하는 방법
- 하나의 명령 = "연산조작(operation)" + "연산의 대상(operand)" = "instruction word"
- "즉치" : 상수를 대상으로 연산을 수행할 수 있게 하는 오퍼렌드의 한 종류
- Field : 하나의 명령을 표현하기 위한 영역 / Field를 어떻게 나누는 가를 명령표현 방식이라고 한다.
※ 앞으로의 설명은 명령의 길이가 고정된 "고정장"에서의 명령형식에 대해 설명
> 명령어를 Fetch하기 위해 Memory에 가는 횟수를 동일하게 맞춘다.
1) R형 : register를 이용하여 명령을 수행 / [op][rs][rt][rd][ aux ] // aux : 부수 정보
2) I형 : 즉치 값 또는 dpl을 사용하여 명령을 즉시 수행 / [op][rs][rt][ imm / dpl ]
3) A형 : 메모리를 이용하여 명령 수행 / [op][ addr ]
- Field의 분배
1) op : log2[명령 집합의 크기]
2) register(rs,rt,rd) : log2[레지스터의 개수]
3) aux, imm/dpl, addr : (명령어 길이) - (다른 필드의 전체 비트 수)
ex)
R형 [op(6)][rs(5)][rt(5)][rd(5)][ aux(11) ]
I형 [op(6)][rs(5)][rt(5)][ imm/dpl(16) ]
A형 [op(6)][ addr(26) ]
> operation set의 크기 : 2^6 = 64개
> 총 명령어의 개수 = 오퍼레이션의 종류 * 가능한 오퍼랜드의 개수
> register의 개수 : 2^5 = 32개
> 찾아 갈 수 있는 Memory register 개수 : 2^26 = 64M(bytes)
> 고정장 길이 = 4bytes
※ 어셈블리어 : 기계어 프로그램을 표현하는 방법
eg) addr r1, r2, r3 // r1 = r2 + r3 [add][r2][r3][r1][0000000]
* 명령집합
- 산술 및 논리 연산 명령, 데이터 이동 명령, 분기 명령으로 구분
1) 산술 및 논리연산 명령 ( R형, I형 )
- 명령어 표를 보고 여러 사실을 유추 가능해야 한다.
※ shift 명령
- sla, sll > 왼쪽으로 imm값 만큼 이동 후 빈 공간을 0 으로 채운다
- sra > 오른쪽으로 imm값 만큼 이동 후 가장 왼쪽의 bit을 확장한다.
- sla > 왼쪽으로 imm값 만큼 이동 후 빈 공간을 0으로 채운다.
2) 데이터 이동명령
- 레지스터간의 이동, "메모리에서 레지스터간"의 이동, 메모리와 입출력 기기간의 이동으로 나뉜다.
- memory > register : load instruction
- register > memory : store instruction
- 전형적인 데이터 이동 명령
- I 형의 이동 명령의 경우 [op][rs][rt][ dpl ]
> rs + dpl = 메모리 주소
> rt = 데이터 저장, 출력 레지스터의 위치
3) 분기명령
- PC의 값을 변경한다.
* 주소 지정 방식
- 데이터나 명령이 저장되어 있는 장소를 지정하는 것
- Compiler 입장에서는 다양한게 좋지만, CPU입장에서는 cycle time이 증가하게 된다.
- 주소 지정 방식을 단순화시켜 사이클 타임을 단순화시키는 방향으로 발전
- 종류
1) 즉치 주소 지정 방식 : imm
2) 베이스 상대 주소 지정 방식 : reg + dpl
3) 레지스터 주소 지정 방식 : reg
4) PC 상대 주소 지정 방식 : PC + 4 + dpl // PC + 4
* Zero register
- 항상 0을 유지하는 register (r0)
- 메모리에 가지 않아도 데이터를 저장
ex) addi r1, r0, 28 ; // r1에 28을 저장
eq r1, r0, r1; // r1 xor r0 값을 r1에 저장(보수)