CS/Computer Architecture

[컴퓨터구조] 5-2. Computer Instructions

F12:) 2023. 9. 26. 07:57

이전 글에서 우리는 컴퓨터 구조는 3가지로 이루어져있고, 그 중 Instruction Codes에 대해서 다뤘다.

이번 글에서는 그러한 Instruction Codes를 통해서 컴퓨터가 명령어를 인식하게 되는 방법을 알아보려고 한다.

 


지금 계속 설명하고 있는 컴퓨터 구조는 Basic Computer라고 불리는 'Computer System Architecture'의 저자 M.Morris Mano가 설계한 16비트 컴퓨터이다. 이를 꼭 기억해두면서 진행한다.

 

 

컴퓨터의 3가지 기본 Instruction Format

우리는 이전 글에서, Instruction format이 어떠한 형식으로 되어있는 지를 알아보았다. 간단히 다시 설명해보면, 16비트 컴퓨터 기준으로 아래와 같은 형태를 띈다.

마지막 비트는 Address Mode를 나타내고, direct와 indirect로 나타냈었다. opcode는 insturciton의 수행 명령어이다. Address은 operation을 진행하기 위해 필요한 operand의 주소를 가리킨다. (이 부분에 대한 자세한 설명이 필요하면 이전 글을 참고하자.)

 

그런데 만약 INC, CLR와 같은 operand가 필요 없는 연산은 어떻게 될까?? 그럴 때를 대비해서 우리는 Instruction format을 위와 같이 지정하지 않고, 다른 방식을 통해서 여러 연산을 진행하게 한다.

 

1. memory-reference insturction

지금까지 봐왔던, Instruction format이다. 가장 마지막 1비트는 주소 모드, 그 위의 3비트는 opcode, 나머지 12비트는 주소를 나타냈다. 하단의 2, 3번을 보면 알겠지만, 최하위의 비트가 0111, 1111이면 안되므로 Address Mode를 나타내는 최하위 1비트를 제외하고 하위 3비트 즉, 12번째부터 14번째까지는 000부터 110까지 총 7개의 연산을 가질 수 있다.

memory-reference instruction

 

2. register-reference instruction

register-reference instruction

이 format에서는 최하위 4비트를 고정한다. 즉, 최하위의 4비트가 0111이면 register reference instruction을 의미한다는 것이다. register reference instruction에도 많은 종류가 있다. 이러한 종류는 Address 부분에서 나타낸다.

 

3. Input-Output Instruction

Input-Output Instruction

2번과 비슷한 맥락으로 최하위 4비트가 1111이 되면 input-output instruction을 의미한다. 마찬가지로 Address 부분에는 operand가 필요 없으므로, input-output instruction의 종류에 대해 더 자세히 나타낸다.

 


 

그럼 최하위 4비트로 나타나지는 값들을 보고, 어떤 연산을 수행할지 나타내기 위해서는 insturction을 명시해놓은 표가 존재해야한다. 이 책에서는 아래와 같은 표를 제시하고 있다.

이 표는 memory-reference instruction에 대한 표이다. 최하위 비트로 address mode를 나타내고 그 다음 3비트가 000부터 110까지 표현할 수 있으므로, 총 7개의 instruction이 보이는 모습이다.

 

왜 110까지만 표현할 수 있는가? 라고 생각할 수 있다. 우리는 register-reference와 input-output instruction에 대해서 위에서 봤다. 그 때, 최하위 4개의 비트로 register인지 input-output인지를 나타내는 것이었다. 만약 memory-reference에서 111까지 나타내게 되면 최하위 비트 4개로 1111도 가능하고, 0111도 가능하다.

 

즉, memory-reference instruction에서 register-reference instruction과 Input-ouput instruction을 표현하게 되므로 이렇게 되면 2번과 3번을 표현할 수 없다.

 

따라서, 우리는 memory-reference instruction에서 최하위 비트 1개를 제외한 최하위 비트 3개를 000부터 110까지만 표현하게 하였다.

 


다음은 register-reference instruction에 대해서 알아보자. 

앞에서도 언급했듯이, register-reference에서는 최하위 4비트가 0111을 나타낸다. 그 후, 나머지 12비트로 instruction의 세부 기능을 나타내게 된다. 그 표가 바로 위의 표와 같다. 여기에 있는 instruction은 operand 즉, 피연산자가 필요없는 연산이다.

 

여기서 궁금점이 하나 든다. 나머지 12비트로 표현할 수 있는 경우의 수는 2^12=4096개이다. 그런데 왜 여기서는 12가지밖에 없을까?

여기에 대한 답은 control unit을 배울 때, 더 자세히 느낄 수 있다. 잠깐 설명하자면, control unit은 각 비트 자리의 수가 1일 때의 경우로 나누게 된다.

 

즉, 최상위 비트가 1일 때, 2번재 비트가 1일때 등... 이런식으로 12비트 중에서 1인 비트는 오로지 단 한개여야 한다는 것이다. 이러한 형식을 유지하기 위해 register-reference에서도 12비트 중 비트의 값이 1인 비트가 딱 한개만 되게 만들어준 것이다.

 


마지막 Input-ouput instruction에 대해서 보자.

최하위 비트 4개가 모두 1인 1111의 형태를 띄게 되면 우리는 input-ouput instruction을 수행할 것이다. 수행되는 것들은 위와 같다.

(여기서는 왜 12가지가 아닌지 모르겠지만, 우선 넘어가고 차후 알게되면 수정하겠다.)

 

 

 

 


 

그렇다면 insturction을 아무렇게나 정의해서 짠하고 발표하면 그 instruction이 정말 잘 정의된 instruction이라고 할 수 있을까?? LD와 같은 기본적인 instruction도 없는데 말이다.

 

그래서 우리는 complete한 instruction set을 정의한다.

 

다음 4가지를 충족하였을 때, 우리는 이 insturction set이 complete하다고 말한다.

 

1. 산술(Arithmetic), 논리(Logic), 이동(Shift) 연산이 정의되어있어야 한다. 우리가 이전에 다뤘던 마이크로연산과 같다.

   ex) Shift, Rotate...

 

2. 메모리와 CPU사이에 정보를 이동하는 insturction이 존재해야 한다.

   ex) Load, Store...

 

3. 상태를 확인하고, 각 상황에 맞게 instruction을 control하는 instruction이 있어야 한다.

   ex) ISZ, BSA (이 명령어에 대한 부분은 control unit에서 더 자세히 다룬다)

 

4. input, output의 instruction이 정의되어 있어야한다.

 

 

이 4가지를 모두 만족시킨 위의 instruction set은 어느정도 complete하다고 말할 수 있다.


이렇게 우리는 컴퓨터 구조를 구성하는 요소 3가지 Instruction condes, 내부 register, control unit 중, instruction codes를 다뤘다.

다음 글에서는 내부 register에 대해 알아보자.