출처: IT CookBook, 컴퓨터 구조와 원리 2.0 제 12장 2012-2 서버취약점 분석 보충학습자료 중앙처리장치의 명령어와 어셈블리어 이해 출처: IT CookBook, 컴퓨터 구조와 원리 2.0 제 12장
학습목표 어셈블리 언어의 형식과 동작을 이해한다. 명령어 사이클을 이해한다. 명령어 집합을 이해하고 명령어의 형식에 따른 특징을 학습한다. 오퍼랜드 형태에 따라 0 ~ 3주소 명령어 프로그램을 학습한다.
목 차 어셈블리 프로그램의 이해 명령어 사이클 명령어 집합 축소 명령어 집합 컴퓨터의 개념
01 어셈블리 프로그램의 이해 고급 프로그래밍 언어(high level programming language) 컴퓨터 프로그래밍 언어는 표현하는 방식에 따라 고급 프로그래밍 언어, 저급 프로그래밍 언어가 있다. 고급 프로그래밍 언어(high level programming language) 문법이 인간의 언어 체계와 유사하여 프로그램을 작성하기가 용이하다. 컴파일러(compiler)나 인터프리터(interpreter)에 의해 기계어로 번역되어 실행된다. 대표적인 고급언어로는 FORTRAN, PASCAL, COBOL, C 언어 등이 있다. 컴파일과 인터프리터의 과정
01 어셈블리 프로그램의 이해 저급 프로그래밍 언어(low level programming language) 컴퓨터 내부에서 바로 처리 가능한 프로그래밍 언어로, 일반적으로 기계어와 어셈블리어를 일컫는다. 기계어(machine language) 컴퓨터가 직접 해독할 수 있는 2진 숫자(binary digit)로 표현한 언어다. 컴퓨터 명령 형식은 기계어이며, 컴퓨터는 이 기계 명령어를 해독하여 동작을 수행한다. 컴퓨터에 따라 고유의 명령 형식이 존재한다. 기계어 구조도 컴퓨터에 따라 구성된다. 기계어의 명령 단위는 명령 코드부와 주소부로 나누어진다. 기계어는 프로그램 작성이 어렵고, 많은 노력과 시간이 필요하다. 변수 para에 데이터 3을 저장하는 고급 언어의 표현 예. para = 3 컴파일러를 통해서 기계어로 변환하면 다음의 비트 형태로 표시할 수 있다. 11000111 00000110 00000000 00000000 00000011 00000000
01 어셈블리 프로그램의 이해 어셈블리(Assembly) 언어 기계어 프로그래밍의 비효율성을 극복하기 위하여 기계어의 비트 형식을 연상 코드(Mnemonic code)로 나타낸 것 어셈블리어는 기계어를 사람이 사용하는 언어에 가깝게 문자로 기호화해서 나타낸다. 기계어와 마찬가지로 중앙처리장치 형태에 따라 내용이 모두 다르므로 어셈블리언어로 작성한 프로그램들도 한 종류의 중앙처리장치에서만 동작하고 다른 종류에서는 실행되지 않는다. 어셈블러 어셈블리 언어를 번역하여 오브젝트 코드를 생성하는 프로그램이다. 예를 들어, 기계어 ‘para = 3’를 어셈블리어로 나타내면 ”MOV para, 3” 이 표현은 3이라는 데이터를 para라는 기억 장소로 이동시키라는 의미로 쉽게 이해할 수 있다. 어셈블리 과정은 컴파일 과정보다 빨리 수행되는데, 어셈블리어가 기계어 체계와 유사하기 때문이다.
01 어셈블리 프로그램의 이해 어셈블리 관련 명령어
01 어셈블리 프로그램의 이해 8086 어셈블리 언어의 명령 형식 레이블(Label) 부 연산(Operation) 부 JUMP, LOOP와 같은 순환이나 반복명령어에서 해당 레이블로 프로그램 카운터를 이동시킬 때 사용한다. 따라서 일반적인 명령어에서는 생략된다. 레이블을 생성할 때는 8문자 이내의 영문자/숫자를 사용하며, 이름 중에 공백이 있으면 안 된다. 예약 명령어는 사용할 수 없다. 연산(Operation) 부 명령의 니모닉 및 어셈블러 디렉티브(directive) 등을 쓰는 곳이다. 니모닉은 어셈블리 언어에서 예약되어 있는 명령어를 말하며, 디렉티브는 프로그램 실행과 관계없이 어셈블러에게 정보를 제공해 주는 지시어를 말한다. 결과적으로 연산부는 명령어나 지시어가 위치하는 곳이다.
01 어셈블리 프로그램의 이해 오퍼랜드(Operand) 부 또는 피 연산자부 주석문(Command) 부 레지스터 이름, 정수, 라벨, 연산자, 주소 등을 쓰는 곳이다. 주석문(Command) 부 해당 프로그램 줄(line)에 대한 설명을 표기하는 곳이다. 기재할 때는 세미콜론(;)으로 시작하며, 어셈블러는 주석문 부를 모두 무시하기 때문에 아무데나 사용하여도 된다.
01 어셈블리 프로그램의 이해 어셈블리 프로그램 피 연산자는 모두 기억장치의 주소 기억장치 250번지에서 데이터를 누산기에 적재한다. 기억장치 251번지의 데이터와 덧셈을 수행하고 결과를 다시 누산기에 저장한다. 기억장치 251번지에 결과를 저장한다. 프로그램의 주소 170번지로 점프한다. 주기억장치, CPU 레지스터, ALU의 동작 과정 100번지의 명령어 LOAD 250은 기억장치 100번지에서 인출되어 명령어 레지스터(IR)에 저장한다. 이 명령어가 해독되어서 기억장치 250 번지의 데이터가 누산기(AC)로 이동하게 된다. 프로그램 카운터(PC)가 다음 명령어를 수행하기 위해서 하나 증가한다. PC = PC + 1 = 101
01 어셈블리 프로그램의 이해 LOAD 명령어의 동작 100번지 명령어의 동작 [단계 1]은 명령어 인출 단계이고, [단계 2]는 명령어가 실행되는 단계다.
01 어셈블리 프로그램의 이해 ADD 명령어의 동작 PC에 저장되어 있는 데이터 값 101에 의해서 두 번째 명령어가 기억장치 101번지에서 인출되어 IR에 저장된다. 누산기(AC)의 내용과 251번지의 내용을 더하고, 결과를 다시 누산기에 저장하게 된다. 그 다음 PC의 내용은 다음 명령어를 위해 102로 증가하게 된다.
01 어셈블리 프로그램의 이해 STORE 명령어의 동작 PC에 의해서 세 번째 명령어가 102번지로부터 인출되어 IR에 저장되고 해독된다. 명령어 내용에 따라서 AC의 내용이 기억장치 251번지에 저장된다. 그리고 PC의 내용은 103으로 증가하게 된다.
01 어셈블리 프로그램의 이해 JUMP 명령어의 동작 네 번째 명령어가 103번지에서 인출되어 IR에 저장된 후 명령어가 해독된다. 분기될 목적지 주소, 즉 IR의 하위 부분(170)이 PC로 적재된다. 다음 명령어 인출 사이클에서는 170 번지의 명령어가 인출되어 실행될 것이다.
02 명령어 사이클 프로그램 실행 과정에서 명령어는 1단계에서 명령어 인출을 수행하고 2단계에서는 명령어를 실행하였다. 프로그램 실행 과정에서 명령어는 1단계에서 명령어 인출을 수행하고 2단계에서는 명령어를 실행하였다. 명령어 사이클(instruction cycle) 명령어는 두 단계를 하나의 사이클로서 해서 명령어를 수행한다. 명령어 사이클을 구성하는 명령어 인출 단계는 인출 사이클(fetch cycle)이라고 하며, 명령어 실행 단계는 실행 사이클(execute cycle)이라고 한다. 명령어 사이클의 동작과정
02 명령어 사이클 프로그램 실행의 계층 구조 프로그램이 실행되는 계층 구조 인출 사이클과 실행 사이클 동작은 여러 개의 단계(step)들로 구성된다. 각 단계에서 실제 수행되는 동작을 마이크로-연산(Micro-Operations)이라 한다. 명령어를 실행하기 위한 가장 기본 단위의 프로그램 수행이다. 그래서 원자 연산(atomic operation)이라고도 한다 프로그램이 실행되는 계층 구조 명령어들은 명령어 사이클의 집합으로 구성된다. 명령어의 사이클에는 두 개의 명령어 부 사이클이 존재한다. 각 부 사이클의 수행도 여러 단계로 구분되며 이 구분이 마이크로 연산이다.
02 명령어 사이클 명령어 인출 사이클(Fetch Cycle) 인출 사이클은 중앙처리장치가 기억장치에서 명령어를 읽어오는 단계 프로그램 카운터(PC)는 다음에 인출할 명령어의 주소를 가지고 있다. CPU는 PC가 가리키는 기억장소에서 명령어를 인출하고 PC 내용을 증가한다. 인출 명령어는 IR에 적재되고 CPU는 이를 해석하고, 요구된 동작을 수행한다. 명령어 인출 사이클에 대한 마이크로 연산 1인출 사이클에서는 t0, t1 그리고 t2의 중앙처리장치 클록 주기가 필요하다. 중앙처리장치 클록이 100㎒ (클록 주기 = 10㎱)이면, 인출 사이클 시간은 10㎱ × 3 = 30㎱ 소요된다.
02 명령어 사이클 인출 사이클에서 주소와 명령어 흐름 t0에서는 주소가 기억장치로 전달되고 있다. t1, t2에서는 기억장치에서 인출된 명령어가 MBR을 통해서 IR로 전달된다.
02 명령어 사이클 명령어 실행 사이클(Execution Cycle) 명령어를 실제적으로 실행하는 단계다. 중앙처리장치와 기억장치 간에 데이터가 전송된다. 중앙처리장치와 입출력 모듈 간에 데이터가 전송된다. 데이터에 대하여 지정된 산술 혹은 논리 연산이 수행된다. 제어동작으로 점프(jump)와 같이 실행될 명령어의 순서가 변경될 때 사용된다. 실행 사이클에서 수행되는 마이크로-연산들은 명령어에 따라 다름 ADD 명령어의 실행 사이클 기억장치에 저장된 데이터를 AC의 내용과 더하고, 그 결과를 다시 AC에 저장하는 명령이다.
02 명령어 사이클 ADD 명령어 실행 사이클 동안의 정보 흐름 t0에서는 주소가 기억장치로 전달되는 것을 보여주고, t1, t2는 명령어와 데이터의 흐름을 보여준다.
03 명령어 집합 중앙처리장치가 수행할 동작을 정의하는 2진수 코드로 된 명령들의 집합을 명령어 집합(instruction set)라고 한다. 기계 명령어(machine instruction)라고도 부르며, 일반적으로 어셈블리 코드(assembly code) 형태로 표현된다. 명령어 집합은 중앙처리장치의 사용목적, 특성에 따라 결정된다. 명령어 집합 설계를 위해 결정되어야 할 사항들 연산 종류 : 중앙처리장치가 수행할 연산들의 수와 종류 및 복잡도 등을 결정해야 한다. 데이터 형태 : 연산을 수행할 데이터들의 형태, 데이터의 길이(비트 수), 수의 표현 방식 등을 고려해서 명령어들을 만들어야 한다. 명령어 형식 : 명령어의 길이, 오퍼랜드 필드들의 수와 길이 등을 고려한다. 주소지정 방식 : 피연산자의 주소를 지정하는 방식을 고려해야 한다.
03 명령어 집합 명령어 집합의 특성 명령어는 연산 코드(Operation Code), 오퍼랜드(Operand)로 구성 연산 코드는 수행될 연산을 지정하는데 연산자로고도 하며, 함수 연산 기능, 전달 기능, 제어 기능, 입출력 기능으로 분류 오퍼랜드는 연산을 수행하는 데 필요한 데이터 혹은 데이터의 주소를 나타낸다. 중앙처리장치의 레지스터, 주기억장치, 혹은 입출력장치 등에 저장된 데이터 또는 주소가 된다. 다음 명령어 주소(Next Instruction Address)가 위치할 수 있다.
03 명령어 집합 명령어 형식(instruction format) 명령어를 표현하는 형식은 여러 개의 필드(field)들로 나누어지며 각 필드는 일련의 비트 패턴에 의해 표현된다. 명령어 내 필드들의 수와 배치 방식 및 각 필드의 비트 수에 의해서 명령어가 표현되는데, 이러한 표현 방법을 명령어 형식(instruction format)이라고 한다. 세 개의 필드들로 구성된 16비트 명령어 하나의 연산코드와 두 개의 오퍼랜드가 존재하며, 16비트 명령어 길이가 하나의 단어(Word)가 된다.
03 명령어 집합 명령어 집합에서 연산의 종류 명령어가 수행하는 연산은 함수 연산 기능, 전달 기능, 입출력 기능, 제어 기능의 연산 등이 있다. 함수 연산 기능(Functional Operation) 중앙처리장치에서 명령어 집합은 함수의 연산 기능을 담당하는 산술 연산이나 논리 연산 명령 등이 해당된다. 전달 기능(Transfer operation) CPU와 주기억장치 사이, CPU 내의 레지스터 간의 정보교환과 적재, 저장기능을 수행. 전달 기능의 명령어에서는 정확한 데이터 전송을 위해서 근원지 오퍼랜드와 목적지 오퍼랜드의 위치가 명시되어야 한다. 입출력 기능(Input/Output Operation) 입출력 명령어는 중앙처리장치와 외부 장치들 간의 데이터 이동을 위한 명령어다. 분리형 입출력의 경우에는 별도의 입출력 명령어를 사용하지만 기억장치-사상 입출력의 경우에는 일반적인 데이터 이동 명령어들을 동일하게 사용한다. 제어 기능(Control Operation) 제어장치에서 수행되며 프로그램의 수행흐름을 제어하는 데 사용. 프로그램 내의 명령어의 실행 순서를 변경하는 명령어로 분기, 서브루틴 호출이 대표적이다
03 명령어 집합 분기 명령어 오퍼랜드가 다음에 실행할 명령어 주소를 가지고 있으며, 명령어 내용에 따라서 무조건 오퍼랜드의 주소로 이동하거나 조건 만족 시에만 이동한다. 조건 분기는 조건 코드(condition code)와의 부합 여부에 따라서 분기가 결정되며, 조건 코드 에는 zero(0), 부호(+, -), 오버플로우 플래그 등이 있다. 다양한 분기의 형태 203번지의 BRZ(branch if zero) 211 조건코드가 0이면 211로 분기 210번지의 BR 202 무조건 분기 명령어로 무조건 202번지로 분기하라는 명령 225번지의 BRE(branch if equal) R1, R2, 235 실행 중에 비교(검사)와 분기 처리를 수행한다. 그래서 레지스터 R1과 레지스터 R2의 내용이 같다면 235번지로 분기한다.
03 명령어 집합 서브루틴 호출 명령어 CALL 명령어에 대한 마이크로-연산 RET 명령어의 마이크로-연산 호출 명령어(CALL 명령어)는 현재 PC 내용을 스택에 저장하고 서브루틴의 시작 주소로 분기하는 명령어다. 복귀 명령어(RET 명령어)는 CPU가 원래 실행하던 프로그램으로 되돌아가도록 하는 명령어다. CALL 명령어에 대한 마이크로-연산 RET 명령어의 마이크로-연산 t0 : MBR ← PC t1 : MAR ← SP, PC ← X t2 : M[MAR] ← MBR, SP ← SP - 1 t0 : SP ← SP + 1 t1 : MAR ← SP t2 : PC ← M[MAR]
03 명령어 집합 서브루틴의 호출과 복귀과정
03 명령어 집합 서브루틴 수행 과정에서 스택의 변화
03 명령어 집합 오퍼랜드 형태와 수에 따른 명령어 분류 오퍼랜드에 저장될 데이터 형태는 주소(addresses), 수(numbers), 문자(characters), 논리 데이터(logical data) 등이 될 수 있다. 주소(addresses) : 주기억장치의 주소이거나 레지스터의 주소다. 수(numbers) : 정수 혹은 고정-소수점 수, 부동-소수점 수, BCD 등을 사용 문자 : ASCII 코드가 사용된다. 논리 데이터(logical data) : 비트(bit) 혹은 플래그(flag) 등으로 사용된다. 오퍼랜드가 주소를 나타낼 때, 오퍼랜드 수에 따라 3, 2, 1, 0 주소 방식이 있다. 0 주소 방식은 스택을 사용하는 컴퓨터에서 사용된다.
03 명령어 집합 주소 수에 따른 명령어 분류 주소 수에 따른 명령어 표현 (어셈블리어 표현)
03 명령어 집합 1-주소 명령어(1-address instruction) 오퍼랜드 한 개만 포함하는 명령어로서, 오퍼랜드 형태는 주소다. 1-주소 명령어의 형식의 예 명령어의 총 길이는 16비트로 그 중에서 연산 코드가 5비트이고 기억장치 주소는 11비트다. 주소지정 가능한 기억장치의 수는 2048(= 211)개다. 어셈블리 언어로 1-주소 명령어를 표현한 예 LOAD X ; AC ← M[X](X번지의 데이터를 누산기에 저장) LOAD는 연산 코드에 해당되며, X는 유일한 주소로 존재한다.
03 명령어 집합 2-주소 명령어(two-address instruction) 오퍼랜드 2개를 포함하는 명령어 형식으로 오퍼랜드 2개 모두 주소를 저장하데 사용 2-주소 명령어 형식 예 : 명령어의 길이는 16비트이고 연산 코드는 5비트다. (a)는 두 오퍼랜드 모두 레지스터 번호인 경우이고, (b)는 하나의 오퍼랜드가 레지스터이고 또 다른 하나가 기억장치 주소인 경우의 명령어 형식이다. 어셈블리 언어로 2-주소 명령어를 표현한 예 : X, Y의 두 개 변수가 주소 MOV X, Y ; M[X] ← M[Y] (Y번지의 기억장치 데이터를 X 번지의 기억장치로 이동)
03 명령어 집합 3-주소 명령어(three-address instruction) 오퍼랜드 3개가 존재하며 레지스터의 주소를 저장하는 명령어 형식 명령어 형식의 예 명령어의 총 길이는 16비트이고 연산코드는 4비트, 3개의 레지스터의 길이는 각 4비트씩이다. 각 16(= 24)개의 레지스터의 번호를 저장한다. 어셈블리 언어로 3-주소 명령어를 표현한 예 X, Y, Z가 주소를 나타낸다. ADD X, Y, Z ; M[X] ← M[Y] + M[Z] (Y와 Z번지의 데이터를 덧셈해서 X번지에 저장)
03 명령어 집합 명령어 형식이 프로그래밍에 미치는 영향 3가지 주소 형식으로 수식 연산의 프로그램 비교 오퍼랜드의 개수 0, 1, 2, 3에 따라서 작성된 프로그램의 특성이 달라진다. 3가지 주소 형식으로 수식 연산의 프로그램 비교 X = B *( C+ D * E – F / G ) 프로그램에서 사용되는 어셈블리 명령어
03 명령어 집합 0-주소 명령어를 사용한 프로그램 스택을 이용하여 X=B*(C+D*E–F/G)연산을 수행하는 프로그램 명령어의 길이는 12개로 프로그램이 길다.
03 명령어 집합 스택에서 0-주소 명령어 프로그램의 동작
03 명령어 집합 1-주소 명령어를 사용한 프로그램 프로그램의 전체길이는 9이며, M[A] 형식은 기억장치 A번지에 저장된 데이터 내용을 나타낸다. T는 기억장치 내의 임시 저장장소의 주소를 나타낸다.
03 명령어 집합 2-주소 명령어를 사용한 프로그램 M[A]는 기억장치 A 번지의 내용을 나타내며, R1, R2는 CPU내의 레지스터를 나타낸다. 2-주소 명령어를 사용하는 프로그램에서는 오퍼랜드가 2개 존재하는 것을 확인할 수 있다. 프로그램의 길이는 8이 된다. 1-주소 명령어와 비교해 보면 그 길이가 줄어든 것을 확인 할 수 있다.
03 명령어 집합 3-주소 명령어를 사용한 프로그램 주소 개수에 따른 장단점 세 개의 오퍼랜드가 사용되며, 이 오퍼랜드들은 모두 주소를 나타낸다. R1과 R2는 CPU내의 레지스터다. 전체 프로그램의 길이는 5로, 앞의 두 방법과 비교해서 길이가 짧아졌다. 주소 개수에 따른 장단점 주소 수가 많아질수록 이를 저장할 오퍼랜드의 수가 많아지기 때문에 명령어가 더 복잡해지는 것을 알 수 있다. 레지스터 수가 많아져 연산 속도가 빨라지고 프로그램이 짧아져서, 프로그램 당 명령어 수가 감소하게 된다. 주소 수가 적은 명령어는 오퍼랜드의 수가 적어서 간단하므로 명령어 인출과 실행 속도가 높아진다. 그러나 프로그램의 길이가 증가한다.
03 명령어 집합 명령어 형식 명령어 길이에 따른 명령어 명령어 내의 비트 배열을 명령어 형식이라고 한다. 연산 코드의 비트 길이와 오퍼랜드의 수와 길이에 따라 명령어 형식이 달라 질 수 있다. 명령어 길이에 따른 명령어 기억장치와 관련된 명령어 길이 기억장치 용량과 기억장치 조직에 의해서 주소를 지정하는 오퍼랜드 부분이 영향을 받게 된다. 기억장치의 용량이 많은 경우, 주소의 수가 많아지므로 오퍼랜드의 비트 수가 많아져야 하기 때문이다. 버스 조직(bus structure)에 따른 명령어 길이 한 번에 데이터를 운반할 수 있는 능력을 나타내는 것이 버스 조직이므로, 데이터를 전송하는 명령어의 경우 이에 맞는 명령어의 길이가 필요할 것이다. CPU의 복잡도(complexity)와 CPU의 속도에 따른 명령어 길이 명령어는 CPU가 한 번에 읽고 쓸 수 있는 단위로 수행된다. 그리고 CPU가 한 번에 읽고 쓸 수 있는 비트 수를 단어(Word)라고 한다. 따라서 단어의 크기에 따라서 명령어의 길이가 정해진다.
03 명령어 집합 명령어의 종류에 따른 명령어 형식 명령어 내 비트들의 할당에 영향을 주는 요소들 주소지정 방식의 수 : 명시적일 경우 한 개 또는 그 이상의 비트들이 필요하다. 명령어 내 오퍼랜드의 수 : 오퍼랜드가 주소를 나타내는 경우, 주소의 수가 적으면 프로그램의 길이가 더 길어지고 복잡해진다. 오퍼랜드 저장에 사용되는 레지스터의 수 : 처리할 데이터를 CPU로 가져오는 데 사용할 레지스터다. AC(누산기)를 사용하는 경우 오퍼랜드 주소들 중의 한 개는 묵시적으로 지정되어, 명령어 비트를 소비하지 않는다. 따라서, 오퍼랜드 참조를 위하여 사용되는 레지스터들이 많아 질수록 사용되는 비트들의 수는 적어진다. 레지스터 집합의 수 : 보통 8 또는 16개의 범용 레지스터 집합을 가지고 있다. 데이터의 저장과 변위 주소 지정을 위한 주소의 저장에 사용할 수 있다. 레지스터 집합들이 기능적으로 분리되면 명령어에서 사용되는 비트의 수가 줄어든다. 주소 영역(address range) : 액세스할 수 있는 주소 범위는 주소 비트들의 수와 관계가 있다. 직접 주소 지정은 심각한 제한 요인이 된다. 주소 세분화(address granularity) : 주소 지정 단위로 바이트 혹은 단어를 사용하면 문자 조작을 더 편리하게 할 수 있다. 그러나 일정한 크기의 기억장치에 대하여 주소 비트들이 더 많이 필요하다.
03 명령어 집합 가변 길이 명령어 명령어 형식에서 서로 다른 길이를 가지는 경우를 가변 길이 명령어라고 함 명령어 형식에서 서로 다른 길이를 가지는 경우를 가변 길이 명령어라고 함 길이가 서로 다른 더 많은 종류의 연산 코드들을 쉽게 제공해줄 수 있음 레지스터와 기억장치 참조들을 주소 지정 방식들과 다양하게 결합함으 로써 주소 지정이 더욱 융통적임 CPU의 복잡도가 증가하는 단점이 있음
04 축소 명령어 집합 컴퓨터의 개념 전통적인 컴퓨터의 중앙처리장치에서는 명령어가 복잡하기 때문에 명령어를 해석하는 데 시간이 오래 걸리며, 명령어 해석에 필요한 회로도 복잡하다. 중앙처리장치가 명령어를 수행하려면 여러 개의 클록이 소요되어 처리속도가 느려진다. 이러한 컴퓨터의 구조를 복잡 명령어 집합 컴퓨터(CISC, Complex Instruction Set Computer)라고 한다. 최근에는 중앙처리장치의 명령어 개수를 줄여 하드웨어 구조를 좀 더 간단하게 만드는 방식으로 축소 명령어 집합 컴퓨터(RISC, Reduced Instruction Set Computer) 구조가 사용되고 있다. RISC는 CISC보다 구조가 단순하기 때문에 복잡한 연산도 적은 수의 명령어들을 조합하여 수행할 수 있으므로 처리 속도를 향상시킬 수 있다.
04 축소 명령어 집합 컴퓨터의 개념 복잡 명령어 집합 컴퓨터 복잡한 명령어 집합을 갖는 중앙처리장치 구조를 복잡 명령어 집합 컴퓨터(CISC)라고 한다. 마이크로 프로그래밍을 통하여 다양한 길이의 명령어 형식 등의 여러 가지의 명령어와 번지지정 모드를 구현한 할 수 있다. 연산에 대해서는 레지스터와 레지스터 연산, 레지스터와 메모리 연산, 메모리와 메모리 연산을 모두 갖추고 있는 것이 보통이다. 오퍼랜드는 2개에서 3개까지 지정할 수 있는 경우가 많다. 이것은 3-주소 명령어 한 개를 이용할 수 있다. CISC는 처리속도를 향상시키기 위해서 마이크로 프로그램의 프로시저 (procedure)나 서브루틴 등을 빠른 속도의 ROM에 마이크로 코드화하 여 구현하였다.
04 축소 명령어 집합 컴퓨터의 개념 복잡 명령어 집합 컴퓨터의 사용에 대한 단점 고급 언어 프로그램을 기계언어로 변경해주는 컴파일러에서 컴파일 과정이 단순화되면 그 만큼 컴퓨터 성능이 유리하다. 그러나 복잡 명령어 집합 컴퓨터 기반의 프로그램에서는 프로그램 코드의 수를 최소화하고, 명령어의 실행 횟수를 줄이는 등의 단순화 작업을 통한 최적화가 쉽지 않다. 컴퓨터 관련 기술의 발전으로 기억장치의 용량은 커지고 가격은 하락하고 있다. 이런 상황에서 CISC는 짧은 프로그램을 생성해서, 프로그램이 기억장치를 적게 차지하므로 자원이 절약된다고 말 할 수 없다. 기억장치의 가격이 하락함에 따라 CISC의 짧은 프로그램의 장점은 효력이 없다는 것이다. 또한 한 개의 명령어를 실행하는 것이 여러 개의 기본 명령어들보다 더 빨리 실행되므로 CISC가 명령어 실행이 빠르다고 생각할 수 있으나 속도의 증가는 복잡한 기계 명령어의 능력에 기인한 것이 아니라 고속의 제어 장치가 존재하기 때문이다. CISC가 엄밀하게 빠른 실행을 만드는 것이 아니라는 것이다. 이상으로 컴파일러의 단순화 측면, 짧은 프로그램 측면, 빠른 실행속도 측면의 분석을 통해서 여전히 제어기의 구성이 복잡하고 명령 단위의 수행 시간도 길어지게 되면서 고속을 요구하는 현대 컴퓨터에 최적의 구성을 만족하지 못한다.
04 축소 명령어 집합 컴퓨터의 개념 축소 명령어 집합 컴퓨터 중앙처리장치의 명령어 개수를 줄여 하드웨어 구조를 좀 더 간단하게 만드는 방식을 축소 명령어 집합 컴퓨터(RISC)라고 함 RISC 구조의 특징 RISC는 명령어가 단순하므로 사이클당 한 명령어 실행(one instruction per cycle)이 가능하다. 즉, 기계 사이클당 하나의 기계어가 실행된다. 결과적으로 CISC의 마이크로 명령어보다 덜 복잡하고, 또한 그만큼 빨리 수행될 것이다. 단순 명령어 특징은 많은 비트를 필요로 하지 않아서, 레지스터간 연산(register to register operations)이 가능하다. 기억장치를 액세스하는 동작들이 간단한 LOAD와 STORE 명령어에 의해서 레지스터 연산으로 대체된다. 또한 제어장치도 간단해질 것이다. 주소 지정방식에 있어서도, 단순하게 레지스터 주소 지정 방식을 사용하므로 적은 수의 간단한 주소지정 방식을 사용 할 수 있다. 적은 수의 단순한 명령어 형식을 사용할 수 있다. 그래서 연산 코드의 해독과 레지스터 오퍼랜드의 액세스가 동시에 일어나는 게 가능하다. RISC는 대부분의 현대 프로세서 디자인에 채택되고 있고, 또 비교적 전력 소모가 적기 때문에 임베디드 프로세서에도 채택되고 있다.
Thank You