본문 바로가기
컴퓨터공학기초 개념/컴퓨터구조

18. CPU 내부구조 - 명령어와 주소지정방식

by devraphy 2021. 8. 12.

0. 시작하기 전에

- 이전 포스팅까지 CPU가 어떻게 명령어를 처리하는지에 대해서 배우면서, 

- 명령어를 처리하기 위해 필요한 CPU 내부의 연산(마이크로 연산)에 대해 알아보았다. 

- 이번 포스팅에서는 마이크로 연산의 명령어는 어떻게 설계되며, 어떤 구조를 이루는지에 대해서 알아보자. 


1. 명령어를 설계하는 방법

- 마이크로 연산을 위한 명령어는 CPU 내부에서 사용된다. 

- 즉, 레지스터와 같은 하드웨어가 이해하는 명령어를 의미한다.

- 그러나 이를 사용하는 대상은 사람이기에 사람이 알아들을 수 있어야 한다. 

- 이러한 관점에서 명령어를 설계하는 방법에는 두가지가 있다.  

 

a) 자연어에 가까운 명령코드 

▶ 장점

- 프로그램의 소스코드 길이가 짧아진다.

→ 자연어는 함축적인 의미가 담겨있기에 짧은 길이로 많은 것을 표현할 수 있다.  

 

- 번역기의 설계가 용이하다. 

→ 사람이 알아 들을 수 있는 언어이기에, 번역을 하기가 편하다.

 

▶ 단점

- 자연어의 구조로 인해 오동작 및 예외처리가 복잡하다.

→ 자연어에 따라 구조가 다르고, 전달하는 의미상의 차이가 존재하기에 모든 예외를 처리하기가 힘들다.

 

- 하드웨어를 제어가 매우 복잡해진다.

→ 하드웨어의 측면에서 볼 때, 자연어를 이용한 하드웨어와의 소통은 매우 어렵다. 

→ 자연어를 하드웨어가 이해할 수 있는 명령어로 변환한다면, 명령어 길이는 매우 길어질 것이다. 

 

 

b) 기계 중심의 명령 코드 

▶ 장점

- 기계 중심의 언어를 사용하기 때문에 프로그래밍의 규칙 또는 표준을 만들 수 있다.

- 기계가 이해하기 쉬운 언어를 사용하기에, 명령어가 짧아지고 하드웨어 제어가 용이하다. 

 

▶단점

- 프로그래밍의 규칙이 많아진다.

- 프로그램의 소스코드 길이가 길어진다. 

- 번역기의 설계가 복잡해진다. 

 

 

c) 결론

- 이와 같은 이유로, 기계 중심의 명령코드를 작성한다.


2. 명령어의 분류

- 명령어는 실행 방식이나 순서를 기준으로 다음과 같이 분류된다.

 

▶ 순차 실행 명령

▶ 분기 명령

▶ 부함수 호출과 복기 명령

클릭하면 확대됩니다.


3. 명령어의 구성 형식 

- 이전 포스팅에서 다루었던 내용으로, 복습한다는 생각으로 읽어보자. 

▶ 명령 코드

 - 수행할 연산

 

▶ 오퍼랜드 주소

 - 연산의 대상이 되는 데이터의 주소값

 

▶ 주소지정방식 (= 주소지정모드)

 - 오퍼랜드가 저장된 위치를 인덱싱 하는 방식

 

- 이전 포스팅에서는 주소지정방식이라는 것을 배운적이 없다. 주소지정방식이란 무엇일까?

 


4. 주소지정방식(addressing mode)

a) 개념

- 명령 코드에는 오퍼랜드가 들어있다. 

- 이 오퍼랜드의 주소값을 명령코드에 엮는 방식이 주소지정방식이다. 

- 주소지정방식은 명령어의 수와 길이를 줄이기 위한 세계적인 표준화 기법이다. 

 

b) 주소값을 표현하는 방식

- 주소라는 것은 실제 데이터가 저장되어 있는 메모리의 위치를 의미한다. 

- 주소는 16진수로 구성된다. 

- 주소는 다음 두가지로 표현될 수 있다.

 

▶ 절대 주소(= 절대 번지, 포인터)

- 메모리의 주소값을 의미한다. 모든 데이터는 주소값을 가지고 있다. 

 

▶ 기호 주소(= 기호 번지)

- 데이터에 할당된 변수명을 의미한다. 

 

 

c) 주소지정방식의 종류

- 오퍼랜드는 주기억장치에 저장되어있는 데이터의 절대주소를 가지고 있다. 

- 절대주소를 이용해 주기억장치에 접근할 때, 효율적인 접근을 위해 주소지정방식의 종류가 분류된다. 

 

▶ 즉시(immediate) 주소지정방식

- 주기억장치에 접근할 필요가 없는 주소

- 오퍼랜드 자체가 실제 값을 표현한다. 

 

▶ 직접(direct) 주소지정방식

- 주기억장치에 한번 접근해야하는 주소 

- 해당 주소값에서 데이터를 찾아오는 경우

 

▶ 간접(indirect) 주소지정방식

- 주기억장치에 두번 접근해야하는 주소

- 해당 주소값에 데이터가 아닌 다른 주소값을 보유하고 있는 경우, 다른 주소값으로 한번 더 이동하여 데이터를 찾는다.  

 

▶ 계산에 의한 주소지정방식

- 주기억장치에 한번 접근해야하는 주소 

 

▶ 암시적(= 묵시적, implied) 주소지정방식

- 명령어에 오퍼랜드가 포함되어 있지 않은 경우를 의미한다. 

- NOP(= no operation): 전송이 이동과 같이 오퍼랜드가 필요없는 연산에서 사용되는 명령어 

- INC: 누산기(Accumulator)의 명령어

- ADD: 스택 구조의 명령어, 오퍼랜드가 스택에 저장되어 있는 경우

 

▶ 레지스터 주소지정방식

- 오퍼랜드가 레지스터에 저장되어 잇는 경우 

 

 

→ 이처럼 주소지정방식을 사용하여 명령코드의 오퍼랜드 뿐만 아니라, 주기억장치의 데이터 주소를 지정한다. 


 

댓글