CS/컴퓨터구조

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

happy_life 2022. 10. 10. 22:42

명령어 집합은 피연산자의 수에 따라 나뉘기도 합니다. 또한 피연산자의 수에 따라 컴퓨터 구조도 달라집니다. 스택, 누산기, 범용 레지스터 컴퓨터로 구분할 수 있는데, 각각은 명령어를 실행할 때의 트래픽 byte수가 다릅니다. 이번 포스팅에서는 이 세가지를 상세히 비교하며 이해해보도록 하겠습니다.

피연산자의 수와 명령어 집합

1. 명령어 구성

연산 부호(opcode): 어떤 연산을 수행할 것인가

피연산자(operand): 연산의 대상이 되는 데이터들의 위치 또는 값의 정보

 

2. 피연산자 수에 따른 컴퓨터 구조 종류

1) 스택 컴퓨터

2) 누산기 컴퓨터

3) 범용 레지스터 컴퓨터

 

3. 컴퓨터 성능에 영향을 미치는 cpu-M 병목 트래픽

M-M 컴퓨터에서 트래픽

 

명령어 인출: 7 * 5byte = 35 byte

데이터 전송: mul/ add 명령어당 (2개 (피연산자 4byte씩) + 1개(결과 데이터 저장)) = 3 * 4 byte이고 mul, add가 총 5개이므로 12 * 5 = 60byte

mov는 (1개 꺼내고 + 1개를 저장) = 2 * 4byte = 8 byte인데 총 2개이므로 16byte

35 + 76 = 111byte

 

 

 

스택 컴퓨터에서의 명령어 실행

1. 스택 컴퓨터의 특징

1) CPU 내의 데이터 저장소로 스택을 사용합니다.

2) 다수의 데이터를 저장가능 합니다.

3) 저장할 데이터의 개수가 스택 원소보다 큰 경우 삭제 policy가 필요합니다.

4) 대부분의 연산(add/mul 등)에서 피연산자가 필요하지 않습니다. ( 스택의 맨위, 그 아래 이므로)

5) push/pop명령어를 사용합니다. push는 lda의 역할, pop은 sta의 역할을 합니다.

 

2. cpu-M 데이터 트래픽 분석

2개의 명령어가 있는데, 다음과 같습니다. 이를 계산하면 총 54byte입니다.

스택 컴퓨터

 

byte계산

 

 

 

누산기 컴퓨터에서의 명령어 실행

1. 누산기 컴퓨터 특징

1) Acc 레지스터를 연산 관련 데이터 저장을 위한 유일한 장소로 활용합니다.

2) cpu 내에 하나의 레지스터만 존재합니다.

3) cpu 내 acc 레지스터를 묵시적 피연산자 필드로 사용합니다.

 

2. cpu-M 데이터 트래픽 분석

모든 명령어가 다음과 같습니다. 총 63byte입니다.

누산기 컴퓨터

 

byte

 

 

 

범용 레지스터 컴퓨터에서의 명령어 실행

1. 범용 레지스터 컴퓨터의 특징

1) 명령어의 피연산자로서 특정 레지스터를 명시하여 사용합니다.

 

2) 다수의 레지스터가 존재하여 스택, 누산기 처럼 암묵적인 피연산자를 갖지 않습니다. (특정 레지스터 사용)

 

3) 스택과 달리 모든 레지스터의 접근 시간이 동일합니다.

 

4) 2주소/3주소 명령어를 사용합니다.

 - 2주소 명령어: 피연산자가 2개로, 그 중 하나는 source & destination으로 사용합니다.

   명령어의 길이가 짧아집니다. (메모리 사용이 감소됨)

- 3주소 명령어: 피연산자 3개로, source 2개, destination 1개

   연산 후 source 값이 보존되지만, 명령어의 길이가 상대적으로 길어집니다.

 

5) 적재/저장 명령어 모델의 경우, 적재/저장 명령어만 메모리에 접근하도록 제한합니다.

   - 적재 명령어(load)는 데이터를 메모리에서 cpu 레지스터로 전송합니다.

   - 저장 명령어(store)는 데이터를 cpu 레지스터에서 메모리로 전송합니다. 

 

6) 연산 명령어의 피연산자로 메모리 주소를 사용할 수 없습니다.

 - 피연산자를 load한 이후에 연산이 가능합니다.

 - 레지스터 주소 길이는 메모리주소보다 짧기 때문에 명령어 길이가 상대적으로 짧습니다.

 - 자주 쓰는 데이터를 레지스터에 두므로 cpu - 메모리간 데이터 트래픽이 줄어듭니다.

 

2. cpu-M 데이터 트래픽 분석

 

load/store 연산
mul/add연산
byte 계산

 

add와 mul은 레지스터간의 이동이믈 데이터 트래픽이 0이다.