- 명령어 세트
어떤 한 CPU를 위해 정의되어 있는 명령어들의 집합
- 명령어 세트 설계
연산 종류, 명령어 형식, 데이터 형식, 주소지정 방식을 설계해야 함
연산 종류는 CPU가 수행할 연산들의 수와 종류 및 복잡도
명령어 형식은 명령어에서 전체 비트의 수, 명령어 구성, 각 필드의 정보 및 형식 등이 있음
데이터 형식은 연산이 수행될 데이터들의 형태, 데이터의 길이와 수의 표현 방식(정수, 부동소수점 수)
주소 지정은 오퍼랜드의 주소를 지정하는 방식
- 연산의 종류
CPU 마다 제공하는 연산의 종류가 조금씩 다르지만 기본적으로 제공해야 하는 연산이 존재
기본 연산으로 데이터 전송, 산술 연산, 논리 연산, 입출력, 프로그램 제어가 있음
데이터 전송은 기억 장치나 레지스터간의 데이터를 이동하는 동작이며 과정에서 기억장치의 주소를 계산해야 하 는 경우도 있음
산술 연산은 기본적인 산술 연산
논리 연산은 데이터의 각 비트들 간에 대한 논리 연산
입출력은 CPU와 외부 장치들 간의 데이터 이동을 위한 동작
프로그램 제어는 명령어 실행 순서를 변경하는 연산으로 분기와 서브루틴 호출 등이 있음
- 프로그램 제어
명령어 실행 순서를 변경하는 연산으로 분기와 서브루틴 호출 등이 있음
- 서브루틴
서브루틴을 호출하는 CALL 명령어와 서브루틴으로부터 원래 프로그램으로 복귀 시키는 RET 명령어가 있음
스택 포인터를 사용함
- 명령어 형식
명령어를 구성하는 필드의 종류와 개수, 배치 방식 및 필드 당 비트 수를 정의한 형식
기본요소로 연산 코드, 오퍼랜드, 다음 명령어 주소로 나뉨
연산코드는 수행될 연산 지정
오퍼랜드는 연산을 수행하는 데 필요한 데이터 혹은 데이터의 주소
다음 명령어 주소는 현재의 명령어 실행이 완료된 후에 다음 명령어를 인출할 위치를 나타내며 실행 순서를 변경하는 경우에만 필요
비트 수는 일반적으로 단어의 길이와 같음
- 오퍼랜드 필드
데이터의 메모리 주소를 나타내는 필드
데이터, 기억장치 주소, 레지스터 번호 냐에 따라 필요한 비트수가 달라질 수 있음
오퍼랜드 필드가 많을 수록 프로그램이 짧아질 수 있지만 그만큼 명령어 해독 과정의 복잡도가 증가함
- 1주소 명령어
오퍼랜드 필드가 한개인 명령어
AC 에 일일히 값을 넣고 연산함
- 2주소 명령어
오퍼랜드 필드가 두개인 명령어
- 3주소 명령어
오퍼랜드 필드가 세개인 명령어
- 주소지정 방식
주소 비트들을 이용하여 오퍼랜드의 유효 주소를 결정하는 방법
오퍼랜드 필드가 메모리 주소를 직접 나타내거나 저장장치나 레지스터와 함께 나타낼 수 있음
- 직접 주소지정 방식
명령어 내 오퍼랜드 필드의 내용이 데이터의 유효 주소로 사용되는 가장 간단한 방식
직접 액세스할 수 있는 기억장치 주소 공간이 오퍼랜드 필드의 비트 수에 의해 제한됨
- 간접 주소지정 방식
오퍼랜드가 가리키는 기억 장치의 내용을 유효주소로 사용하여 연산에 필요한 데이터를 인출하는 방식
최대 기억장치 용량이 그 기억 장소에 저장된 전체 비트 수에 의해 결정
간접 비트라 포함되어야 함
두 번의 기억장치 액세스가 필요함
- 다단계 간접 주소지정 방식
여러 단계의 간접 지정
- 묵시적 주소지정 방식
명령어 실행에 필요한 데이터의 위치를 지정하지 않더라도 이미 묵시적으로 정해져 있는 방식
- 즉시 주소지정 방식
명령어 내에 연산에서 사용할 데이터를 포함하는 방식
- 레지스터 주소지정 방식
오퍼랜드 필드의 내용은 레지스터 번호로 사용하고 연산에 사용될 데이터가 레지스터에 저장되어 있는 방식
명령어 형식에서 오퍼랜드 필드의 비트 수가 적어도 되고, 데이터 인출을 위하여 기억장치를 액세스할 필요가 없음
데이터가 저장될 수 있는 위치가 CPU 내부 레지스터로 제한됨
- 레지스터 간접 주소지정 방식
지정된 레지스터의 내용을 유효 주소로 사용하여, 그 주소가 가리키는 기억장치 로부터 읽어온 데이터를 연산에 사용하는 방식
- 변위 주소지정 방식
지정된 레지스터의 내용과 명령어 내 오퍼랜드(변위)를 더하여 유효 주소를 결정하는 주소지정 방식
EA(유효 주소) = A(변이 주소) + (R)(레지스터 번호)
- 상대 주소지정 방식
레지스터로 프로그램 카운터(PC)가 사용되는 방식
변위는 명령어의 위치를 기준으로 한 상대적인 값이 됨
주로 분기 명령어에서 사용됨
- 인덱스 주소지정 방식
인덱스 레지스터의 내용과 명령어 내 오퍼랜드(변위) 를 더하여 유효 주소를 결정하는 주소지정 방식
변위는 배열의 주소를 지정
인덱스 레지스터의 내용은 그 배열의 시작 주소로부터 각 데이터까지의 거리
프로그램 루프 내에서 인덱스 레지스터의 내용을 증가/감소 시킴으로써 배열 내의 데이터 순차 접근 가능
메모리 주소에는 배열의 첫번째 요소의 메모리 주소가 들어가고 인덱스 레지스터는 각 요소의 크기를 표시함
- 자동 인덱싱
인덱스 주소지정이 완료된 후에 자동적으로 인덱스 레지스터 내용을 증가 혹은 감소하는 방식
- 베이스-레지스터 주소지정 방식
베이스 레지스터의 내용과 명령어 내 오퍼랜드(변위)를 더하여 유효 주소를 결정하는 주소지정 방식
베이스 레지스터에는 기준이 되는 명령어의 주소가 저장됨
프로그램의 시작 위치를 지정하는 데 사용
- 실제 상용 프로세서들의 명령어 형식
- PDP 계열 프로세서
명령어의 길이가 한가지로 고정되거나 길이가 서로 다른 것을 제공함
- 펜티엄 계열 프로세서
다양한 종류의 명령어 형식 제공
기억 장치 공간은 세그먼트 단위로 분리되어 액세스
세그먼트 레지스터가 세그먼트 시작 주소를 가지고 있음
- 선형 주소
각 저장공간의 클러스터의 주소를 이용하여 가변하는 주소
클러스터의 주소에 메모리 주소 결과값을 더하는 방식으로 주로 사용됨