✏️ 기본 구조
- 명령어는 하나의 연산 코드와, 하나 이상의 오퍼랜드를 포함하고있다.
📍 오퍼랜드
- 연산에 사용할 데이터, 또는 저장된 주소
- 하나의 명령어에서 표현할 수 있는 데이터의 크기의 한계로 인해 데이터보다는 주로 저장된 주소를 포함한다.
- 이러한 이유로 오퍼랜드를
주소 필드
라고도 부르기도 하고,
해당 주소를 유효 주소
라고 부른다.
📍 연산 코드
- 수행할 연산을 뜻한다.
- CPU 마다 연산 코드의 종류와 갯수는 다양하지만 대표적으로 4가지를 뽑을 수 있다.
- 데이터 전송
- 레지스터 내, CPU 와 메모리간 데이터 이동, 저장
- 자료구조 형태의 데이터 저장과 조회
- 산술/논리 연산
- 사칙연산
- and, or, not 연산
- true, false 연산
- 제어 흐름 변경
- 특정 주소로 실행순서 옮기기
- return 주소를 저장한 채 특정 주소로 실행 순서 옮기기
- return 주로소로 돌아가기
- 프로그램 실행 중지
- 입출력 제어
- 입출력 장치로부터 데이터 읽기, 쓰기, 시작, 상태 확인
✏️ 명령어 주소 지정 방식
- 연산에 사용할 데이터가 지정된 위치를 찾는 방법
📍 즉시 주소 지정 방식
- 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식
- 가장 간단한 형태의 주소 지정방식
- 명령어의 크기의 한계 때문에 데이터의 크기가 작아지지만, 가장 속도가 빠르다.
📍 직접 주소 지정 방식
- 오퍼랜드 필드에 메모리의 유효 주소를 직접적으로 명시
- 즉시 주소 지정 방식보다 명령어 크기 효율이 좋지만 역시 명령어의 크기가 유효주소를 표현할 수 있는 크기만큼 줄어든다.
📍 간접 주소 지정 방식
- 메모리에 유효 주소들을 저장하고 그 주소를 오퍼랜드 플드에 입력하는 방식
- 명령어 크기를 가장 효율적으로 사용할 수 있지만 위 3가지 방법중 가장 속도가 느리다.
📍 레지스터 주소 지정 방식
- 연산에 사용할 데이터를 레지스터에 저장하고 오퍼렌드에 레지스터의 유효 주소를 입력하는 방식
- 메모리에서 조회하는 것 보다 레지스터에서 조회하는 게 더 빠르기 때문에 직접 주소 지정 방식보다 속도가 빠르다.
📍 레지스터 간접 주소 지정 방식
- 연산에 사용할 데이터를 메모리에 저장하고,
레지스터에 해당 유효 주소를 저장하고,
레지스터 주소를 오퍼랜드에 입력하는 방식