명령어는 연산 코드와 오퍼랜드로 구성
연산 코드
- 명령어가 수행할 연산
- 가장 기본적인 연산 코드 유형 4가지
데이터 전송
산술/논리 연산
제어 흐름 변경
입출력 제어
오퍼랜드
- 연산에 사용할 데이터 or 연산에 사용할 데이터가 저장된 위치
- 많은 경우 연산에 사용할
데이터가 저장된 위치
, 즉 메모리 주소나 레지스터 이름이 담김그래서 오퍼랜드 필드를 주소 필드라고 부르기도 함
- 오퍼랜드는 명령어 안에 0개(0-주소 명령어), 1개(1-주소 명령어), 2개(2-주소 명령어), ... 등이 있을 수 있음
질문: 오퍼랜드 필드에 데이터가 아닌 메모리나 레지스터 주소를 저장하는 이유는?
이유: 명령어 길이 때문
그림에서 볼 수 있듯, 주소를 저장하면 하나의 메모리 주소에 저장할 수 있는 공간만큼 커진다.
주소 지정 방식
- 유효 주소
- 연산에 사용할 데이터가 저장된 위치
- 명령어 주소 지정 방식
- 연산에 사용할 데이터가 저장된 위치를 찾는 방법
- 즉, 유효 주소를 찾는 방법
- 다양한 명령어 주소 지정 방식들이 존재
다양한 주소 지정 방식들
- 즉시 주소 지정 방식 (immediate addressing mode)
- 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
- 가장 간단한 형태
- 연산에 사용할 데이터 크기 작음 (직접 명시하기 때문)
- 주소를 찾는 과정이 없어 빠름
- 직접 주소 지정 방식 (direct addressing mode)
- 오퍼랜드 필드에 유효 주소 직접적으로 명시
- 여전히 유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어듦
- 간접 주소 지정 방식 (indirect addressing mode)
- 오퍼랜드 필드에 유효 주소의 주소를 명시
- 속도가 느림 (주소를 찾기 위한 2번의 메모리 접근이 필요하기 때문)
- 레지스터 주소 지정 방식 (register addressing mode)
- 연산에 사용할 데이터가 저장된 레지스터 명시
- 메모리에 접근하는 속도보다 레지스터에 접근하는 것이 빠름
(즉, cpu에서 레지스터 접근이 더 빠름. cpu안에 레지스터가 있어서 당연한듯)- 레지스터 간접 주소 지정 방식 (register indirect addressing mode)
- 연산에 사용할 데이터를 메모리에 저장
- 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
<출처>
"혼자 공부하는 컴퓨터구조+운영체제".강민철.https://www.youtube.com/playlist?list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl (2023.04.03)
책과 강의를 통해 학습한 내용을 요약 정리했습니다.