컴퓨터 구조론 2장 [CPU의 구조와 기능 - 명령어 세트]
- CPU의 기능은 명령어들에 의하여 결정된다. 명령어들의 종류와 수는 CPU마다 약간씩 다르다.
- CPU를 위해 정의되어 있는 명령어들의 집합을 명령어 세트(Instruction set)라 한다.
명령어 세트를 설계하기 위한 사항
- 연산 종류(Operation repertoire) : CPU가 수행할 연산들의 수와 종류 및 복잡도
- 데이터 유형(Data type) : 연산이 수행될 데이터들의 유형, 즉, 데이터의 길이(비트 수)와 수의 표현 방식(정수, 부동소수점 수 )등
- 명령어 형식(Instructioon format) : 명령어의 길이, 오퍼랜드 필드들의 개수와 길이 등
- 주소지정 방식(addressing mode) : 오퍼랜드의 주소를 지정하는 방식
연산의 종류
CPU가 수행할 수 있는 연산(혹은 동작)들의 종류는 컴퓨터에 따라 매우 다양하다.
반드시 수행할 수 있어야 하는 기본 연산들
- 데이터 전송 : 레지스터와 레지스터 간, 레지스터와 기억장치 간, 혹은 기억장치와 기억장치 간에 데이터를 이동하는 동작이다.
- 산술 연산 : 덧셈, 뺄셈, 곱셈 및 나눗셈과 같은 기본적인 산술 연산들을 말한다. 이 연산들은 부호를 가진 정수들에 대해서는 물론이고, 부동소수점 수(floating-point number)에 대한 산술적 연산도 포함된다.
- 논리 연산 : 데이터의 각 비트들 간에 대한 AND, OR, NOT 및 exclusive-OR 등과 같은 논리 연산을 수행한다.
- 입출력(I/O) : CPU와 외부 장치들 간의 데이터 이동을 위한 동작들이 수행된다. 이를 위해서는 특수한 I/O 명령어들과 주소 지정 방식이 필요하다.
- 프로그램 제어 : 명령어 실행 순서를 변경하는 연산들이 필요하다. 이 분류의 연산들로는 분기(branch)와 서브루틴 호출(subroutine call) 등이 있다.
이 연산들을 처리하기 위해서는 두 가지의 기본적인 명령어들이 필요하다.- CALL 명령어 : 서브루틴을 호출(call)하는 명령어
- RET 명령어 : 서브루틴으로부터 원래 프로그램으로 복귀(return)시키는 명령어
CALL/RET 명령어의 마이크로 연산
CALL X 명령어에 대한 마이크로-연산
t0 : MBR ← PC
t1: MAR ← SP, PC ← X
t2: M[MAR] ← MBR, SP ← SP - 1
- 현재의 PC 내용(서브루틴 수행 완료 후에 복귀할 주소)을 SP가 지정하는 스 택의 최상위(top of stack: TOS)에 저장
- 만약 주소지정 단위가 바이트이고 저장될 주소는 16비트라면, SP ← SP – 2 로 변경
RET 명령어의 마이크로-연산
t0 : SP ← SP + 1
t1 : MAR ← SP
t2 : PC ← M[MAR]
명령어 형식
명령어
명령어는 CPU에 의해 실행될 때 제공해야 할 모든 정보를 포함하고 있어야 함 = 구성요소
명령어의 구성요소들
- 연산 코드(Operation Code)
- 수행될 연산을 지정해준다. (예: LOAD, ADD 등)
- 오퍼랜드(Operand)
- 연산을 수행하는 데 필요한 데이터 혹은 데이터의 주소를 나타낸다.
- 각 연산은 한 개 혹은 두 개의 입력 오퍼랜드들과 한 개의 결과 오퍼랜드를 가질 수 있다.
- 데이터는 CPU 레지스터, 주기억장치, 혹은 I/O 장치에 위치한다.
- 다음 명령어 주소(Next Instruction Address)
- 현재의 명령어 실행이 완료된 후에 다음 명령어를 인출할 위치를 나타낸다.
- 분기 혹은 호출 명령어와 같이 실행 순서를 변경하는 경우에 필요하다.
- 명령어 형식(instruction format)
- 명령어를 구성하는 필드의 종류와 개수, 배치 방식 및 필드 당 비트수를 정의한 형식
- 필드(field)
- 명령어의 각 구성 요소들에 소요되는 비트들의 그룹
- 명령어의 길이
- 단어(word) 길이
- ex) 세 개의 필드들로 구성된 16-비트 명령어
명령어 형식의 결정에서 고려항 사항들
연산 코드 필드 길이 : 연산의 개수를 결정
ex) 4비트→2^4 =16가지의연산정의가능
만약 연산 코드 필드가 5 비트로 늘어나면, 2^5 = 32 가지 연산들 정의 가능 → 다른 필드의 길이가 감소한다.
오퍼랜드 필드의 길이 : 오퍼랜드의 범위 결정
오퍼랜드의 종류에 따라 범위가 달라진다.
- 데이터 : 표현 가능한 수의 범위 결정된다.
- 기억장치 주소 : CPU가 오퍼랜드 인출을 위하여 직접 주소를 지정할 수 있는 기억장치 영역의 범위가 결정된다.
- 레지스터 번호 : 데이터 저장에 사용될 수 있는 내부 레지스터들의 수가 결정된다.
오퍼랜드 필드 범위의 예
오퍼랜드1은 레지스터 번호를 지정하고, 오퍼랜드2는 기억 장치 주소를 지정하는 경우
- 오퍼랜드1: 4비트→16개의레지스터사용가능
- 오퍼랜드2: 8비트→기억장치의주소범위: 0∼255번지
두 개의 오퍼랜드들을 하나로 통합하여 사용하는 경우
- 오퍼랜드가 2의 보수로 표현되는 데이터라면, 표현범위: -2048∼+2047
- 오퍼랜드가 기억장치 주소라면, 2^12 = 4096 개의 기억장치 주소들 지정 가능
오퍼랜드 수에 따른 명령어 분류
1-주소 명령어(one-address instruction)
- 오퍼랜드를 한 개만 포함하는 명령어 (다른 한 오퍼랜드는 묵시적으로 AC가 됨)
- ex) ADD X ; AC<-AC + M[X]
2-주소 명령어(two-address instruction)
두 개의 오퍼랜드를 포함하는 명령어
ex) ADD R1, R2 ;R1 <- R1 + R2
MOV R1, R2 ;R1 <- R2
ADD R1, X ;R1 <- R1 + M[X]
3-주소 명령어(three-address instruction)
- 세 개의 오퍼랜드들을 포함하는 명령어.
- ex) ADD R1, R2, R3 ; R1<-R2 + R3
1-주소 명령어의 예
- 길이가 16 비트인 1-주소 명령어에서 연산 코드가 5 비트인 경우의 명령어 형식을 정의하고, 주소지정 가능한 기억장치 용량을 결정하라
명령어 형식(instruction format)
주소지정 가능한 기억장치 용량 : 211 = 2048 바이트
2-주소 명령어의 예
2-주소 명령어 형식을 사용하는 16-비트 CPU에서 연산 코 드가 5 비트이고, 레지스터의 수는 8 개이다. (a) 두 오퍼랜드 들이 모두 레지스터 번호인 경우와, (b) 한 오퍼랜드는 기억 장치 주소인 경우의 명령어 형식을 정의하라
3-주소 명령어의 예
명령어 형식이 프로그래밍에 미치는 영향
명령어에 포함되는 오퍼랜드의 수에 따라 여러가지 명령어 형식들이 존재할 수 있는데, 이러한 형식은 프로그램의 길이에 직접적인 영향을 미친다.
ex) X = (A + B) x (C - D) 계산을 위한 어셈블리 프로그램 작성
아래와 같은 니모닉을 가진 명령어들을 사용한다.
- ADD :덧셈
- SUB :뺄셈
- MUL :곱셈
- DIV : 나눗셈
- MOV :데이터이동
- LOAD :기억장치로부터데이터적재
- STOR :기억장치로데이터저장
1-주소 명령어를 사용한 프로그램
LOAD A ; AC ← M[A]
ADD B. ; AC ← AC + M[B]
STOR T ;M[T]←AC
LOAD C ; AC ← M[C]
SUB D ; AC ← AC - M[D]
MUL T ; AC ← AC × M[T]
STOR X ;M[X]←AC
- 단, M[A]는 기억장치 A번지의 내용, T는 기억장치 내 임시 저장장소 의 주소
- 프로그램의 길이 = 7 (7개 명령어 사용)
2-주소 명령어를 사용한 프로그램
MOV R1, A ; R1 ← M[A]
ADD R1, B ; R1 ← R1 + M[B]
MOV R2, C ; R2 ← M[C]
SUB R2, D ; R2 ← R2 - M[D]
MUL R1, R2 ; R1 ← R1 × R2
MOV X, R1 ; M[X] ← R1
- 프로그램의 길이 = 6 (레지스터 번호를 포함)
3-주소 명령어를 사용한 프로그램
ADD R1, A, B ; R1 ← M[A] + M[B]
SUB R2, C, D ; R2 ← M[C] - M[D]
MUL X, R1, R2 ; M[X] ← R1 × R2
- 프로그램의길이= 3 (3개의명령어만으로가능)
단점
-
- 3주소 명령어를 사용하면 프로그램이 가장 짧아진다는 장점이 있다. 그러나 레지스터의 수와 기억장치의 용량이 고정된 상태에서 이 명령어 형식을 사용하면 명령어 비트 수가 늘어나게 된다.
- 결과적으로 프로그램의 길이는 줄어들지만 프로그램을 저장하기 위한 기억장치 용량은 별로 줄어들지 않으며, 명령어 해독 과정이 더 복잡해지는 단점도 있다.
Reference
컴퓨터 구조 개정 5판
https://yz-zone.tistory.com/68
[ 컴퓨터구조 ] 2.4 명령어 세트
[ 명령어 세트(instruction set) ] ▣ 명령어 세트란? ▪ CPU의 기능은 명령어들에 의해 결정 ▪ 명령어들의 종류와 수는 CPU마다 약간씩 다름 ▪ 명령어 세트 = 어떤 한 CPU를 위하여 정의되어 있는 명령
yz-zone.tistory.com