배경지식: 지난 포스팅에서 명령어 코드의 구조를 확인했다.
우리의 목적은 컴퓨터를 설계하는 방법을 아는 것이다.
그러기 위해서는 컴퓨터구조를 알아야 한다고 했고,
그 컴퓨터 구조는 세가지로 정의된다고 했다.
ⓐ 내부 레지스터
- 사용할 하드웨어 자원을 정의하기
ⓑ instruction set
- 가능한 명령어 집합을 정의하기
ⓒ control unit
- 정의된 명령어들이 하드웨어 리소스상에서 제대로 작동하게끔 설계하기
위 세가지를 정의, 설계해야 컴퓨터가 이루어진다.
그 중에서 오늘은 ⓑ에 해당하는 insutrction set을 정의하는 모습을 볼 것이다.
즉, 컴퓨터가 수행하는 명령어를 정의하는 것인데,
그러한 명령어는 어떻게 정의해두어야할까?
16비트 컴퓨터의 instruction format
16비트 컴퓨터에서 명령어의 형태는 세가지로 분류할 수 있다.
(16비트 컴퓨터의 기본 instruction format 세가지이다.)
1. memory-reference instruction
▶ Opcode는 000에서 110까지의 값만 가진다.
▶ operand가 필요한 instruction이다.
▶ operation code 부분은 1 1 1이 아니다. (3번 i/o명령어와 겹치기 때문)
이 포스팅에서 공부했던 기본적인 명령어 형식과 동일하다.
혹시 이런 명령어구조가 낮설다면 이 내용 먼저 공부해야 한다.
2. register-reference instruction
▶ Opcode는 111이고 최상위비트는 0이다.
▶ operand를 필요로 하지 않는 instruction이다.
▶ 최상위 네비트가 0 1 1 1이다.
3. input-output insturction
▶ Opcode는 111이고 최상위비트는 1이다.
▶ operand를 필요로 하지 않는 instruction이다.
▶ 최상위 네비트가 1 1 1 1이다.
1번에 있는 memory-reference instruction은 operand가 필요한 instuction이고,
2번, 3번에 있는 register-reference, input-output instruction은 operand가 필요하지 않은 insturction이다. 밑에서 자세히 보면 알겠지만, 두번째 세번째는 clear, complement, circulate, input과 output 등 피연산자가 필요없는 연산임을 단번에 확인할 수 있다.
이렇게, 16비트 컴퓨터에서는 3분류의 기본 instruction format이 있다는 것을 알게되었다.
그럼 이제부터, 각각에 해당하는 명령어는 무엇이 있는지 자세히 확인해보자.
16비트 컴퓨터의 instructions
위 표를 보면 실선을 통해 세분류가 되어있는데, 차례대로 1. memory-reference instruction, 2. register-reference instruction, 3. input-output insturction에 해당한다. 무슨 명령어인지는 잘 설명되어있다.
한번 더 유의해야 할 것은 표에서 Hexadecimal code라고 나와있는 부분이다. 어려운 건 아니고 그냥 명령어 코드를 16진수(Hexadecimal)로 표현한 것이다. 눈여겨보아야 할 것은 가장 최상위 비트 4개이다. 즉, 저 16진법 표기에서 첫번째 숫자에 잠시 집중해보자.
1. memory-reference instruction
보면 최상위 16진법 문자에 7이나 F는 없는 모양새다.
만약 최상위 16진법 문자가 7이면, 최상위비트 4개가 0111이라는 것인데, 그럼 memory-reference 명령어 코드가 아니라 register-reference 명령어 코드다.
또 만약 최상위 16진법 문자가 F라면, 최상위비트 4개가 1111이라는 것인데, 그럼 역시 memory-reference 명령어 코드가 아니라 I/O 명령어 코드다.
2. register-reference instruction
최상위 16진법 문자가 죄다 7이다.
왜냐하면, register-reference 명령어 코드의 형식 자체가, 최상위 비트 4개가 0 1 1 1 이기 때문이다.
3. input-output instruction
최상위 16진법 문자가 죄다 F이다.
왜냐하면, I/O명령어 코드의 형식 자체가, 최상위 비트 4개가 1 1 1 1 이기 때문이다.
그럼 그게 과연 잘 정의된 insturction일까?
명령어 집합을 정의했는데 과연 잘 정의한 건지 아리송할 수 있다.
컴퓨터에 정의된 명령어집합이 다음 조건에 부합할 때, 정의된 명령어집합이 complete하다고 말할 수 있다.
▶ arithmetic, logic, shift 명령이 정의되어야 함
▶ memory, processor register로 정보를 전송하거나 가져오는 명령이 정의되어야 함 (load, store 등)
▶ control 명령이 정의되어야 함 (모든 명령은 무조건 순차적으로 진행되는 것이 아니라 조건에 따라 수행되므로) (branch나, Increment and skip if zero처럼 조건이 붙은 명령)
▶ input, output 명령이 정의되어야 함
잘 생각해보면 위에 정의한 명령어들은 이 네가지를 만족시키므로 complete한 instuction set이라고 말할 수 있다.
끝으로..
컴퓨터를 설계하기 위해서는 1.레지스터를 정의해야하고, 2.명령어집합을 정의해야 한다고 누누히 말했다. 그리고 그 하드워어 자원(레지스터)상에서 정의된 명령어가 제대로 실행될 수 있도록 3.Control unit을 잘 설계해야 한다.
이번 포스팅에서는 이중 하나, '명령어 집합을 정의하는 것'이 어떤 의미인지 간단히 확인했다.
그럼 지금까지 레지스터 정의하는 것과 명령어집합 정의하는 것을 보았으니..
다음 포스팅에서는 Control unit 설계에 관한 내용을 다루겠다.
'컴퓨터구조 & OS' 카테고리의 다른 글
[컴퓨터구조] 16비트 컴퓨터 설계하기 - Instruction Cycles (2) | 2021.10.15 |
---|---|
[컴퓨터구조] 16비트 컴퓨터 설계하기 - Control unit 설계 (0) | 2021.10.14 |
[컴퓨터구조] 16비트 컴퓨터 설계하기 - 레지스터를 정의하자 (0) | 2021.10.13 |
[컴퓨터구조] 16비트 컴퓨터 설계하기 - 명령어 코드의 구조 | Instruction Codes (0) | 2021.10.12 |
[컴퓨터구조] Shift Micro-operations | 컴퓨터의 shift 연산 구조 | 하드웨어 (2) | 2021.10.12 |