Embedded/이론

[Embedded] 명령어 구조

유제필 2022. 11. 15. 21:11

명령(Instruction)의 의미

명령이란 프로세서에 어떤 업무를 지시하는 것을 총칭하는 의미이다.

프로세서의는 내부는 많은 디지털 회로들로 구성되어 있다. 이러한 이유로 프로세서는 0과 1만을 이해할 수 있는 2진수로 명령을 내려야만

프로세서가 이해할 수 있다. 이러한 프로세서가 이해할 수 있는 언어, 즉 2진수로 표현한 언어를 기계어(Machine Language)라고 한다.

개발을 하는 개발자들은 사람이기 때문에 0과 1로 이루어진 2진수로 프로그램을 작성하기란 쉽지 않다.

그래서 임베디드 개발을 하기 위해 C언어 또는 어셈블리어를 이용하여 코드를 작성하고, 컴파일러와 같은 도구를 이용해 기계어로 변환한다.

임베디드 개발에서는 어셈블리어(Assembly Language)가 중요한 요소이다. 작은 규모의 프로젝트에서는 어셈블리어를 사용하지 않을 수 있지만

프로젝트의 규모가 클 수록 어셈블리어의 중요성이 나타나곤 한다.

프로세서 제조 회사에서 니모닉(Mnemonic) 코드를 제공한다. 니모닉 코드에 프로그래머가 이해하는 명령을 첨부한 것이 어셈블리어가 된다.

여기서 니모닉 코드(Mnemonic)란 단어의 뜻으로 보면 연상기호 라는 뜻으로, ADD 5, SUB 10 등 사람이 알아보기 쉽도록 기호 등으로 나타낸 것을 말한다.

명령어(Instruction Set)의 구조

명령은 크게 OP코드(Operation Code)오퍼랜드(Operand)로 구성된다.

쉽게 말해 OP코드는 프로세서가 해야되는 동작, 오퍼랜드는 명령을 수행해야 할 대상을 말한다.

ADD A, B, C

ADD : OP코드로 덧셈의 명령을 나타낸다.
A : 오퍼랜드1로 결과 값을 저장할 레지스터를 나타낸다.
B : 오퍼랜드2로 덧셈의 기준이 되는 값을 나타낸다.
C : 오퍼랜드3으로 추가적으로 더할 값을 나타낸다.

위 코드는 어셈블리어의 덧셈 명령어인 ADD의 예이다.

3개의 오퍼랜드를 사용한 예제로 코드의 의미는 B레지스터에 C 레지스터를 더한 후 A레지스터에 값을 저장하라 라는 의미이다.

오피코드 뒤 오퍼랜드의 갯수에 따라 각각 명령어 형식이 달라지며,

3주소 명령어(Three-Address Instruction)

2주소 명령어(Two-Address Instruction)

1주소 명령어(One-Address Instruction)

0주소 명령어(Zero-Address Instruction)

로 나뉘어진다.3주소 명령어 형식과 2주소 명령어 형식은 저장할 레지스터가 있지만,

1주소 명령어 형식은 누산기(Accumulator)에 결과를 저장하고,

0주소 명령어 형식은 스택(Stack) 메모리의 스택 포인터(Stack Pointer)를 이용하여 명령을 수행한다.

명령어의 처리 과정

프로세스 내부에서 명령어는 3단계 순서로 처리된다. 각각 페치(FETCH), 디코드(DECODE), 실행(EXECUTE) 과정이라고 한다.

1.FETCH 과정

명령을 수행하기 위해 주기억 장치에 위치한 명령어를 프로세서로 읽어온다.프로그램 카운터(PC, Program Counter)가

수행해야 할 명령어의 메모리의 주소를 가지고 있다.

PC가 가리키는 주기억 장치에 있는 명령어를 명령 레지스터로 가져온다.

 

레지스터를 가져오기 위해 PC의 내용을 어드레스 레지스터(Address Register)로 보내고,

값은 어드레스 버스(Address Bus)로 구동된다.

