명령어 : 연산 코드, 오퍼랜드로 구성되어 있음
연산 코드 : 명령어가 수행할 연산
오퍼랜드 : 연산에 사용할 데이터가 저장된 위치
연산자 : 연산 코드
피연산자 : 오퍼랜드
연산 코드 필드 : 연산 코드가 담기는 영역
오퍼랜드 필드 : 오퍼랜드가 담기는 영역
오퍼랜드
연산에 사용할 데이터, 연산에 사용할 데이터가 저장된 위치를 의미합니다.
메모리 주소, 레지스터 이름이 담깁니다. 그래서 오퍼랜드를 주소 필드라고 부릅니다.
오퍼랜드는 명령어 안에 하나도 없을 수도 있고 한 개만 있을 수도 또는 다중 등 여러 개가 있을 수 있습니다.
0-주소 명령어 : 오퍼랜드가 하나도 없는 명령어
1-주소 명령어 : 오퍼랜드가 하나인 명령어
2-주소 명령어 : 두 개 인 명령어
3-주소 명령어 : 세 개인 명령어
연산 코드
연산 코드는 명령어가 수행할 연산을 의미합니다.
명령어의 종류와 생김새는 CPU마다 달라 연산 코드의 종류와 생김새 또한 CPU 마다 다릅니다.
기본적으로 연산 코드 유형은 크게 네 가지 종류입니다.
1. 데이터 전송
- MOVE : 데이터를 옮겨라
- STORE : 메모리에 저장하라
- LOAD(FETCH) : 메모리에서 CPU로 데이터를 가져와라
- PUSH : 스택에 데이터를 저장하라
- POP : 스택의 최상단 데이터를 가져와라
2. 산술/논리 연산
- ADD / SUBTRACT / MULTIPLY / DIVIDE : 덧셈 / 뺄셈 / 곱셈 / 나눗셈을 수행하라
- INCREMENT / DECREMENT : 오퍼랜드에 1을 더하라 / 1을 빼라
- AND / OR / NOT : AND / OR / NOT 연산을 수행하라
- COMPARE : 두 개의 숫자 혹은 TRUE / FALSE 값을 비교하라
3. 제어 흐름 변경
- JUMP : 특정 주소로 실행 순서를 옮겨라
- CONDITIONAL JUMP : 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
- HALT : 프로그램의 실행을 멈춰라
- CALL : 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라
- RETURN : CALL를 호출할 때 저장했던 주소로 돌아가라
4. 입출력 제어
- READ : 특정 입출력 장치로부터 데이터를 읽어라
- WRITE : 특정 입출력 장치로 데이터를 써라
- START IO : 입출력 장치를 시작하라
- TEST IO : 입출력 장치의 상태를 확인하라
주소 지정 방식
명령어의 오퍼랜드 필드에 메모리, 레지스터의 주소를 담는 경우가 많습니다.
그러므로 오퍼랜드 필드를 주소 필드라고 부르기도 합니다.
명령어의 길이 때문에 '연산 코드, 연산 코드에 사용될 데이터' 형식으로 명령어를 구성할 수 없습니다.
오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법을 주소 지정 방식입니다.
즉시 주소 지정 방식
연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식입니다.
이런 방식은 표현할 수 있는 데이터의 크기가 작은 단점이 있지만 연산에 사용할 데이터를 메모리. 레지스터로
찾는 과정이 없어 주소 지정 방식들보다 빠릅니다.
직접 주소 지정 방식
오퍼랜드 필드에 유효한 주소를 직접적으로 명시하는 방식입니다.
오퍼랜드 필드에서 표현할 수 있는 데이터의 크기는 즉시 주소 지정 방식보다 크지만
유효 주소를 표현할 수 있는 범위가 연산 코드의 비트 수만큼 줄어듭니다.
즉 표현할 수 있는 오퍼랜드 필드의 길이가 연산 코드의 길이만큼 짧아져 표현할 수 있는 유효 주소에 제한이 생깁니다.
간접 주소 지정 방식
유효 주소의 주소를 오퍼랜드 필드에 명시하는 방식입니다.
직접 주소 지정 방식보다 표현 가능한 유효 주소의 범위가 넓어지지만 두 번의 메모리 접근이 필요하여
다른 방식보다 일반적으로 느린 방식입니다.
연산에 사용할 데이터가 레지스터에 저장된 경우 있고 이러한 경우 레지스터 주소 지정방식, 레지스터 간접 주소 지정 방식
이 사용 가능합니다.
레지스터 주소 지정 방식
직접 주소 방식과 비슷하게 연산에 사용될 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시하는 방법입니다.
레지스터 주소 지정 방식은 직접 주소 지정 방식보다 빠르게 데이터 접근이 가능 하지만 레지스터 주소 지정 방식은
직접 주소 지정 방식과 비슷한 문제를 고유하여 표현 가능한 레지스터 크기에 제한이 생깁니다.
레지스터 간접 주소 지정 방식
연산에 사용할 데이터를 메모리에 저장하고 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에
명시하는 방식입니다.
간접 주소 지정 방식과 유효 주소 찾는 과정이 비슷하지만 메모리에 접근할 횟수가 한 번으로 줄어드는 장점
이 있습니다.
레지스터 간접 주소 지정 방식은 간접 주소 지정 방식보다 빠릅니다.
주소 지정방식 : 연산에 사용할 데이터를 찾는 방법
유효 주소 : 연산에 사용할 데이터가 저장된 위치
● 즉시 주소 지정 방식 : 연산에 사용할 데이터
● 직접 주소 지정 방식 : 유효 주소 (메모리 주소)
● 간접 주소 지정 방식 : 유효 주소의 주소
● 레지스터 주소 지정 방식 : 유효 주소(레지스터 이름)
● 레지스터 간접 주소 지정 방식 : 유효 주소를 저장한 레지스터