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: 스택 구조의 명령어, 오퍼랜드가 스택에 저장되어 있는 경우
▶ 레지스터 주소지정방식
- 오퍼랜드가 레지스터에 저장되어 잇는 경우
→ 이처럼 주소지정방식을 사용하여 명령코드의 오퍼랜드 뿐만 아니라, 주기억장치의 데이터 주소를 지정한다.
'컴퓨터공학기초 개념 > 컴퓨터구조' 카테고리의 다른 글
20. 컴퓨터구조 - 프로그램과 프로그래밍 언어 (0) | 2021.08.17 |
---|---|
19. CPU 내부구조 - 입출력과 인터럽트 (0) | 2021.08.12 |
17. CPU 내부구조 - 마이크로 연산과 ALU (0) | 2021.08.12 |
16. CPU 내부구조 - CPU 설계방식 (0) | 2021.08.11 |
15. CPU 내부구조 - 명령어의 구조 (0) | 2021.08.10 |
댓글