그리고 주기억 장치에 저장되어 있는 명령이 데이터 버스(Data Bus)를 통해 명령

레지스터(Instruction Register)에 보관된다.

2. DECODE 과정

제어 장치(Control Unit)가 명령 레지스터 내에 있는 명령어들을 해석하고, 적절한 제어 신호를 연산 장치(ALU), 메모리 등에 보낸다.

3. EXCUTE 과정

EXCUTE 과정에서는 명령어의 종류에 따라 수행하는 동작이 다르며, 이런 동작은 4가지로 나뉜다.

a. 연산장치를 사용하는 명령어 : 연산 장치에서 해당 명령을 수행 후 결과를 명령어에 명시한 레지스터에 저장

b. 조건 분기 명령어 : 분기 조건을 만족하면 PC의 내용을 분기 주소로 변경

c. 무조건 분기 명령어 : PC의 내용을 분기 주소로 변경

d. 메모리 참조 명령어 : 참조하고자 하는 메모리의 주소를 데이터용 어드레스 레지스터로 보낸 후, 메모리의 내용을 데이터 입력 레지스터로 읽

어들여 명령어에 지정된 레지스터에 저장

마지막으로 위 3단계 모두 종료 후 분기 명령어가 아닐 경우 PC를 다음 수행할 주소로 바꾼다.

PC의 내용을 명령어의 길이만큼 더한 다음 다시 3단계의 과정을 반복한다.


CISC 구조와 RISC 구조

프로세서는 명령어의 집합의 구조와 특징에 따라 2가지로 분류할 수 있는데, 이 구조가 CISC 구조 또는 RISC 구조이다.

CISC(Complex Instruction Set Computer) 구조

CISC구조는 어셈블리 프로그래밍을 편리하게 하기 위해 여러 명령어들을 추가한 구조로, 복잡한 명령어 집합을 갖고 있는 CPU 아키텍처이다.

1980년대 이전에는 대부분 CISC 구조를 따랐으며, 대부분 CISC 구조를 사용했다.

CISC 구조는 제어 장치를 복잡하게 하여 명령어 간의 CPI가 크게 달라 현재는 거의 사용되지 않고 있다.

CISC 구조의 특징

1. 명령어의 수가 많으며 명령어의 길이가 가변적임

2. 주소 지정 방식이 다양함

3. 명령어 중 특별한 일을 처리하는 명령어가 있음

RISC(Reduced Instruction Set Computer) 구조

RISC는 명령어 개수와 주소 지정 방식을 최소화하여 제어 장치의 구조를 간단하게 구성한 프로세서 아키텍처를 말한다.

의미 그대로 CISC의 길고 복잡한 명령어들을 짧고 처리가 가능한 여러개의 명령어로 체계적이게 바꾼 것을 말한다.

1980년대 이전에는 CISC구조를 사용했다면, 1980년대부터 대부분 RISC 구조를 사용한다.

1980년대에서 부터 명령어 구조의 중심 설계 원리가 되고 있으며, 명령어 수를 줄여 프로세서 구조를 간단하고 빠르게 동작할 수 있도록 설계하고, 컴파일러의 효율성을 높여준다.

현재 많이 사용되는 대표적인 프로세서 ARM, MIPS, Power PC 등 대부분의 프로세서들이 RISC 구조로 설계되고 있다.

RISC 구조의 특징

1. 명령어 개수를 최소화하여 시스템을 작고 빠르게 함

2. 명령어의 길이가 고정되어 있어 해독하기 쉬움

3. 파이프라인(Pipeline)의 구성이 쉬움

4. 명령어와 주소 지정 방식을 최소화하여 제어 장치 구조를 간단하게 구현

'Embedded > 이론' 카테고리의 다른 글

[Embedded] ARM 구성 레지스터  (0) 2022.11.15
[Embedded] ARM 동작 모드와 레지스터  (0) 2022.11.15
[Embedded] ARM의 개요  (2) 2022.11.15
[Embedded] 임베디드 시스템의 메모리 종류  (0) 2022.11.15
[Embedded] Endian 구조  (0) 2022.11.15