본문 바로가기
Computer Science/Computer Architecture

[컴퓨터 구조] 명령어집합, RISC와 CISC, 주소 지정 방식

by ggyongi 2024. 12. 25.
반응형

명령어 집합(Instruction set)

 

  • CPU가 이해하고 실행할 수 있는 명령어들의 집합
  • CPU의 사용 목적과 특성에 따라 정의되며, 소프트웨어가 하드웨어와 소통하는 인터페이스 역할
  • 명령어 집합에는 데이터 이동, 산술/논리 연산, 제어 명령 등 다양한 작업을 수행하기 위한 명령어가 포함
  • 어셈블리 코드 형태로 표현

 

*어셈블리 언어

인간이 읽고 작성할 수 있는 코드(C, JAVA, Python)와 컴퓨터가 이해할 수 있는 기계어(0 또는 1)의 중간 단계 언어.

데이터 이동, 레지스터 조작, 메모리 접근 등 하드웨어를 직접 제어.

특정 CPU 아키텍쳐(x86, ARM 등)에 종속적 -> 각각의 CPU 마다 어셈블리 언어 형태가 달라짐

 

명령어 형태

연산코드: 수행될 연산을 지정

예) 산술 연산, 데이터 이동, 제어 명령 등

 

오퍼랜드: 피연산자. 연산에 사용될 데이터 또는 데이터의 위치

예) 레지스터, 메모리 주소, 특정 값

 

연산코드와 오퍼랜드로 구성되며 오퍼랜드 개수는 연산 코드에 따라 달라질 수 있다.

명령어 길이(비트) 역시 가변 길이로 구성되는 경우와 고정 길이로 구성되는 경우가 있다.(CPU에 따라)

가변 길이: 각 명령어 마다 명령어 길이가 다름.

고정 길이: 모든 명령어가 동일한 명령어 길이를 가짐.

 

명령어 예시

ADD R1, R2 -> R1 레지스터와 R2 레지스터의 데이터를 더한다.

명령어에 따라 오퍼랜드 개수가 달라진다.

명령어 종류

(1) 데이터 전송 명령어
데이터를 이동하는 명령.
예:
LOAD R1, 100 : 메모리 주소 100에서 데이터를 레지스터 R1로 로드.
STORE R1, 200 : 레지스터 R1의 데이터를 메모리 주소 200에 저장.


(2) 산술 및 논리 명령어
산술 연산(덧셈, 뺄셈 등)과 논리 연산(AND, OR 등)을 수행.
예:
ADD R1, R2 : R1과 R2의 값을 더함.
AND R1, R2 : R1과 R2의 비트를 AND 연산.


(3) 제어 명령어
프로그램 실행 순서를 변경하는 명령.
예:
JMP 400 : 프로그램을 주소 400으로 이동.
BEQ R1, R2, 500 : R1과 R2가 같으면 주소 500으로 이동.


(4) 입출력 명령어
외부 장치와 데이터를 교환.
예:
IN R1, 0xFF : 입력 장치 0xFF에서 데이터를 읽어 R1에 저장.
OUT R1, 0xFF : R1의 데이터를 출력 장치 0xFF로 보냄.

 

RISC와 CISC

 

(1) RISC (Reduced Instruction Set Computer)

  • 단순한 명령어로 설계된 명령어 집합.
  • 명령어 실행 속도가 빠르고 하드웨어가 단순.

(2) CISC (Complex Instruction Set Computer)

  • 복잡한 명령어로 설계된 명령어 집합

  • RISC는 간단한 명령어로 빠르고 효율적인 처리를 목표로 하며, CISC는 복잡한 명령어로 하드웨어 부담을 줄이고 소프트웨어 설계를 단순화한다.
  • 현대 CPU는 RISC와 CISC의 장점을 결합한 혼합 설계를 사용하는 경우가 많다.

 

명령어 비교 예시

 

고급언어의 a = (b + c)*d 연산을 각각의 방식으로 어셈블리어로 변환

 

