CS/컴퓨터구조

[컴퓨터구조] 명령어 집합

happy_life 2022. 10. 6. 14:10

어떤 프로그램과 그 프로그램을 수행할 컴퓨터 하드웨어 사이의 인터페이스에 대한 완전한 정의 혹은 명세를 ISA(명령어 집합 구조) 라고 합니다.  명령어를 만들 때는 다양한 특성을 고려해야 하는데, 거기엔 형태, 피연산자 수, 명령어 길이, 각 필드 길이 등 다양한 특성이 있습니다.

명령어의 특성

1. 형태

명령어는 특성에 맞는 형태(서식) 정의가 필요합니다. 따라서 명령어의 형태에 영향을 미치는 요인들을 고려해야합니다.

 

 

2. 피연산자수

명령어는 피연산자의 수에 따라 달라집니다. 

z = f(x, y)  # 두 변수 x,y를 연산한 후 결과값 z를 생성하는 함수 f를 의미한다.

f: 명령어(연산 부호, opcode)

x, y, z : 피연산자(operand)로서, 데이터 위치(레지스터/ 메모리 주소)나 값을 포함하며 주소 필드라고 부릅니다.

 

피연산자 수에 따른 명령어 종류로는 다양한 것들이 있는데 이 중 몇가지만 살펴보겠습니다. halt 라는 명령어는 프로그램을 정지시키는 것으로 피연산자의 수가 0개 입니다. add r1, r2, r3는 r1에 r2, r3의 더하기 연산 값을 넣으라는 명령어로 피연산자의 수가 3개입니다.

 

 

3. 명령어 길이

명령어 길이에 따라 명령어는 고정길이 명령어, 가변길이 명령어로 나뉩니다. 고정 길이 명령어는 해독의 용이성 등으로 프로세서, 하드웨어 디자인이 쉽지만, 짧은 길이의 명령어도 긴 명령어와 동일한 길이안에 있으므로 프로그램의 크기가 증가한다는 단점이 있습니다. 가변길이 명령어는 길이 최적화로 프로그램 크기가 감소합니다. 하지만 프로세스 하드웨어의 디자인이 어렵다는 단점이 있습니다.

 

4. 각 필드 길이

명령어는 각 필드의 길이를 고려햐야 합니다. 명령어는 연산부호와 피연산자로 구성되는 데 각각 필드의 길이에 따라 명령어가 달라지기 때문입니다.

 

 

 

명령어 집합 설계시 고려사항

1. 하드웨어 기술이나 컴퓨터 구성, 프로그래밍 언어, 컴파일러 기술, 플랫폼이 될 운영체제 등을 다 고려해야 합니다.

2. 명령어의 형식 즉, 연산 코드, 피연산자 수와 길이, 종류 등을 고려해야 합니다.

3. 피연산자의 형식을 고려해야 합니다. 피연산자의 데이터가 어떤 종류인지, 그 데이터를 어떻게 저장할 지 등을 고려해야 합니다.

4. 주소지정방식을 정해야합니다. 피연산자는 명령어 내부나, 레지스터, 메모리 등 다양한 위치에 있을 수 있으므로 주소 정보를 나타내는 방식에 대해 정보 명시가 필요합니다.

 

 

 

CPU가 수행하는 일

명령어 인출과 해독

데이터 인출

데이터 처리

데이터 저장

 

 

 

CPU의 기본 구성(폰 노이먼 모델)

1. ALU: 각종 산술/논리 연산들을 수행하는 회로로 이루어진 H/W 모듈

2. 레지스터: CPU 의 속도가 가장 빠른 기억장치

3. 제어장치: 프로그램 코드를 해석하고, 이를 실행하기 위한 제어신호들을 순차적으로 발생하는 H/W

4. CPU 내부버스: ALU와 레지스터들 간 이동하는 데이터와 제어장치로부터 발생되는 제어 신호를 이동시킵니다.

 

 

 

CPU 내 대표적 레지스터들

1. 프로그램 카운터(PC)

다음에 인출할 명령어 주소를 가지고 있는 레지스터입니다.

각 명령어가 인출된 후에는 자동적으로 일정 크기(한 명령어의 길이)만큼 증가합니다.

분기 명령어가 실행되는 경우는 목적지 경우로 갱신합니다.

 

2. 누산기(AC)

데이터를 일시적으로 저장하는 레지스터

 

3. 명령어 레지스터(IR)

가장 최근에 인출된 명령어 코드가 저장되어 있는 레지스터

 

4. 기억 주소 레지스터(MAR: Memory Address Register)

PC에 저장된 명령어 주소가 시스템 주소 버스로 출력되기 전에 일시적으로 저장되는 주소 레지스터

 

5. 기억 버퍼 레지스터(MBR: Memory Buffer Register)

기억장치에 쓰여질 데이터 혹은 기억장치로부터 읽힌 데이터를 일시적으로 저장하는 레지스터

 

대부분의 시스템에서 레지스터의 크기는 CPU가 한 번에 처리할 수 있는 데이터 비트 수(word의 길이)와 동일합니다.

 

 

 

데이터 적재/저장 명령어 실행과정

적재 

1. 프로세서는 데이터가 있는 메모리 주소를 MAR에 보낸다.

2. MAR이 지정하는 메모리 주소에 있는 데이터를 읽어 MBR에 저장한다.

3. 프로세서는 MBR에 저장된 데이터를 읽는다.

 

저장

1. 프로세서는 데이터를 저장할 메모리 주소를 MAR에 보낸다.

2. 프로세서는 데이터를 MBR에 저장한다.

3. 메모리는 MAR이 지정하는 위치에 MBR의 내용을 저장한다.

 

 

 

명령어 사이클

명령어 사이클은 인출 -> 실행 과정입니다.

 

1. 인출 사이클

 

MAR <- PC

MBR <- M[MAR], PC = PC + 1

IR <- MBR

 

2. 실행 사이클

 

CPU는 실행 사이클 동안 명령어 코드를 해독하고 그 결과에 따라 필요 연산들을 수행합니다. 수행되는 연산의 종류로는 전송, 처리, 제어, 입출력이 있습니다.