포털:고등학교/정보·통신 계열 전문 교과(2015)/컴퓨터 구조/명령어
1. 명령어의 개념
명령어(Instruction): 컴퓨터에게 어떤 일을 어떻게 수행해야 하는지를 나타내는 비트들의 집합 *비트: 정보 표현의 최소 단위
명령어의 목적 - 컴퓨터가 실행해야 할 작업 표시 - 작업에 필요한 일련의 동작이나 자료들을 나타냄
프로그램(Program): 어떤 일을 처리하기 위하여 컴퓨터가 실행해야할 명령어들 - 프로그램과 데이터가 주기억 장치에 연속적으로 위치하며, 이들은 중앙처리 장치에 의해 순차적으로 하나씩 실행됨
명령어의 종류 1) 데이터 처리 명령어 - 산술연산, 논리연산, 비트 처리 명령 및 워드의 비트를 이동시킬 때 사용 ex) 시프트 명령어 *워드(Word): 컴퓨터 내부에서 취급되는 정보단위. 보통 하나의 명령 또는 하나의 수치가 1워드에 상당한다. 1워드의 크기는 각각의 컴퓨터에 정해져 있으며, 8비트, 16비트, 32비트 등 여러가지 길이가 있다. 2) 데이터 전송 명령어 - 내용 변경 없이 다른 장소로 데이터를 이동시킬 때 사용 3) 프로그램 제어 명령어 - 프로그램 카운터의 값을 변경할 수 있는 제어 기능을 가진 명령어 ex) 분기, 서브 루틴 명령어
2. 명령어의 형식
모드 | 피연산자의 주소가 직접 주소인지 간접 주소인지를 구분한다. |
명령 코드부 | 실행할 동작을 지시한다. |
주소부 | 피연산자가 저장된 주기억 장치의 주소를 나타낸다. |
- 직접 주소: 가장 일반적인 주소 지정 방식, 기억 장소를 주소부에 직접 지정할 수 있게 되는 것
- 간접 주소: 컴퓨터의 명령의 주소 부분이 처리 대상의 데이터가 저장되어 있는 주소를 직접 나타내지 않고, 이 주소를 저장하고 있는 기억 장소의 주소를 저장한 것
명령 코드의 기능: 명령 코드(op code) 필드에서는 수행할 연산의 종류를 나타내며, 기능별로 다음과 같이 분류한다
함수 연산 기능 | 함수 연산에는 산술적 연산과 논리적 연산을 포함한다.
산술적 연산의 기본은 덧셈, 시프트, 보수이다. 논리적 연산의 기본은 AND, OR, NOT등의 조합이다. 범용 컴퓨터에는 기본적인 연산자 이외에 많은 함수 연산자들을 포함하여 응용 분야에 사용할 수 있도록 하고 있다. |
전달 기능 | 중앙 처리 장치와 주기억 장치 사이의 데이터 전송 기능과 레지스터 사이의 데이터 교환을 진행한다.
주기억 장치에서 데이터를 읽어 중앙 처리 장치로 가져오는 것을 적재(Load) 혹인 인출(Fetch)라고 한다. 중앙 처리 장치의 데이터를 주기억 장치에 기억시키는 것을 저장(Store)이라고 한다. |
제어 기능 | 명령 순서의 변경 혹은 프로그램의 실행 순서를 배열된 명령들의 순서와 다르게 수행할 수 있는 기능으로 조건 분기와 무조건 분기가 있다. |
입, 출력 기능 | 주기억 장치와 입, 출력 장치 사이의 데이터 이동 기능이다. |
기본적인 컴퓨터 명령어
기능 | 명령 | 의미 |
---|---|---|
함수 연산 | ADD X | AC ← AC + M(X) |
AND X | AC ← AC ^ M(X) | |
CPA | AC ← AC | |
CPC | C ← C(C는 carry) | |
CLA | AC ← 0(clear) | |
CLC | C ← 0(올림수를 clear) | |
ROL | C와 AC를 1비트 좌측 시프트 | |
ROR | C와 AC를 1비트 우측 시프트 | |
전달 | LDA X | AC ← M(X) |
STA X | M(X) ← AC | |
JMP X | PC ← X | |
제어 | SPA | if(AC > 0) then PC ← PC + 1 |
SMA | if(AC < 0) then PC ← PC + 1 | |
SZA | if(AC = ) then PC ← PC +1 | |
SZC | if(C = 0) then PC ← PC + 1 | |
INC X | M(X) ← M(X) + 1 | |
IAC | AC ← AC + 1 | |
CMA | AC ← (AC)’ 보수 | |
입출력 | IMP X | AC ← 입력 장치 X |
OUT X | 출력 장치 X ← AC |
주소부의 주소 수에 따른 분류
1) 0-주소 명령어 형식 - 스택(Stack) 구조 컴퓨터에서 사용되는 명령어 형식이다 - 입력 자료들의 출처와 연산 결과를 기억시킬 장소가 고정되어 있다 - 명령어 내에서 자료의 주소를 지정할 필요가 없는 명령어 형식이다. - TOS는 스택의 최상단을 의미한다. *스택(Stack): 한쪽 끝에서만 삽입과 삭제의 연산이 일어나는 순서 리스트를 말한다. 기억 장치에 데이터를 일시적으로 꺼내어 사용할 수 있게 주기억 장치나 레지스터의 일부를 할당하여 사용하는 임시 기억 장치이다. 2) 1-주소 명령어 형식 - 단일 누산기 구조의 컴퓨터에서 사용된다. - 명령어의 수행은 누산기(AC) 레지스터에서 이루어진다. - 하나의 주소부를 가지며, 연산에 사용되는 피연산자는 명령어에 나타난 주소부에 의하여 얻어지는 피연산자와 누산기에 기억되어 있는 피연산자이다. - 연산 결과도 누산기에 저장되므로 명령어 실행 이전에 기억되어 있던 데이터는 명령어 실행 후에 잃어버린다. 3) 2-주소 명령어 형식 - 범용 레지스터 구조의 컴퓨터에서 사용되며, 가장 많이 사용하는 형식이다. - 각 주소부는 레지스터나 주기억 장치의 주소를 지정한다. - 연산 후 입력 자료의 보존이 필요 없으면 연산 결과를 두 개의 입력 자료가 기억되어 있던 곳들 중 한 레지스터에 기억시키는 방식이다. 4) 3-주소 명령어 형식 - 범용 레지스터 구조의 컴퓨터에서 사용되며, 세 개의 주소를 지정한다. - 각 주소부는 레지스터나 주기억 장치의 주소를 지정한다. - 프로그램의 길이가 짧고 연산 후에 입력 자료가 레지스터에 보존되는 장점이 있다. - 하나의 명령을 수행하기 위해서는 자주 기억 장치에 접근해야 하므로 수행 시간이 길어져 특수 목적의 기계 외에는 사용을 하지 않는다.
주소 지정 방식 - 명령어의 명령 코드는 수행할 명령을 표시한다. - 명령은 레지스터나 주기억 장치의 데이터를 대상으로 수행된다. - 명령어가 수행되는 동안에 피연산자인 주소를 지정하는 방법은 명령어의 주소 지정 방식에 따라 좌우된다.
묵시적 주소 지정 방식 | 명령어의 정의에 따라 주소가 암시적으로 정해지는 방식으로, 누산기를 사용하는 연산에서 사용된다.
스택 구조 컴퓨터에서 0-주소 명령어는 피연산자가 스택의 맨 위를 지정하기 때문에 묵시적 주소 지정 방식이다. | |
즉시 주소 지정 방식 | 피연산자가 명령어 자체 내에 포함되어 있는 형태로 명령이 인출됨과 동시에 기억 장치의 데이터도 자동으로 인출되어 명령어의 실행이 바로 이루어지는 방식이다. | |
직접 주소 지정 방식 | 오퍼랜드 내의 주소를 실제 데이터의 주소로 직접 표현하는 방식으로, 분기 형식의 명령에서 주로 사용된다.
장점은 기억 장치상의 주소와 프로그램상의 주소가 일치하기 때문에 프로그램이 간결하게 작성되고, 간접 주소 지정 방식이 비해 속도가 빠르다. 단점은 기억 장치의 용량이 큰 경우 오퍼랜드의 길이가 길어져 융통성이 부족하다. | |
간접 주소 지정 방식 | 오퍼랜드의 주소부에 실제 피연산자가 있는 유효 주소가 기억되는 방식이다.
오퍼랜드의 주소부에 의해 기억 장치 내의 주소로 찾아간 후, 그 주소의 내용이 나타내는 주소에 실제 데이터가 기억된다. 실제 유효 주소를 구하기 위하여 한 번은 유효 주소를 가져오고, 한 번은 유효 주소로부터 실제 데이터를 가져오는 두 번의 메모리 참조가 수행된다. 장점은 오퍼랜드의 짧은 길이로 긴 주소를 접근할 수 있어 기억 장치의 용량이 큰 경우도 융통성이 보장된다. 단점은 기억 장치에 두 번 이상 접근해야하기 때문에 데이터 처리 속도가 느리다. | |
레지스터 주소 지정 방식 | 중앙 처리 장치 내의 레지스터에 실제 데이터가 기억되어 있는 방식이다.
명령어의 주소부는 지정된 레지스터의 번호를 가진다. 데이터 인출을 위해 주기억 장치에 접근할 필요가 없기 때문에 명령어 실행시간이 빨라지지만 내부 레지스터들로 제한되어 사용한다. | |
레지스터 간접 주소 지정 방식 | 간접 주소 지정 방식과 레지스터 주소 방식을 혼합하여 만든 방식이다.
오퍼랜드가 레지스터를 저장하고, 그 레지스터의 값이 실제 데이터가 기억된 주소를 지정한다. | |
상대 주소 지정 방식 | 명령어 주소부에 명령 계수기의 값이 더해져서 유효 주소가 결정되는 방식이다.
기준 주소는 명령어의 주소가 되며, 명령 계수기의 값이 상대적 변위이다. | |
베이스 레지스터 주소 지정 방식 | 베이스 레지스터에 기준이 되는 주소가 있고 명령어의 주소 필드는 기준 주소의 변위 값을 나타내는 방식이다.
다중 프로그래밍 시스템에서는 기억 장치의 어떤 부분에 있는 프로그램과 데이터를 다른 위치로 이동할 경우에 프로그램 내의 분기 명령이나 데이터를 액세스 하는 명령어의 주소 필드의 내용이 변경된 프로그램이나 데이터의 위치를 가리키도록 변경해야 한다. 베이스 레지스터 지정은 단지 베이스 레지스터의 내용만 이동된 위치의 시작 주소로 변경하면 명령어들의 주소 필드의 내용을 변경하지 않아도 된다. | |
인덱스 주소 지정 | 명령어의 주소부가 메모리의 기본 주소가 되고 지정된 인덱스 레지스터가 변위를 갖는 방식이다.
명령어의 주소부가 기억된 20은 변위로 인덱스 레지스터가 기억된 인덱스인 300을 더하여 기억 장치의 320번지 실제 데이터를 가리킨다. |
명령어 활용 명령어는 명령 코드부, 주소부로 구성되며 이들은 제어장치에서 해독되어 동작 신호로 바뀌게 된다.
명령 코드 해독 - 명령 코드는 입출력이나 연산과 같은 특정 동작을 지시하도록 정해 놓은 신호이다. ex) 2비트인 명령 코드와 동작 행위를 정할 때 제어 장치에 의하여 해당되는 회로가 동작되도록 하여야 한다.
주소 해독 - 주기억 장치는 바이트나 워드 단위로 일련번호를 부여한 고유 번호로 구별하는데, 이것을 주소(번지)라고 한다. - 기계적으로 구별할 수 있도록 회로 설계 시에 정해져서 변경할 수 없는 기계적인 번지를 절대 주소(absolute address)라 한다. - 주소는 MAR에 기억되었다가 주소 해독기에 의해 해독된다. - 컴퓨터를 설계할 때 제어 장치가 지적할 수 있는 최소의 단위에 따라 워드 단위로 주소를 가리킨 것을 워드 기계, 바이트 단위로 주소를 가리킨 것을 바이트 기계라 한다.
생활속 명령어 이용 사례
우리의 생활을 편리하게 해주는 명령어 이용 사례로는 다음과 같은 것들이 있다. 하지만 생활속 명령어 이용 사례 중 인터넷과 연결하여 이용하는 명령어는 개인의 정보가 새어나가거나 외부에서 침입하지 못하도록 주의를 기울여야 한다. 사용자가 이들을 악용하는것 또한 허락되지 않은 다른 사용자의 개인정보 유출 우려가 있기 때문에 조심해야한다. 실제로 인터넷 검색을 이용하여 구글 드라이브와 같은 웹 하드가 해킹된 사례가 있다. 또한 아래에 나온 예시 외에도 SNS를 이용하면서 계정을 해킹하는 등 많은 해킹이 이루어지고 있다. 따라서 우리는 명령어의 양면성을 인지하고 조심해서 사용해야 할 필요가 있다.