RISC

LDR R1, [B]       ; 메모리 주소 B의 값을 R1 레지스터로 로드
LDR R2, [C]       ; 메모리 주소 C의 값을 R2 레지스터로 로드
ADD R3, R1, R2    ; R1 + R2 결과를 R3에 저장 (b + c)
LDR R4, [D]       ; 메모리 주소 D의 값을 R4 레지스터로 로드
MUL R5, R3, R4    ; R3 * R4 결과를 R5에 저장 ((b + c) * d)
STR R5, [A]       ; R5의 값을 메모리 주소 A에 저장

 

CISC

MOV AX, [B]        ; 메모리 주소 B의 값을 AX 레지스터로 로드
ADD AX, [C]        ; 메모리 주소 C의 값을 AX에 더함 (b + c)
IMUL AX, [D]       ; 메모리 주소 D의 값을 AX와 곱함 ((b + c) * d)
MOV [A], AX        ; AX의 값을 메모리 주소 A에 저장

 

 

주소 지정 방식

한편, 오퍼랜드에 값이 저장되는 방식은 다양하다.

 

 

1. 직접 주소 지정 방식

EA = A

가장 기본적인 방식으로, 오퍼랜드 필드의 내용이 데이터가 저장된 메모리의 실제 주소, 즉 유효주소가 된다.

장점: 데이터 인출을 위해 기억 장치에 1번만 접근

단점: 오퍼랜드 필드의 비트 수에 의해 지정할 수 있는 기억 장소의 수가 제한

 

2. 간접 주소 지정 방식

EA = (A)

오퍼랜드 내용이 실제 데이터의 주소를 저장한 다른 주소를 나타냄

장점: 주소를 동적으로 변경할 수 있어 유연성이 높음.

(데이터의 주소 바뀌어도 A의 주소 값만 바꾸면 되고 명령어를 변경할 필요가 없음)

단점: 기억 장치에 두번(주소를 읽기위해, 실제 데이터를 얻기위해) 접근해야돼서 속도가 느림

 

3. 즉시 주소 지정 방식

데이터가 명령어에 포함되어 있다. 즉, 오퍼랜드 필드의 내용이 실제 데이터이다.

장점: 데이터를 인출하기 위해 기억 장치에 접근할 필요가 없다, 빠르다

단점: 오퍼랜드 필드의 비트 수에 의해 값의 크기가 제한된다

 

4. 레지스터 주소 지정 방식

EA = R

데이터가 레지스터에 저장되어 있고, 오퍼랜드 내용이 레지스터 주소를 가리킴.

장점: 기억 장치에 접근할 필요가 없어 속도가 빠름(기억 장치 접근 속도보다 레지스터 접근 속도가 훨씬 빠르다)

단점: 데이터를 저장할 수 있는 공간이 CPU내부의 레지스터로 제한됨.

 

 

 

직접 주소 지정 방식:

LOAD R1, 100  ; 메모리 주소 100의 값을 R1에 로드
ADD R2, 100   ; 메모리 주소 100의 값을 R2에 더함
STORE 100, R3 ; R3의 값을 메모리 주소 100에 저장​
 
  • 데이터가 주소 100에 저장되어 있음.
  • 데이터 위치가 주소 200으로 변경되면, 모든 명령어에서 주소를 수정해야 함

간접 주소 지정 방식:

LOAD R1, (200) ; 주소 200에 저장된 실제 데이터의 주소로부터 값을 R1에 로드
ADD R2, (200)  ; 주소 200이 가리키는 데이터의 값을 R2에 더함
STORE (200), R3 ; 주소 200이 가리키는 위치에 R3의 값을 저장
 
  • 주소 200에는 실제 데이터가 저장된 주소(예: 300)가 들어 있음.
  • 데이터 위치가 300 → 400으로 변경될 경우 주소 200의 값만 수정하면 됨. (200에 400 저장)
 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글