본문 바로가기

컴퓨터구조

컴퓨터구조: 명령어

728x90
반응형

명령어 형식

명령어는 연산코드(opcode)와 오퍼랜드(operand, 피연산자), 위치, 연산 결과의 저장 위치 등의 정보로 구성된다.

(a) 0-주소 명령어는 연산에 필요한 오퍼랜드와 결과의 저장 장소가 모두 묵시적으로 지정된 경우로, 스택(stack)을 갖는 구조에서 사용된다. 데이터를 기억시킬 때는 PUSH를, 꺼낼 때는 POP을 사용한다. 이항 연산의 경우 스택의 상단부 데이터 2개로 이루어지며 연산 결과는 top이 지정하는 곳의 하단에 기억된다. 스택 구조 컴퓨터에서 수식을 계산하려면 우선 수식을 역 polish 표현으로 변환해야 한다.

 

(b) 1-주소 명령어는 연산 대상이 되는 2개 중 하나만 표현하고 나머지 하나는 묵시적으로 지정된 누산기(AC)를 사용한다. 기억 장치 내의 데이터(주소에서 표현한 장소에 있는 데이터)와 AC내의 데이터로 연산이 이루어지며 연산 결과는 AC에 저장된다.

 

(c) 2-주소 명령어는 연산에 필요한 두 오퍼랜드의 저장 장소 중 하나가 결과 값을 저장하는 장소로 사용한다.

 

(d) 3-주소 명령어는 연산에 필요한 오퍼랜드 2개와 결과 값의 저장 장소가 모두 달라 명령어에 주소 3개를 모두 지정한다. 프로그램 길이가 짧아지지면 명령어 해독 과정이 복잡해지는 단점이 있다.

니모닉(mnemonic)

시스템에 따라 모든 명령어의 길이가 같을 수도 있고 다를 수도 있다.

명령어는 워드 길이보다 짧거나 같거나 길 수도 있다.

모든 명령의 길이가 같다면 더 간단하고 해독하기도 쉽지만 모든 명령어가 최장 명령어만큼 길어야 하므로 공간을 낭비할 때가 많다.

 

명령어 형식 설계 기준

1) 명령어 길이

명령어 길이를 최소화하는 것은 프로세서가 빨라지면서 더욱 중요해지고 있다.

짧은 명령어는 더 빠른 프로세서를 의미한다.

명령어 길이를 최소화하면 해독이 어렵고 중복 가능성이 줄어들지만, 최소화하려면 명령어 해독과 실행 시간에 비중을 두어야 한다.

2) 명령어 형식의 공간

2^n개를 연산하는 시스템에서 모든 명령어가 n비트보다 작을 수는 없다. opcode에는 어떤 명령어가 필요한지 지시하기에 충분한 공간이 없을 것이다. 향후 명령어 세트에 추가할 수 있도록 opcode를 위한 공간을 남겨 두지 않았기 떄문이다.

3) 주소 필드의 비트 수

주소가 짧아지면 명령어 길이가 짧아지므로 공간을 적게 차지할 뿐만 아니라 읽어 오는 시간도 짧아진다.

 

확장 opcode

opcode와 오퍼랜드가 모두 포함된 새로운 절충안

확장 opcode는 opcode 공간과 다른 정보 간의 균형을 보여 준다. 실제로 opcode를 깨끗하고 규칙적으로 확장하기는 쉽지 않다.

다양한 크기의 opcode를 사용하는 기능은 1) 명령어 길이를 일정하게 유지, 2) 일반 명령어는 짧은 opcode를 혹은 잘 사용되지 않는 명령어는 긴 opcode를 선택하여 평균명령어 크기를 최소화하는 것으로 사용될 수 있다.

 

가변 길이 opcode를 극단적으로 사용하면 모든 명령어를 인코딩하여 필요한 비트 수를 최소화함으로써 평균 명령어 길이를 최소화할 수 있다. 하지만 이 방법은 바이트 경계를 넘나들며 정렬되지 않는 다양한 크기의 명령어를 초래하여 신속한 해독이 불가능하거나 또 다른 역효과를 가져올 수 있다.

 

명령어 종류

1) 데이터 이동 명령, 2) 2항 연산, 3) 단항 연산, 4) 비교와 조건 분기 명령, 5) 프로시저 호출 명령, 6) 루프 제어 명령

ISA(Instruction Set Architecture) 컴퓨터의 명령어는 대체로 6개의 그룹으로 나눌 수 있다.

1) 데이터 이동 명령

가장 기본이 되는 작업으로, 원본과 똑같은 새로운 객체를 만드는 복사를 의미한다.

데이터를 복사하는 이유 2가지 a) 변수에 값을 할당하기 위해서, b) 데이터의 효율적인 액세스 및 사용을 위해서

2) 2항 연산

오퍼랜드 2개를 결합하여 결과를 생성한다.

3) 단항 연산

오퍼랜드가 1개이며, 결과도 1개이다.

2항 연산보다 주소가 하나 더 적으므로 명령어도 더 짧지만, 명령에 따른 정보를 지정해야 할 때가 많다.

4) 비교와 조건 분기 명령

명령을 제공하고 조건이 충족되면 특정 메모리 주소로 분기하는 것

대부분의 프로그램에는 데이터 검사 결과에 따라 실행할 명령 순서를 변경하는 기능이 필요하다.

검사에 사용되는 가장 일반적인 방법은 특정 비트가 0인지 확인하는 것이다.

대부분의 시스템에는 특정 조건을 나타내는 상태 코드 비트가 있다.

5) 프로시저 호출 명령

프러시저(procedure)는 특정 작업을 수행하는 명령 그룹으로 프로그램 내 어디서든 호출할 수 있다. 어셈블리에서는 서브루틴, C언어에서는 함수, 자바에서는 메서드라고 한다.

프로시저가 작업을 완료하면 오출 명령 다음 명령으로 복귀해야한다. 따라서 복귀 주소를 프로시저에 전송하거나 복귀할 때 찾을 수 있도록 어딘가에 저장해야 한다.

복귀 주소는 메모리, 레지스터, 스택 세 군데에 배치할 수 있다. 프로시저 호출 명령이 복귀 주소와 함께하는 가장 좋은 방법은 스택에 넣는 것이다.

프로시저가 자기 자신을 호출하는 기능을 재귀(recursion)라고 한다.

6) 루프 제어 명령

명령 그룹을 정해진 횟수만큼 실행해야 하는 경우, 루프를 통해 매번 일정하게 증가시키거나 감소시키는 카운터로 반복할 때마다 종료 조건을 만족하는지 검사한다.

 

 

 

반응형