YZ ZONE

[ 컴퓨터구조 ] 2.4 명령어 세트 본문

IT/컴퓨터구조

[ 컴퓨터구조 ] 2.4 명령어 세트

러블리YZ 2023. 2. 5. 14:16

명령어 세트(instruction set) ]

 명령어 세트란?
 CPU의 기능은 명령어들에 의해 결정
 명령어들의 종류와 수는 CPU마다 약간씩 다름
 명령어 세트 = 어떤 한 CPU를 위하여 정의되어 있는 명령어들의 집합

 명령어 세트 설계를 위해 결정되어야 할 사항들 

 연산 종류(operation repertoire)

 CPU가 수행할 연산들의 수와 종류 및 복잡도 

 데이터 형태(data type) > 3장에서 자세히

 연산을 수행할 데이터들의 형태, 데이터의 길이(비트 수), 수의 표현 방식 등 

 명령어 형식(instruction format)

 명령어의 길이, 오퍼랜드 필드들의 수와 길이,  

 주소지정 방식(addressing mode)

 오퍼랜드의 주소를 지정하는 방식

 [ 연산의 종류  ]

 기본적인 연산의 종류 

 데이터 전송

레지스터와 레지스터 간, 레지스터와 기억장치 간, 혹은 기억장치와 기억 장치 간에 데이터를 이동하는 동작

 산술 연산
덧셈, 뺄셈, 곱셈 및 나눗셈과 같은 기본적인 산술 연산들

 논리 연산
데이터의 각 비트들 간에 대한 AND, OR, NOT  exclusive-OR 연산

 입출력(I/O)
CPU와 외부 장치들 간의 데이터 이동을 위한 동작들

 프로그램 제어
명령어 실행 순서를 변경하는 연산들 

분기(branch), 서브루틴 호출(subroutine call)

[ 서브루틴 호출을 위한 명령어들  ] 

 CALL 명령어

 서브루틴을 호출(call)하는 명령어

 현재의 PC 내용을 스택에 저장하고 서브루틴의 시작 주소로 분기하는 명령어

 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)
현재의 명령어 실행이 완료된 후에 다음 명령어를 인출할 위치 지정 

분기 혹은 호출 명령어와 같이 실행 순서를 변경하는 경우에 필요 (순차 X)

 명령어 형식(instruction format)
 명령어 내 필드들의 수와 배치 방식 및 각 필드의 비트 수를 의미함

 필드(field)
 명령어의 각 구성 요소들에 소요되는 비트들의 그룹

 명령어의 길이
 단어(word) 길이
 [] 세 개의 필드들로 구성된 16-비트 명령어

[ 명령어 형식의 결정에서 고려항 사항들 ]

▣ 연산 코드 필드 길이 : 연산의 개수를 결정

[]4비트2^4 =16가지의연산정의가능
만약 연산 코드 필드가 5 비트로 늘어나면, 2^5 = 32 가지 연산들 정의 가  다른 필드의 길이가 감소
▣ 오퍼랜드 필드의 길이 : 오퍼랜드의 범위 결정

 오퍼랜드의 종류에 따라 범위가 달라짐

데이터 : 표현 가능한 수의 범위 결정

기억장치 주소 : CPU가 오퍼랜드 인출을 위하여 직접 주소를 지정할 수 있는 기억장치 용량 결정

레지스터 번호 : 데이터 저장에 사용될 수 있는 레지스터의 개수 결정

[ 오퍼랜드 필드 범위의 예 ]

▣ 오퍼랜드1은 레지스터 번호를 지정하고, 오퍼랜드2는 기억 장치 주소를 지정하는 경우

오퍼랜드1: 4비트16개의레지스터사용가능 

오퍼랜드2: 8비트기억장치의주소범위: 0255번지

▣ 두 개의 오퍼랜드들을 하나로 통합하여 사용하는 경우

 오퍼랜드가 2의 보수로 표현되는 데이터라면, 표현범위: -2048∼+2047

 오퍼랜드가 기억장치 주소라면,
2^12 = 4096 개의 기억장치 주소들 지정 가능

[ 오퍼랜드 수에 따른 명령어 분류 ]

 1-주소 명령어(one-address instruction)
 오퍼랜드를 한 개만 포함하는 명령어 (다른 한 오퍼랜드는 묵시적으로 AC가 됨)
[] ADD X                          ; AC<-AC + M[X]

 2-주소 명령어(two-address instruction) 

 두 개의 오퍼랜드를 포함하는 명령어

[] ADD R1, R2            ;R1 <- R1 + R2 

       MOV R1, R2           ;R1 <- R2 

       ADD R1,  X             ;R1 <- R1 + M[X] 

 3-주소 명령어(three-address instruction)

 세 개의 오퍼랜드들을 포함하는 명령어. 

[] ADD R1, R2, R3                   ; R1<-R2 + R3

 

 

 1-주소 명령어의 예 

▣ 길이가 16 비트인 1-주소 명령어에서 연산 코드가 5 비트인 경우의 명령어 형식을 정의하고, 주소지정 가능한 기억장치 용량을 결정하라

 명령어 형식(instruction format)

주소지정 가능한 기억장치 용량 : 211 = 2048 바이트

2-주소 명령어의 예

 2-주소 명령어 형식을 사용하는 16-비트 CPU에서 연산 코 드가 5 비트이고, 레지스터의 수는 8 개이다. (a) 두 오퍼랜드 들이 모두 레지스터 번호인 경우와, (b) 한 오퍼랜드는 기억 장치 주소인 경우의 명령어 형식을 정의하라

3-주소 명령어의 예

 

 

명령어 형식이 프로그래밍에 미치는 영향()

[] 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개의명령어만으로가능)

▣ 단점
 명령어의 길이가 증가한다
 명령어 해독 과정이 복잡해지고, 실행 시간이 길어진다